Avatar billede Sebastian1234 Juniormester
06. april 2017 - 19:56 Der er 8 kommentarer og
2 løsninger

Betinget kopiering fra et ark til et andet ark i Excel vha. VBA

Hej eksperter

Jeg sidder med en opgave, hvor jeg skal overføre noget bestemt data fra ARK(1) til ARK(2), hvis de opfylder nogle betingelser i kolonne f. Lige ledes skal det kopieres til ARK(3), ARK(4) og ARK(5), hvis det overholder nogle andre kriterier i kolonne f. Hvis det overholder betingelsen i kolonne f, skal kolonne a til j kopieres over i det pågældende ARK.

Det er forskelligt hvor mange rækker data der er snakke om, så det skal helst selv kunne variere, alt efter hvor mange rækker der er. Ydermere skal den også slette det data som står i ARK 2-5 før den kopiere de nye celler over.

Er der nogle der kan hjælpe med den grundlæggende VBA kode til denne handling?

- Sebastian
Avatar billede Jan Hansen Ekspert
06. april 2017 - 21:33 #1
Private Sub OverFoer()
    Set wsArk(1) = ActiveSheet
    For iCountA = 2 To Sheets.Count
        Set wsArk(iCountA) = Sheets(iCountA)
    Next iCountA
    Set rKolA = wsArk(1).Range("A1000")
    Set rKolA = Range(wsArk(1).Range("A1"), rKolA.End(xlUp))

    For iCount = 2 To 5
        iRow = 1
        For Each rCell In rKolA
            If rCell <> "" And rCell.Offset(0, 5).Value = iCount Then
              For iCells = 1 To 5
                    wsArk(iCount).Cells(iRow, iCells) = Cells(rCell.Row, iCells)
              Next iCells
              iRow = iRow + 1
            End If
        Next rCell
    Next iCount
End Sub
Private Sub Worksheet_Activate()
    OverFoer
End Sub

mvh Jan
Avatar billede Sebastian1234 Juniormester
06. april 2017 - 22:17 #2
Hej Jan

Tusind tak for hjælpen.

Plejer normalt bare at kunne køre mine makroer, men denne kan jeg ikke køre ligesom alle de andre. Har du også en løsning på det?
Avatar billede Jan Hansen Ekspert
06. april 2017 - 22:27 #3
liges i ark 1 elles fjern private i private sub overfoer og lig den som du plejer

Jan
Avatar billede Jan Hansen Ekspert
06. april 2017 - 22:29 #4
den jeg havde lavet kører når ark aktiveres
Avatar billede Jan Hansen Ekspert
06. april 2017 - 22:31 #5
husk at slette

Private Sub Worksheet_Activate()
    OverFoer
End Sub

hvis du ligger det i et modul

Jan
Avatar billede Jan Hansen Ekspert
06. april 2017 - 22:46 #6
En ny version med smårettelser og kommentarer

Option Explicit
Dim wsArk(5) As Worksheet
Dim rKolA As Range, rRow(5) As Range, rCell As Range
Dim iCountA As Integer
Dim iCount, iRow As Integer, iCells As Integer

Private Sub OverFoer() ' slet private hvis det skal bruges som macro
    Set wsArk(1) = ActiveSheet ' Data ark Skriv evt Sheet(1) hvis det bruges som macro
    For iCountA = 2 To Sheets.Count ' gennemløber arkene der skal overføres data til
        Set wsArk(iCountA) = Sheets(iCountA)
    Next iCountA
    Set rKolA = wsArk(1).Range("A1000")
    Set rKolA = Range(wsArk(1).Range("A1"), rKolA.End(xlUp))

    For iCount = 2 To Sheets.Count
        iRow = 1 ' første række som data skal over i så 1 ændres hvis kolonnerne har overskrifter
        For Each rCell In rKolA
            If rCell <> "" And rCell.Offset(0, 5).Value = iCount Then ' icount = Ark nr 2-? forventes at stå i "F"
              For iCells = 1 To 5
                    wsArk(iCount).Cells(iRow, iCells) = Cells(rCell.Row, iCells)
              Next iCells
              iRow = iRow + 1
            End If
        Next rCell
    Next iCount
End Sub
Private Sub Worksheet_Activate() ' Næste ter linier slettes hvis koden ikke sættes i ark-koden
    OverFoer
End Sub

Mvh Jan
Avatar billede Sebastian1234 Juniormester
06. april 2017 - 22:47 #7
Har indsat det sådan her nu:

Sub kopiering()

    Set wsArk(1) = ActiveSheet

    For iCountA = 2 To Sheets.Count
        Set wsArk(iCountA) = Sheets(iCountA)
    Next iCountA
    Set rKolA = wsArk(1).Range("A1000")
    Set rKolA = Range(wsArk(1).Range("A1"), rKolA.End(xlUp))

    For iCount = 2 To 5
        iRow = 1
        For Each rCell In rKolA
            If rCell <> "" And rCell.Offset(0, 5).Value = iCount Then
              For iCells = 1 To 5
                    wsArk(iCount).Cells(iRow, iCells) = Cells(rCell.Row, iCells)
              Next iCells
              iRow = iRow + 1
            End If
        Next rCell
    Next iCount
End Sub

Men den siger der kommer en sub eller funktionsfejl? Er det fordi jeg gør noget helt forkert? Er kun vant til at sidde med helt simple makroer.
Avatar billede Jan Hansen Ekspert
06. april 2017 - 22:51 #8
Her er en Makro ver.

Option Explicit
Dim wsArk(5) As Worksheet
Dim rKolA As Range, rRow(5) As Range, rCell As Range
Dim iCountA As Integer
Dim iCount, iRow As Integer, iCells As Integer

Sub OverFoer()
    Set wsArk(1) = Sheet(1)
    For iCountA = 2 To Sheets.Count ' gennemløber arkene der skal overføres data til
        Set wsArk(iCountA) = Sheets(iCountA)
    Next iCountA
    Set rKolA = wsArk(1).Range("A1000")
    Set rKolA = Range(wsArk(1).Range("A1"), rKolA.End(xlUp))

    For iCount = 2 To Sheets.Count
        iRow = 1 ' første række som data skal over i så 1 ændres hvis kolonnerne har overskrifter
        For Each rCell In rKolA
            If rCell <> "" And rCell.Offset(0, 5).Value = iCount Then ' icount = Ark nr 2-? forventes at stå i "F"
              For iCells = 1 To 5
                    wsArk(iCount).Cells(iRow, iCells) = Cells(rCell.Row, iCells)
              Next iCells
              iRow = iRow + 1
            End If
        Next rCell
    Next iCount
End Sub

mvh Jan
Avatar billede Sebastian1234 Juniormester
06. april 2017 - 23:06 #9
Hej Jan,

kan jeg ikke prøve at sende en Excel fil til dig, så kan du se, hvad makroen skal kunne gøre helt præcist? For kan ikke få den ovenstående til at fungere helt perfekt.
Avatar billede Jan Hansen Ekspert
06. april 2017 - 23:30 #10
sendt pb.
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
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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