chyba VBA ??

Programy pro práci v kanceláři (Word, Excel, Access…=>Office)

Moderátor: Mods_senior

Odpovědět
Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3377
Registrován: 24 říj 2008 19:50

chyba VBA ??

Příspěvek 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.
navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: 29 srp 2008 16:49

Re: chyba VBA ??

Příspěvek 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)
Uživatelský avatar
X
Elite Level 12.5
Elite Level 12.5
Příspěvky: 19360
Registrován: 22 kvě 2007 11:34
Kontaktovat uživatele:

Re: chyba VBA ??

Příspěvek od X »

Nesmíš mít zaškrtlé toto zatržítko (pak to snad bude fungovat):

Obrázek
Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3377
Registrován: 24 říj 2008 19:50

Re: chyba VBA ??

Příspěvek 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
navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: 29 srp 2008 16:49

Re: chyba VBA ??

Příspěvek 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
...
Uživatelský avatar
atari
Level 6
Level 6
Příspěvky: 3377
Registrován: 24 říj 2008 19:50

Re: chyba VBA ??

Příspěvek 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.

.
navstevnik
Level 4
Level 4
Příspěvky: 1142
Registrován: 29 srp 2008 16:49

Re: chyba VBA ??

Příspěvek 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
Odpovědět
  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Chyba CPU na desce
    od petan320 » » v Problémy s hardwarem
    16 Odpovědi
    10677 Zobrazení
    Poslední příspěvek od petr22
  • Sqlite - systémová chyba
    od cindy the skull » » v Vše ostatní (sw)
    6 Odpovědi
    12318 Zobrazení
    Poslední příspěvek od atari
  • Chyba příkazový řádek
    od zik9 » » v Windows 11, 10, 8...
    4 Odpovědi
    3546 Zobrazení
    Poslední příspěvek od zik9
  • prohližeč událostí id 1796 chyba
    od walderan » » v Problémy s hardwarem
    9 Odpovědi
    6516 Zobrazení
    Poslední příspěvek od walderan
  • Windows Update nelze stáhnout, chyba 0x80070246
    od Rewqa » » v Windows 11, 10, 8...
    11 Odpovědi
    8941 Zobrazení
    Poslední příspěvek od Rewqa

Zpět na „Kancelářské balíky“