Avatar billede malin_johnsso2 Nybegynder
21. april 2015 - 12:34 Der er 2 kommentarer

Flytte rækker fra rådata til et andet ark

Hej,

Jeg er totalt ny i VBA, men vil gerne lære :) Jeg har et ark1 med "rådata". Rådataen skal klippes og indsættes i ark2 ("salg"), hvis et kriterie er opfyldt:

Der er en rækker værdier i A1:A10 i ark2, f.eks. tallet 2000. Hvis værdien 2000 er at finde i ark1, så skal denne række klippes ud fra ark1 og indsættes i ark2 i række 10. Jeg har fået min makro til at virke ved at referere til absolutte tal, men jeg kan ikke få makroen til at slå op i range A1:A10 i et ark. Desuden har jeg kun fået min makro til at virke ved at "kopiere" fra ark1 til ark2 frem for cut&paste. Min kode er nedenfor (I må ikke grine!).

Jeg er meget taknemmelig, hvis der er noget, der vil hjælpe :)


Public Sub Fordele data()

Dim Tabel(1 To 1000, 1 To 7) As Variant
Dim i As Integer, j As Integer, k As Integer


Application.ScreenUpdating = False

  k = 1
  For i = 1 To 1000

   
ThisWorkbook.Sheets("Rådata").Activate

' Nedenfor vil jeg have at, at man ikke kun kigger på "2053, 2312 og 2081", men kigger på de værdier der ligger i ark2 i range A1:A10.

If ThisWorkbook.Sheets("Rådata").Cells(i, 1).Value = "2053" Or _
ThisWorkbook.Sheets("Rådata").Cells(i, 1).Value = "2312" Or _
ThisWorkbook.Sheets("Rådata").Cells(i, 1).Value = "2081" Then
                 

            For j = 1 To 7
            Tabel(k, j) = Cells(i, j).Value
            Next j
            k = k + 1
            End If
           
            Next i
     
               
            For k = 1 To 1000
            For j = 1 To 7

' Nedenfor bliver data kopieret ind i ark2 ("salg"), men jeg vil have, at det klippes ud og indsættes, så kildedataen i ark1 er væk

ThisWorkbook.Sheets("Salg").Range("A10").Cells(k, j).Value = Tabel(k, j)
 
            Next j
            Next k
 
        ThisWorkbook.Sheets("JP Salg").Activate
        Application.ScreenUpdating = True
       
End Sub
Avatar billede jens48 Ekspert
21. april 2015 - 23:31 #1
Du skriver at du har data i cellene A1:A10, og du vil have tallene skrevet ind i række 10. For at undgå overskrivning har jeg lavet makroen så den skriver data i række 15 begybdende i kolonne 1. Du kan selv rette til, eller fortælle hvordan data skal skrives. Min makro ser således ud:

Sub FordelData()
x = 1
Dim c, DataRange As Range
Set DataRange = Sheets("Rådata").Range("A1:G100")
For Each c In DataRange
If Worksheets.Application.CountIf(Sheets("Sheet2").Range("A1:A10"), c.Value) <> 0 Then
Cells(15, x) = c.Value
c.ClearContents
x = x + 1
End If
Next
End Sub
Avatar billede natkatten Mester
22. april 2015 - 08:06 #2
Jeg ville benytte avanceret filter. Det er hurtigere og lettere. Grundlæggende er koden som vist her:

Sub FiltrerData()
'Benyt avanceret filter ud fra værdien i AA2 og overfør
'fundne værdier til arket Salg
Sheets("Salg").Activate
Sheets("Rådata").Range("A1:Z5000").AdvancedFilter Action:=xlFilterCopy _
, CriteriaRange:=Sheets("Rådata").Range("AA1:AA2"), CopyToRange:= _
Sheets("Salg").Range("A10:Z10"), Unique:=False
End Sub

Se også dette uploadede eksempel:
http://gratisupload.dk/f/8rbgfxumfr/
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