Avatar billede jaymaster Praktikant
30. juni 2014 - 08:32 Der er 2 kommentarer og
1 løsning

Modificering af csv fil

Hej Eksperter

Har en csv fil som viser følgende når jeg åbner den i excel:

"XXX","08901090123","IS81872309","8452,50","300122","DKK","","U","","","","","N","","","","","","","WF -4374 - KPMG ","","1293301","71","701510012967011 ","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","WF -4374 - KPMG"

Ovenfor er kun en række dem er der flere hundred/tusinder af i en fil.

Jeg vil gerne oprette en formel der gør følgende:

Hvis Felt 23 har værdi 71 skal Felt 20,22 og alle fra 25 være blanke altså værdi ""

Er der nogen der har en ide til dette?

Mvh
JayTono
Avatar billede supertekst Ekspert
30. juni 2014 - 08:55 #1
Rem Version 4.1 - 20. juni 2014
Const inputFilNavn = "Finalfil.txt"                'kan ajf.
Const outputFilNavn = "Finalfil_red.csv"            '-"-

Dim sti As String, linje As String, linjeRed As String, f As Integer
Dim tabel As Variant, feltNr As Integer, felt As Variant, ix As Integer, tabelRed(71) As Variant, flag71 As Boolean
Public Sub korrigerCSV()
On Error GoTo fejl

Rem hent aktuelle sti for systemFil - inputfil forventes også her
    sti = ActiveWorkbook.Path
       
    Open sti & "\" & inputFilNavn For Input As #1
    Open sti & "\" & outputFilNavn For Output As #2
Rem indlæsInput
    Do While Not EOF(1)
        Line Input #1, linje
        tabel = Split(linje, ",""")
       
Rem TEST AF FELTER (første felt = 0 i tabel)
Rem - erstat 000 med 0890
        feltNr = 2
        felt = tabel(feltNr - 1)
        If Left(felt, 3) = "000" Then
            tabel(feltNr - 1) = "0890" & Mid(felt, 4)
        End If

Rem - fjern blanke
        feltNr = 3
        felt = tabel(feltNr - 1)
       
        tabel(feltNr - 1) = Replace(felt, " ", "")
       
Rem - beløb med 2 dec
        feltNr = 4
        felt = tabel(feltNr - 1)
        felt = Format(felt, "0,00")
        tabel(feltNr - 1) = Replace(felt, ".", ",")

Rem - dato
        feltNr = 5
        felt = tabel(feltNr - 1)
        tabel(feltNr - 1) = Format(felt, "0#######")

Rem - test = 71
        feltNr = 23
        If tabel(feltNr - 1) = "71""" Then
            flag71 = True
           
            tabel(22 - 1) = """"
            tabel(20 - 1) = """"
           
            For ix = 25 - 1 To UBound(tabel)
                tabel(ix) = """"
            Next ix
        Else
            flag71 = False
           
Rem - test = 04
            If tabel(feltNr - 1) = "04""" Then
                tabel(24 - 1) = tabel(22 - 1)
                tabel(22 - 1) = """"
            End If
        End If
       
Rem - test længde = 15 ciff - hvis 71 i felt 23
        feltNr = 24
        felt = tabel(feltNr - 1)
        If flag71 = True Then
            While Len(felt) < 15
                felt = "0" & felt
            Wend
            tabel(feltNr - 1) = felt
        End If
       
Rem - max 72 felter
        antalfelter = UBound(tabel) + 1
       
        If antalfelter > 72 Then
            For f = 0 To 71
                tabelRed(f) = tabel(f)
            Next f
           
            linjeRed = Join(tabelRed, ",""")
        Else
            linjeRed = Join(tabel, ",""")
        End If
       
        Print #2, linjeRed
    Loop
    Close #1
    Close #2
    Exit Sub
   
fejl:
    Close #1
    Close #2
    MsgBox "Fejl - prøv igen"
End Sub
Avatar billede jaymaster Praktikant
30. juni 2014 - 09:06 #2
Håber det er korrekt at jeg har givet dig point nu.
Avatar billede supertekst Ekspert
30. juni 2014 - 09:56 #3
Alt Ok..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester