2017-05-05 12 views
0

あるセルに別のシートをコピーするマクロを書きたい。VBAに値がある場合はセルをコピーする

表:
Table

は期待:
Table i Want

これまでのところ、私はこれを試してみましたが、それは

シート2にシート1からの最初のセルにのみ最後のセルをコピー
Sub CopyBasedonSheet1() 
    Dim i As Integer 
    Dim j As Integer 
    Sheet1LastRow = Worksheets("Sheet1").Range("B" & Rows.Count).End(xlUp).Row 
    Sheet2LastRow = Worksheets("Sheet2").Range("B" & Rows.Count).End(xlUp).Row 

    For j = 1 To Sheet1LastRow 
     For i = 1 To Sheet2LastRow 
      If Worksheets("Sheet1").Cells(j, 2).Value = "a" Then 
       Worksheets("Sheet2").Cells(i, 1).Value = Worksheets("Sheet1").Cells(j, 1).Value 
      Else 
      End If 
     Next i 
    Next j 
End Sub 
+0

は、おそらくあなたのSheet2LastRowがあなたの実行の開始時に1である全く異なるアプローチを試みることがあります。したがって、1つのステップしか発生しません。この場合、ループは1つだけ必要です。 'i'ループを削除し、if文に' i = i + 1'を置きます。 – Luuklag

+0

ランダムなテキストで8行を作成しようとしましたが、すべてがシート1の最後のセルに変更されました.C、C、C、C、C、Cも取得しました。 – Longbow

答えて

0

あなたはすべきです最初のシートの行があるときは、コピーしたい場所が1つだけで、多くはないので、1つのループで行います。

Sub CopyBasedonSheet1() 
    Dim i As Integer 
    Dim j As Integer 
    Sheet1LastRow = Worksheets("Sheet1").Range("B" & Rows.Count).End(xlUp).Row 

    i = 1 
    For j = 1 To Sheet1LastRow 
     If Worksheets("Sheet1").Cells(j, 2).Value = "a" Then 
      Worksheets("Sheet2").Cells(i, 1).Value = Worksheets("Sheet1").Cells(j, 1).Value 
      Worksheets("Sheet2").Cells(i, 2).Value = Worksheets("Sheet1").Cells(j, 2).Value 
      i = i + 1 
     End If 
    Next j 
End Sub 
+0

これはうまくいく、thx – Longbow

0

それとも、速くも...

Sub CopyData() 
Dim ws1 As Worksheet, ws2 As Worksheet 
Dim x, y() 
Dim i As Long, j As Long 
Set ws1 = Sheets("Sheet1") 
Set ws2 = Sheets("Sheet2") 
x = ws1.Range("A1").CurrentRegion.Value 
ReDim y(1 To Application.CountIf(ws1.Columns(2), "a"), 1 To 2) 
j = 1 
For i = 1 To UBound(x, 1) 
    If x(i, 2) = "a" Then 
     y(j, 1) = x(i, 1) 
     y(j, 2) = x(i, 2) 
     j = j + 1 
    End If 
Next i 
ws2.Range("A:B").Clear 
ws2.Range("A1").Resize(UBound(y, 1), 2).Value = y 
End Sub 
関連する問題