Excel VBA Zrychlení práce s řetězcem

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

Moderátor: Mods_senior

Pavel1234
nováček
Příspěvky: 41
Registrován: září 11
Pohlaví: Muž
Stav:
Offline

Excel VBA Zrychlení práce s řetězcem

Příspěvekod Pavel1234 » 19 říj 2011 11:36

Dobrý den,
Potřeboval bych poradit jak rychleji rozhodit CSV řetězec do sloupců
Používám následující blok kodu ale je to velmi pomalé
Propojení nemohu použít a tak data načítám po řádcích z TextStreamu.
Příklad:

Kód: Vybrat vše

            strRadek = "0,25809;2;184;2;8;03;00;ae;ef;c5;0e;91;00;2"

            Cells(lngListRadek, 1) = CDbl(Left(strRadek, InStr(1, strRadek, ";") - 1))
            strRadek = Right(strRadek, Len(strRadek) - InStr(1, strRadek, ";"))
            Cells(lngListRadek, 2) = Val(Left(strRadek, InStr(1, strRadek, ";") - 1))
            strRadek = Right(strRadek, Len(strRadek) - InStr(1, strRadek, ";"))
            Cells(lngListRadek, 3) = "'" & Left(strRadek, InStr(1, strRadek, ";") - 1)
            strRadek = Right(strRadek, Len(strRadek) - InStr(1, strRadek, ";"))
            Cells(lngListRadek, 4) = Val(Left(strRadek, InStr(1, strRadek, ";") - 1))
            strRadek = Right(strRadek, Len(strRadek) - InStr(1, strRadek, ";"))
            Cells(lngListRadek, 5) = Val(Left(strRadek, InStr(1, strRadek, ";") - 1))
            strRadek = Right(strRadek, Len(strRadek) - InStr(1, strRadek, ";"))
            Cells(lngListRadek, 6) = "'" & Left(strRadek, InStr(1, strRadek, ";") - 1)
            strRadek = Right(strRadek, Len(strRadek) - InStr(1, strRadek, ";"))
            Cells(lngListRadek, 7) = "'" & Left(strRadek, InStr(1, strRadek, ";") - 1)
            strRadek = Right(strRadek, Len(strRadek) - InStr(1, strRadek, ";"))
            Cells(lngListRadek, 8) = "'" & Left(strRadek, InStr(1, strRadek, ";") - 1)
            strRadek = Right(strRadek, Len(strRadek) - InStr(1, strRadek, ";"))
            Cells(lngListRadek, 9) = "'" & Left(strRadek, InStr(1, strRadek, ";") - 1)
            strRadek = Right(strRadek, Len(strRadek) - InStr(1, strRadek, ";"))
            Cells(lngListRadek, 10) = "'" & Left(strRadek, InStr(1, strRadek, ";") - 1)
            strRadek = Right(strRadek, Len(strRadek) - InStr(1, strRadek, ";"))
            Cells(lngListRadek, 11) = "'" & Left(strRadek, InStr(1, strRadek, ";") - 1)
            strRadek = Right(strRadek, Len(strRadek) - InStr(1, strRadek, ";"))
            Cells(lngListRadek, 12) = "'" & Left(strRadek, InStr(1, strRadek, ";") - 1)
            strRadek = Right(strRadek, Len(strRadek) - InStr(1, strRadek, ";"))
            Cells(lngListRadek, 13) = "'" & Left(strRadek, InStr(1, strRadek, ";") - 1)
            strRadek = Right(strRadek, Len(strRadek) - InStr(1, strRadek, ";"))
            Cells(lngListRadek, 14) = strRadek


Díky za nápady
Pavel

Reklama
Uživatelský avatar
franticek
Level 3
Level 3
Příspěvky: 435
Registrován: únor 07
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Excel VBA Zrychlení práce s řetězcem

Příspěvekod franticek » 24 říj 2011 13:53

Ahoj.
Předpokládám, že máš vypnutý refresh buněk během chodu funkce.
Zkus použít načítání po řádku do řádcích a pak jednotlivé řádky rozdělit po slovech do pole pomocí funkce Split, kde zadáš string a znak, který je použit jako oddělovač.
A zkoušeli jste to vypnout a zapnout?

Pavel1234
nováček
Příspěvky: 41
Registrován: září 11
Pohlaví: Muž
Stav:
Offline

Re: Excel VBA Zrychlení práce s řetězcem

Příspěvekod Pavel1234 » 25 říj 2011 13:11

Ahoj
Refresh mám vypnutý. Proměnou strRadek plnim pres TextStream.ReadLine. Řádek má vždy 14 hodnot.
V podstatě rozgěluji jeden velký textový soubor do více excel souborů.
Rozhození pomocí následujícího kodu je pomelejší než původní konstrukce

Kód: Vybrat vše

    Pole = Split(strRadek, ";")
           
            For I = 0 To 13
                Cells(lngListRadek, I + 1) = Pole(I)
            Next I


Pavel

guest
Pohlaví: Nespecifikováno

Re: Excel VBA Zrychlení práce s řetězcem

Příspěvekod guest » 26 říj 2011 18:00

Mno... nejdřív bych začal nástrojem Data / Text do sloupců. Tentýž nástroj se používá i pro import dat z textových zdrojů. Jinak cest k přístupu CSV je docela dost. Pokud zůstanete u čtení po řádcích, pak uvedený Split, Worksheetfunction.Transpose, překlápění pole do listu, ...

Pavel1234
nováček
Příspěvky: 41
Registrován: září 11
Pohlaví: Muž
Stav:
Offline

Re: Excel VBA Zrychlení práce s řetězcem

Příspěvekod Pavel1234 » 27 říj 2011 10:53

OK.
Zkusím funkci Transpose.
Jinak mám pocit, že mi nic jiného než čtení po řádcích nezbývá. Počet řádků v souboru jsou desítky milionů a velikost je v GigaBytech.
Takže i nepatrný čas učetřený na zpracování řádku má smysl.

Uživatelský avatar
franticek
Level 3
Level 3
Příspěvky: 435
Registrován: únor 07
Pohlaví: Nespecifikováno
Stav:
Offline

Re: Excel VBA Zrychlení práce s řetězcem

Příspěvekod franticek » 07 lis 2011 17:17

Zdravím.

Ještě mne napadla taková možnost - co to nejprve rozsekat do souborů po rozumném počtu řádků tak, aby se vešly na jeden sheet a zároveň i do operační paměti a pak to zpracovat po celých jednotlivých souborech pomocí některé se zmíněných hromadných metod?
A zkoušeli jste to vypnout a zapnout?


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • EXCEL -jak otevřít 2 excel sobory abych je viděla současne a samostatně
    od Ketty02 » 30 srp 2024 21:19 » v Vše ostatní (sw)
    2
    4792
    od Riviera kid Zobrazit poslední příspěvek
    02 zář 2024 16:21
  • Notebook pro kancelářské práce
    od Bulit.Sven » 11 srp 2024 13:06 » v Rady s výběrem hw a sestavením PC
    4
    1576
    od meda2016 Zobrazit poslední příspěvek
    11 srp 2024 18:18
  • Herní PC do 18 000 Kč – WoW, PoE2?, běžná práce, stará sestava nejspíš odešla
    od MoA285 » 25 kvě 2025 21:47 » v Rady s výběrem hw a sestavením PC
    5
    1491
    od windroid2 Zobrazit poslední příspěvek
    26 kvě 2025 08:51
  • Přechod z Excel 21 na Excel 24
    od Snekment » 29 led 2025 13:46 » v Kancelářské balíky
    2
    12208
    od Snekment Zobrazit poslední příspěvek
    29 led 2025 15:05
  • Pohoda a excel Příloha(y)
    od brownwld » 06 kvě 2025 17:28 » v Kancelářské balíky
    1
    4665
    od atari Zobrazit poslední příspěvek
    07 kvě 2025 09:41

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

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 11 hostů