Stránka 1 z 1

chyba VBA ??

Napsal: 30 říj 2008 20:25
od atari
Nechápu co se děje: Ve sloupci B (obecný formát) mám různé hodnoty. Makrem změním tečky na čárky (abych z toho dostal číslo):
Sheets("pomocny").Range("B:B").Replace What:=".", Replacement:=","
Ale vyleze mi z toho paskvil. Čísla která začínají nulou se převedeou, ale čísla která začínají vyšší hodnotou se nepřevedou, ale tečka zmizí, místo toho aby tam byla čárka:
1.350 se prevede na 1350
2.400 se prevede na 2400
0.987 se prevede na 0,987

Poradí někdo jak to vyřešit makrem, kde delám chybu? Když to udělám ručně v Excelu přes nabídku "Nahradit" tak to funguje.

Re: chyba VBA ??

Napsal: 30 říj 2008 22:37
od navstevnik
V syntaxi VBA je oddelovac destinnych cisel ".", pri vlozeni hodnoty do bunky (dle nastaveni v Windows) VBA pouzije ","
pri nahrade "." za oddelovac "," je tento chapan jako oddelovac tisicu a neni zobrazen, proto "1.350" > 1350, snad jsem to popsal srozumitelne.
Pro konkretni pozadavek, text "1.350" na cislo 1,350 je nutno pouzit funkci Val (a prislusny format bunky - 3 des. mista):

Kód: Vybrat vše

Range("b1").Value = Val(Range("a1").Value)

Re: chyba VBA ??

Napsal: 30 říj 2008 22:52
od X
Nesmíš mít zaškrtlé toto zatržítko (pak to snad bude fungovat):

Obrázek

Re: chyba VBA ??

Napsal: 30 říj 2008 23:21
od atari
to navstevnik: dik, to je presne to co potrebuji, tento kod:
Delám to v bunce formátu text, takže format v tomto okamžiku řešit nemusím.
Ale mám prosbu, lze ten kod nejak napsat pro celý sloupec, abych nemusel používat tento (viz níže) cyklus, který zpomaluje celý proces?

Kód: Vybrat vše

For i = 1 To 3000
Cells(i, 3).Value = Val(Cells(i, 3).Value)
Next i

Re: chyba VBA ??

Napsal: 31 říj 2008 10:20
od navstevnik
je nutno upravit kazdou bunku zvlast, zryclit lze potlacenim zobrazovani pri behu procedury:

Kód: Vybrat vše

...
Application.ScreenUpdating = False
For i = 1 To 3000
Cells(i, 3).Value = Val(Cells(i, 3).Value)
Next i
Application.ScreenUpdating = True
...

Re: chyba VBA ??

Napsal: 31 říj 2008 18:11
od atari
Pořád nad tím přemýšlím, a nechápu jednu věc. Buňku mám nastavenou na formát text, takže by to VBA neměl brát jako oddělovač tisíců, měl by to brát jako obyčejný text. Objevil jsem ještě jeden způsob zápisu (druhý v pořadí), který funguje jak má. Takže máme tří zápisy. První umí celý sloupec, ale nefugnuje korektně. Druhý a třetí fungují korektně, ale zase umí vždy jen jednu buňku.

1. Range("B:B").Replace What:=".", Replacement:="," (z 4.581 udelá 4581)
2. Cells(1, 3) = Replace(Cells(1, 3), ".", ",") (z 4.581 udělá 4,581)
3. Range("B2").Value = Val(Range("B3").Value) (z 4.581 udělá 4,581)

Takže příkaz Replace udělá pokáždé něco jiného, kdyby to uměl někdo vysvětlil, tak to uvítám.

.

Re: chyba VBA ??

Napsal: 01 lis 2008 01:03
od navstevnik
Format bunek - obecny
Metoda Replace - Range("B:B").Replace What:=".", Replacement:="," - i funkce Replace - Cells(1, 3) = Replace(Cells(1, 3), ".", ",") - vraceji retezec ("4,123"), ten je stejne jako vlozeni retezce - Range("d4").Value = "4,123" - interpretovan jako cislo 4123, avsak - Range("d5").Value = "4.123" - da cislo 4,123.
Neni rozdil mezi metodou a funkci ve vysledku, pouze metoda obslouzi blok bunek, funkce jednu bunku.

Funkce Val (Range("c4").Value = Val(Range("c4").Value)) prevede retezec "4.123" na cislo 4,123