私がしようとしているのは、2つの異なるシートを見て、国民保険番号を比較することです。2枚のシートを比較し、行の特定の列をコピーする場合は、VBAを使用してください。
シート1は1つのシステムからのデータのセットであり、シート2は別のシステムからの別のデータのセットです。私がしたいのは、最初に、各シートのcolumn1のエントリが同じで、これが同じ人物になると、その人に固有のidを含む両方のシートのカラム1を比較します。次に
私がしたいことは、シート1の列1の右側に17列、シート2の右側に23列(両方が国家保険番号である)に格納されている値を比較することです。
異なる場合にのみ、シート1(番号、名および姓)からの行の最初の3つの列と、両方のシート(国民保険番号)のコピーをコピーしたいとします(Sheet1(0,17)Sheet2 、23)to Sheet3。
これは私がしようとしているのは、論理が全部行をコピーするようにしようとしています。私が望むセルだけをコピーするように変更することはできますが、 .....
Sub compareData()
Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet
Dim i As Long, j As Long
Dim newSheetPos As Integer
Set ws1 = ActiveWorkbook.Sheets("Sheet1")
Set ws2 = ActiveWorkbook.Sheets("Sheet2")
Set ws3 = ActiveWorkbook.Sheets("Sheet3")
newSheetPos = ws3.Cells(ws3.Rows.Count, 2).End(xlUp).Row
For i = 1 To ws1.Cells(ws1.Rows.Count, 2).End(xlUp).Row
For j = 1 To ws2.Cells(ws2.Rows.Count, 2).End(xlUp).Row
If ws1.Cells(i, 1).Value = ws2.Cells(j, 1).Value Then
If ws1.Cells(i, 17).Value <> ws2.Cells(j, 23).Value Then
ws1.Cells(j, 1).EntireRow.Copy ws3.Cells(newSheetPos, 1)
newSheetPos = newSheetPos + 1
Else
End If
Else
End If
Next j
Next i
End Sub
は、両方のシートは保存あなたは確認しています下記参照してください、私は1によって相殺された基準をインクリメントしなければならなかった1及びません0から始まることに気づきました同じフォーマットのNI番号?これにより、IF文が常に偽となり、ほとんどの行がコピーされる可能性があります。 – Xabier
はい、同じフォーマットの2xUpperCase 6 Numbersと1 UpperCaseです。これが私の望むものです。 両方のシートの列1の一致を見つけ、行17列のシート1,2,3を横切って見てください。セルが一致しない場合は、シート1の不一致行の最初の3列と国民保険両方から。 。それはこのようになります Col1(ID)、Col2(名)、Col3(姓)、Col4(NINO)、Col5(NINO2)最初の4列はSheet1からで、5列目はSheet2からです – Leighholling
あなたのコードは大丈夫だと思われるので、ここでプレイしてください。すべての比較のフォーマットが同じであることをもう一度確認してください。セルに表示される方法を意味するのではなく、そのセルのフォーマット。テキスト、一般、カスタム...いくつかのサンプルデータを共有できますか?いくつかのダミーデータを使って簡単なテストをしましたが、期待どおりに動作します。 – Xabier