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.
chyba VBA ??
-
- Level 4
- Příspěvky: 1142
- Registrován: srpen 08
- Pohlaví:
- Stav:
Offline
Re: chyba VBA ??
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):
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 ??
Nesmíš mít zaškrtlé toto zatržítko (pak to snad bude fungovat):


Re: chyba VBA ??
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?
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
-
- Level 4
- Příspěvky: 1142
- Registrován: srpen 08
- Pohlaví:
- Stav:
Offline
Re: chyba VBA ??
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 ??
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.
.
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.
.
-
- Level 4
- Příspěvky: 1142
- Registrován: srpen 08
- Pohlaví:
- Stav:
Offline
Re: chyba VBA ??
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
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
-
- Mohlo by vás zajímat
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
- 16
- 7654
-
od petr22
Zobrazit poslední příspěvek
02 dub 2025 21:50
-
- 4
- 3266
-
od Steage7717
Zobrazit poslední příspěvek
12 lis 2024 18:49
-
- 22
- 9662
-
od Speed_dead
Zobrazit poslední příspěvek
16 srp 2024 10:20
-
- 6
- 10174
-
od atari
Zobrazit poslední příspěvek
16 bře 2025 11:11
-
- 4
- 1135
-
od zik9
Zobrazit poslední příspěvek
12 čer 2025 15:33
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 9 hostů