2017-11-29 20 views
0

あなたが助けてくれることを願っています!VBA - 固有の値を別のシートにコピーする

2つのワークシート1 &があります。2. Sheet1にはすでに既存のデータがあり、Sheet2は生データをダンプするために使用されます。これは毎日更新され、データダンプには前日のデータと新しいデータの両方が含まれます。新しいデータには、前の日だけでなく、その月の早い時期に発生した可能性のある対話に関連する行も含まれます。したがって、データは「日付順次」ではありません。

データの9列は列内の一意の識別子でありますが、I.

何が起こることを必要としていたマクロを実行するとき、それは私のSheet1とSheet2の、そして唯一のコピーと、中列に見えますですシート2の一意の識別子が既にSheet1に存在しない行をペーストします。 Sheet1の最後の空行からそれらを貼り付けます。

私が現在持っていることはこれである - それは私がオンラインで見つけることができるすべてです:

Sub CopyData() 

Application.ScreenUpdating = False 

Dim LastRow As Long 
LastRow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 
Dim rng As Range 
Dim foundVal As Range 
For Each rng In Sheets("Sheet2").Range("A1:I" & LastRow) 
    Set foundVal = Sheets("Sheet1").Range("I:I").Find(rng, LookIn:=xlValues, LookAt:=xlWhole) 
    If foundVal Is Nothing Then 
     rng.EntireRow.Copy Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) 
    End If 
Next rng 
Application.ScreenUpdating = True 
End Sub 

しかし、それだけで働いていない - 列の値は、私はすでに存在している場合だけでなく、それが認識しない、それはコピー&ペーストですSheet2の最初の2行のみが、それぞれ8回複製されます。

事前に申し訳ありませんが、私は実際のVBA初心者であり、すべてがうまくいかないところではうまくいきません。私は助けていただければ幸いです!

答えて

0

これは、あなたがやりたいことになります。

Sub testy() 
    Dim wks As Worksheet, base As Worksheet 
    Dim n As Long, i As Long, m As Long 
    Dim rng As Range 

    Set wks = ThisWorkbook.Worksheets(2) 'Change "2" with your input sheet name 
    Set base = ThisWorkbook.Worksheets(1) 'Change "1" with your output sheet name 

    n = base.Cells(base.Rows.Count, "A").End(xlUp).Row 
    m = wks.Cells(wks.Rows.Count, "A").End(xlUp).Row 

    For i = 2 To m 
     On Error Resume Next 
     If IsError(WorksheetFunction.Match(wks.Cells(i, 9), base.Range("I:I"), 0)) Then 
      Set rng = wks.Cells(i, 1).Resize(1, 9) 'Change 9 with your input range column count 
      n = n + 1 
      base.Cells(n, 1).Resize(rng.Rows.Count, rng.Columns.Count).Value = rng.Value 
     End If 
    Next i 

End Sub 
関連する問題