To number
Gyűlt már meg valakinek a baja azzal az Excel problémával, hogy kapott egy adatsort, amiben számok voltak, és az Excel nem tudta azokat összeadni? Például úgy, hogy kijelöli a számokat, vagy alul összeszummázza?
Nem tart sokáig, hogy rájöjjünk, valójában számok azok, csak Excel barátunk szövegnek értelmezi őket. Csúfos esetben még az is lehet, hogy a cella tulajdonságainál se tudjuk visszaállítani, aztán jöhetnek a koszos hekkelések, pl megszorozzuk a cellákat 1-el, aztán hátha úgy válik belőle szám típus, meg a hasonlók.
Penoff Gábor Excel szakembert hívtuk segítségül, hogy választ adjon erre a kihívásra. Ezt mondja:
“A probléma lehet mondjuk azért, mert a mező értéke string delimiterek, mondjuk idézőjelek közé zárva érkezik, de általában akkor csinál ilyet, ha a ThousandsSeparator vagy esetleg a DecimalSeparator nem egyezik az adatot exportáló és importáló rendszerekben.”
Mi a megoldás?
“Egy kis rutinka, ami annyit csinál, hogy végig megy a mindenkori kijelölés összes celláján, és ha a cella nem üres, megprobálja a tartalmát numerikus értékké konvertálni, illetve a cella formátumát General típusúra Text helyett. A rutin csak azokra az esetekre megoldás, ha a cellában text-ként szereplő számban az ezres és a decimális szeparátor karakterek az OS Regional Setting-jében meghatározott karakterek.”
Hol találom ezt a rutint?

“Lépjünk ki az Excelből, majd a C:\Program Files\Microsoft Office\OFFICE11\XLSTART mappába tegyük bele ezt a file-t kicsomagolva (ha nem 2003-as Office-t használunk, máshogy nézhet ki ugyanez, de csak keressük meg az XLSTART-ot). Újraindítás után meg fog jelenni a menuben egy Xtras pont, abban pedig a toNumber rutin.”

A rutin forrása a törés után olvasható. Penoff Gábornak pedig köszönjük, a szó ismét a stúdióé!
Sub toNumber() ' szamot csinal egy range-bol
Dim OldASU As Boolean
Dim C As Range
Dim cMax As Long
OldASU = Application.ScreenUpdating
Application.ScreenUpdating = False
cMax = Selection.Cells.Count
On Error Resume Next
For Each C In Selection.Cells
Application.StatusBar = "[toNumber] " & cMax & "..."
If Not IsEmpty(C) Then C.Value = CDbl(C.Value)
If Err.Number = 0 And C.NumberFormat = "@" Then
C.NumberFormat = "General"
Err.Clear
cMax = cMax - 1
Next C
On Error GoTo 0
Application.ScreenUpdating = OldASU
End Sub
Zsombor
az =value() fuggveny soxor tud ezen segiteni… es egyszerubb
Udv
Zs
Zeusz
Áldom az eget, oh Allah, hogy nem kell ekkora rohadék faszságokkal foglalkoznom, valószínű már régesrég az ereimet vagdosnám, ha ilyen arcpirítóan egyszerű feladathoz ekkora kókányolást kéne végrehajtanom. Ez gusztustalan.
Dob
Hm.. ha ráállsz a cellára, akkor megjelenik felette egy sárga felkiáltóje (ha jól tudom), amira ha rányomsz akkor ott az opció, hogy konvertálás számmá. PErsze ez is csak bizonyos konstellációkban.
A másik megoldás, hogy a cella típusának “általános’-t adsz meg.
A harmadik megoldás, hogy beállasz a cellába, nyomsz f2-t, majd entert.. akkor elvileg átkonvertálja. Nagy mennyiségben ez persze nem jó, de párnál még belefér
fns
Zsombor: a VALUE() meg nem allitja at Text-rol General-ra a cella NumberFormat-jat es tovabbra is text-kent fogja a gyagyas Excel ertelmezni.
Dob:
- a General NumberFormaat onmagaban meg nem oldja meg a string delimiterek eltunteteset
- az utolso mondatban az eszencia – 20000 cellan nem akar a juzer klikkolni.
TillZ
Ha a tizedes elválasztó megfelelő, csak a formátum rossz, akkor 1-et irányított beillesztés/értéket, szorzással számmá alakíthatjuk.
.rewerse.
vicces, hogy még a tizedes elválasztó is ekkora problémát jelent
)
kiváncsi vagyok akkor mit kezd, ha más típusú az elválasztó.. ugye magyarok , angolom meg . (vessző/pont) ?
Bálint
Extra szánalom…
csikszem
Józsi, mint az ügyvéded, azt tanácsolom, hogy látogasd meg az ASAP utilities weboldalát és szerezd be az ingyenes add-in gyűjteményt, amely számos egyéb problémára egyszerű és elegáns megoldást nyújt. Jelen esetben a Convert ‘textnumbers’ to number menüpontot javaslom használni.
Ugyanezt tanácsolom mindenkinek, aki excellel dolgozik és professzionális szintre kívánja emelni a munkáját.
Trofimov
Dob megoldását egészíteném ki az alábbi makróval, hogy ne kelljen F2 nyomkodásban kimulni:
Kijelöld a cellákat.
CTRL+F1, A szám fülön szám típust kiválasztod.
Leokézod.
Makro inditás:
Sub konvert()
For Each cel In Selection
SendKeys (“{F2}{ENTER}”)
Next
End
A kijelölt cellákban F2+enter nyom.
Ha nem akarod még a számformát, akkor:
Sub konvert()
Selection.NumberFormat = “0.00″
For Each cel In Selection
SendKeys (“{F2}{ENTER}”)
Next
End
Csak kijelöl, és indit.
Trofimov
kieg:
számformát sem megadni
fns
.rewerse.: van erre is szolucio (en spec. szivtam mar multinal ilyennel is), de Jozsinak nem volt ilyen problemaja
csikszem: az ASAP Utys asszem 50 USD, 7 mega
trofimov: a SendKeys agyatlanul lassu imho.
CsasZ
Na, mondjuk ez tényleg szánalmas. Mintha a földművelésügyi minisztréium aktakukacai írnák az ekszcellt…
Nem érdekelnek a ThousandsSeparator-ok és egyéb faszságok. Ha van egy 2-3 jegyű egész számokat tartalmazó oszlop, akkor _legrosszabb_ esetben legyen elég, hogy kijelölöm az oszlopot és a formátumot átállítom Numberre.
Ne akarják megmagyarázni, hogy miért nem képes erre, amikor az ekszcel maga is számnak mutatja a cuccot.
Konvertálja át ha szám, ha pedig hegyikecskék vannak a cellákban, akkor mutasson hegyikecskéket. De ne akarják megmagyarázni. Szar.
angelday
CsasZ, én is ezzel kezdtem. És nem működött.
Adatsorom egyébként Vodafone “hivatalos” Excel számlarészletezője (!) nem lehetett benne összeadni a tételeket. Jó, mi?
angelday
ASAP utilities nem rossz tipp, kár, hogy ennyi pénzbe kerül, még gondolkodom rajta.
Mondjuk azon is gondolkodom, hogy ezen funkciók egy része megtalálható-e az Excel 2007-es verziójában. Ha nem, akkor faszkorbács, de tényleg.
bb
nekem erre a data-text to columns parancsa szokott nagy sikert hozni hasonló problémánál, csak ki kell jelölni az oszlopot és lelkesen tovább-ot nyomogatni. magyar officeban az adatok-szövegből oszlopok parancs
csikszem
fns: Igaz. Amikor én telepítettem, akkor még free volt…
Dob
még a reaplce szokott segíteni. delimetereket átreplacézod valami értelmesebb (excel számára értelmesebb) karakterré.
klarky
Annyira irigylem a problémáidat!
Egyébként az excel tényleg nem egy paradicsom a felhasználó számára. Utálom és kerülöm is ha csak tehetem. De erről, más okból már beszéltünk itt, ezen fórumon.
CsasZ
Joe, tudom, hogy nem működik
Az adatsorod rántsd be valami adatbázisba, aztán szevasz
Dob
klarky: jah .. az excelnek vannak ilyen sajáétosságai, amik nagyon bosszantóak, de sajnos sok funkciójára nincs alternatíva
DnP
CTRL+1 Szam/altalanos aztan OK.. ehez tenyleg script kell bazz… magatol ritkan rakja at szamot szovegge, fokent “.” “,” hibakkal talalkozom..