06. april 2017 - 19:56Der 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?
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
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
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.
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
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.
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.