2017-12-20 6 views
-5
A  B  C  D 

1  ...  1  2 

2  ... 1.2  

3  ... 1.9 

4  ... 1.1  4 

5  ...  1  3 

6  ...  1 

7  ...  1  5 

8  ...  3 

必要な機能は、列Dを検索して項目のないすべての行を見つけて、対応する値を列Aおよび列Bにコピーする必要があります。シート。Excelでセル内にエントリのない選択された列の隣接値をコピーする

たとえば、このダミーコードでは、A2、A3、A6、A8、B2、B3、B6、B8を新しいシートにコピーする必要があります。

私はvlookupとindexコマンドを使ってみましたが、最初のエントリの値だけを取得し、それをドラッグしても機能しません。

答えて

0

これは、使用しているシートを反映するようにシート番号を変更するだけです(私は、シート1をデータと共に使用し、シート3をサマリーデータを配置する場所に使用しています)。これらのシート名は、エクセルの一番下のタブでコード化されたバージョンではなく自分の名前:

Sub foo() 
LastRow = Sheet1.Cells(Sheet1.Rows.Count, "A").End(xlUp).Row 'change Sheet1 to your sheet ie. Sheets("Sheet1") 
For i = 2 To LastRow 
    If Sheet1.Cells(i, 4).Value = "" Then 
     NextEmptyRow = Sheet3.Cells(Sheet3.Rows.Count, "A").End(xlUp).Row + 1 
     Sheet3.Cells(NextEmptyRow, 1).Value = Sheet1.Cells(i, 1).Value 
     Sheet3.Cells(NextEmptyRow, 2).Value = Sheet1.Cells(i, 2).Value 
    End If 
Next i 
End Sub 

UPDATE:

は、Excelの一番下のタブで自分の名前でシートを参照しているなら、あなたは、コードを変更する必要がありますこれ以上のもの:

Sub foo() 
Dim ws1 As Worksheet: Set ws1 = Sheets("Sheet1") 'change the name of your sheets here 
Dim ws2 As Worksheet: Set ws2 = Sheets("Sheet3") 
LastRow = ws1.Cells(ws1.Rows.Count, "A").End(xlUp).Row 
For i = 2 To LastRow 
    If ws1.Cells(i, 4).Value = "" Then 
     NextEmptyRow = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Row + 1 
     ws2.Cells(NextEmptyRow, 1).Value = ws1.Cells(i, 1).Value 
     ws2.Cells(NextEmptyRow, 2).Value = ws1.Cells(i, 2).Value 
    End If 
Next i 
End Sub 
+0

5行目にメッセージオブジェクトが必要な実行時エラーが発生します。私はこれに新しいです。 –

+0

あなたはあなたがスプレッドシートにSheet3を持っていない可能性があるので、あなたが得ているエラーです。あなたのスプレッドシートにある実際のものに名前を変更すると、コードが期待どおりに動作するようになります。 – Xabier

+0

データはシート1にあり、サマリーは自分のコードに従って作成したシート3に移動します。 –

0

ここでは、フィルタを使用してデータを設定するという条件で、列Dのフィルタを使用しています。

Sub CopyData() 

    Dim wb As Workbook 
    Dim wsSource As Worksheet 
    Dim wsTarget As Worksheet 

    Set wb = ThisWorkbook 
    Set wsSource = wb.Worksheets("Source") ' change as appropriate 
    Set wsTarget = wb.Worksheets("Target") ' change as appropriate 

     With wsSource 
      .ListObjects("Table1").AutoFilter.ShowAllData 
      .ListObjects("Table1").Range.AutoFilter Field:=4, Criteria1:="=" 
      .AutoFilter.Range.Columns("A:B").Copy wsTarget.Range("A1") 
     End With 
End Sub 
関連する問題