Avatar billede jath08ac Forsker
03. januar 2017 - 11:23 Der er 5 kommentarer

Overfør data fra en kolonnede til to andre kolonner - VBA

Jeg håber nogle af jer kan hjælpe med at udbygge nedenstående VBA kode. Jeg har lavet et udtræk fra et system til Excel, som f.eks. ser ud som nedenstående. Bemærk at antal af afdelinger kan varierer:
Kontonr.
Sted 1
Afdeling 1
Afdeling 2
Afdeling 3
Afdeling 4
Total
Sted 2
Afdeling 1
Afdeling 3
Afdeling 4
Afdeling 5
Total
Sted 3
Afdeling 1
Afdeling 2
Afdeling 3
Afdeling 4
Afdeling 5
Total
Total
Kontonr.
Sted 1
Afdeling 1
Afdeling 2
Afdeling 4
Total
Sted 2
Afdeling 1
Afdeling 2
Afdeling 3
Afdeling 4
Afdeling 5
Total
Sted 3
Afdeling 1
Afdeling 2
Afdeling 3
Afdeling 4
Afdeling 5
Total
Total
Osv.
Osv.
Listen afsluttes med TOTAL

Jeg kunne godt tænke mig, at kontonr. overføres til kolonne A og sted overføres til kolonne B, så det f.eks. ser således ud:

1000 Sted 1 Afdeling 1
1000 Sted 1 Afdeling 2
Total
1000 Sted 2 Afdeling 1
1000 Sted 2 Afdeling 2
Total
Total
1001 Sted 1 Afdeling 1
1001 Sted 1 Afdeling 2
osv.
osv.

Nuværende kode:
Const startRæk = 2
Const testKol = "C"
Const brudTekst = "Total"
Const stopTekst = "T O T A L"
Dim antalRæk As Integer, kontoNr As Integer, brudFlag As Boolean
Public Sub kopierKontonr()
Dim ræk As Integer
    Application.ScreenUpdating = False
   
    antalRæk = ActiveCell.SpecialCells(xlLastCell).Row
    kontoNr = Range(testKol & startRæk)
    brudFlag = True
   
    For ræk = startRæk + 1 To antalRæk
        If Range(testKol & ræk) = brudTekst Then
            If Range(testKol & ræk).Offset(1, 0) <> stopTekst Then
                kontoNr = Range(testKol & ræk).Offset(1, 0)
            Else
                Exit Sub
            End If
        Else
            If brudFlag = True Then
                Range(testKol & ræk).Offset(0, -1) = kontoNr
            End If
        End If
    Next ræk
End Sub
Private Sub CommandButton1_Click()
    kopierKontonr
End Sub

pft.
Hilsen
Jacob
Avatar billede Max_P_Larsen Seniormester
03. januar 2017 - 15:09 #1
Her er mit bud på en løsning:

Forudsætningen er, at dataene fra dit udtræk starter i celle C2, og at kontonummeret står i kolonne D.

Kopiér VBA-koden ind i arkets kodemodul, så referencen "Me" fungerer som reference til ark-objektet. Eksempelvis refererer udtrykket "Me.Cells(t, 3)" til cellen i række t, kolonne 3 (dvs. "C").


Sub KopierKontoNr()

    Dim t, KontoNr As Long
    Dim Sted As String
   
    t = 2
   
    Application.ScreenUpdating = False
   
    Do
   
        If UCase(Me.Cells(t, 3)) Like "KONTONR*" Then
       
            KontoNr = Me.Cells(t, 4)
       
        ElseIf UCase(Me.Cells(t, 3)) Like "STED*" Then
       
            Sted = Me.Cells(t, 3)
           
        Else
       
            Me.Cells(t, 1) = KontoNr
            Me.Cells(t, 2) = Sted
           
            If UCase(Me.Cells(t, 3)) = "TOTAL" And UCase(Me.Cells(t - 1, 3)) = "TOTAL" Then
           
                Me.Cells(t, 2).ClearContents
           
            End If
           
        End If
   
        t = t + 1
   
    Loop Until IsEmpty(Me.Cells(t, 3))
   
    Application.ScreenUpdating = True

End Sub


Mvh Max
Avatar billede jath08ac Forsker
04. januar 2017 - 13:22 #2
Hej Peter,

Tak for ovenstående svar. Problemet er bare, at kontonummeret står i kolonne C sammen med sted nr. og afdeling. Så jeg kunne godt tænke mig at få kontonummeret overført til kolonne A, og at den skifter, hver gang der kommer et nyt kontonr. :-)
Avatar billede Max_P_Larsen Seniormester
04. januar 2017 - 16:22 #3
Har du mulighed for at sende mig et mere detaljeret eksempel på dit udtræk i en Excel-fil? Ellers kommer jeg til at arbejde "i blinde", hvis jeg ikke ved præcist, hvordan dataene ligger.

Mvh Max
Avatar billede jath08ac Forsker
10. januar 2017 - 20:46 #4
@ Max_P_Larsen
Det kan du tror, hvor kan jeg sende det til?
Avatar billede Max_P_Larsen Seniormester
11. januar 2017 - 07:50 #5
max@bdo.dk
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