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 Subjolloin 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.