Moro
Minulla on käsiteltävänä .CSV tiedosto, jonka tiedot tulisi purkaa Exel taulukkoon. .csv sisältää tiedot malliin:
...
XX:XXX:XX XX:XX.XX YEE,XXX,XX
X:XXX:XX XX:XX:XX YEE,XX,XX
XX:XXX:XX XX:XX:XX VEEV,XX,XX
...
Eli tiedot on välimerkillä erotettu, mutta kaikki samassa sarakkeessa. Lisäksi pitäisi saada nuo YEE/VEEV kaltaiset turhakkeet poistettua sotkemasta arvotaulukkoa.
Osaako VBasic purkaa .csv tiedoston, erotella tiedot omiin sarakkeisiinsa ja vielä exportata haluaani exeliin haluamiini sarakkeisiin. Millä tavalla tuota kannattaisi lähteä purkamaan, vai onko jokin muu ohjelma/ohjelmointitapa parempi?
Jos ainoa tarkotus on tuoda tuo Exceliin, niin eikös yksinkertaisin tapa ole ihan vaan avata se excelissä ja siellä siirrellä sarakkeet kohdilleen?
Excel ainakin viime näkemältä osasi muuntaa csv-tiedoston ihan älykkääseen muotoon, ja välimerkeiksi oli valmiina useampi yleisempi vaihtoehto vapaan merkin lisäksi.
Juu osaa exel tuon tehdä, kun korvaa turhat tiedot tyhjällä ja jaottelee sarakakkeisiin toiminnolla, jossa väli on erottava tekijä. Noita tiedostoja on vain kymmeniä ja tulee koko ajan lisää. Rivejä tuhansia per tiedosto.
Tarkoitus on siis helpottaa noiden käsittelyä jatkossa, niin ei tarvitse jokaista erikseen mulkata. Sitten erotellut sarakkeet pitää vielä siirrellä kaavio exeliin ja näin aikaa kuluu koko päivä mulkatessa aina parikymmentä tuollaista.
Jos kyseessä on VB6, niin koodivinkeistä löytyy joskus kirjoittamani CSV-parseri sille.
Uudemmat VB:t taisi tukea CSV:tä aavistuksen kehittyneemmin?
Moro DBasic!
Excel käyttää .csv tiedostoissa oletusarvoisesti sarake-erottimena puolipistettä. Elikä nyt jos lähtisit purkamaan jutskaa VBA-pohjalta olettaen, että .csv tiedostossa on käytetty sarake-erottimena pilkkua niin voisit avata .csv tiedoston VBA:lla tyyliin:
Private Sub CommandButton1_Click() Dim csvfile As String csvfile = "C:\testi.csv" 'esim. If Dir(csvfile) = "" Then MsgBox "Tiedostoa " & csvfile & " ei löydy" Exit Sub End If Application.ScreenUpdating = False Application.DisplayAlerts = False Dim Orginaali As Workbook Dim Temppi As Workbook Set Orginaali = ThisWorkbook On Error Resume Next Workbooks.Open csvfile, , , 2 '2 on pilkun (erotin) koodi Set Temppi = ActiveWorkbook Dim rivit As Long, solu rivit = Temppi.Sheets(1).UsedRange.Rows.Count Dim positio As Integer, merkit As Variant For Each solu In Temppi.Sheets(1).Range("A1:A" & CStr(rivit)) merkit = solu.Value positio = InStrRev(merkit, " ") - 1 If positio <> InStr(merkit, " ") - 1 Then solu.Value = Left(merkit, positio) End If Next rivit = Orginaali.Sheets(1).UsedRange.Rows.Count If rivit > 1 Or Application.CountA( _ Orginaali.Sheets(1).Rows(1).EntireRow) <> 0 Then rivit = rivit + 1 End If For Each solu In Temppi.Sheets(1).UsedRange Orginaali.Sheets(1).Cells( _ solu.Row + rivit - 1, solu.Column).Value = solu.Value Next Orginaali.Activate: Temppi.Close Orginaali.Sheets(1).UsedRange.Columns.AutoFit Set Temppi = Nothing Set Orginaali = Nothing Application.DisplayAlerts = True Application.ScreenUpdating = True If Err <> 0 Then MsgBox "Prosessin aikana syntyi virhe:" & _ vbCrLf & Error$: Err.Clear On Error GoTo 0 End If End Sub
jolloin esimerkissäsi oleva jutska näyttäisi Excelissä jokseenkin seuraavalta:
A | B | C 1 |XX:XXX:XX XX:XX.XX|XXX|XX 2 |X:XXX:XX XX:XX:XX |XX |XX 3 |XX:XXX:XX XX:XX:XX|XX |XX
Hei vielä kerran. Olen lueskellut tässä Visual Basic ohjeita, mutta en nyt ole vielä sisäistänyt, mihin nuo parserin/annetun koodin osat tiputetaan? Eli pitääkö luoda joku taulukko, jonka sisään nuo menee vai mihin?
Aihe on jo aika vanha, joten et voi enää vastata siihen.