データを含む2つのExcelスプレッドシートがあります。これらのシートにはID番号とそれに対応する他のデータが入っています。シート1は本質的にすべての既存ID番号(および他の対応するデータ)を含むマスターシートであり、シート2はシート1にあるID番号の一部のみを含む特定のデータセットである(シート2のすべてのID番号が存在するシート1では、他の方法ではありません)。現在、シート1は列AからFのデータを含み、列CのID番号を含み、シート2は列AのID番号を有する列AからCのデータを含む。また、ID番号は移動するにつれて増加するシートを降ろし、それぞれのシートの各ID番号は一意です。Excelマクロを結合する2つのExcelデータを重複データに基づいて変換する
シート2のIDがシート1のIDと等しい場合は、シート2の列BとCをシート1の対応する行の最後までタックしたいと思いますが、その後、さらに明確にするためにシート2に同じID番号が存在しないシート1の任意の行を削除、シート1は、次のようになります。
+-------+----------+--------+--------------+
|Year |Country | ID #: |Columns D,E,F |
+-------+----------+--------+--------------+
|2012 |CA |123456 |data |
+-------+----------+--------+--------------+
|2015 |US |565382 |data |
+-------+----------+--------+--------------+
|2008 |US |765382 |data |
+-------+----------+--------+--------------+
|2012 |CA |956471 |data |
+-------+----------+--------+--------------+
シート2は、次のようになります。
+-------+----------+--------+
|ID #: |Quantity |Value |
+-------+----------+--------+
|123456 |435 |12523 |
+-------+----------+--------+
|765382 |1136 |52342 |
+-------+----------+--------+
|956471 |49 |5562 |
+-------+----------+--------+
次に、同じID番号を持つ行を結合して、シート1からすべてのものを削除した後我々が得る、シート2から該当するIDが含まれていない:私のシートは数百数千行のを含んでいるので
+-------+----------+--------+--------------+-----------+---------+
|Year |Country | ID #: |Columns D,E,F |Quantity |Value |
+-------+----------+--------+--------------+-----------+---------+
|2012 |CA |123456 |data |435 |12523 |
+-------+----------+--------+--------------+-----------+---------+
|2008 |US |765382 |data |1136 |52342 |
+-------+----------+--------+--------------+-----------+---------+
|2012 |CA |956471 |data |49 |5562 |
+-------+----------+--------+--------------+-----------+---------+
、私はこれを手動で行うことができないので、私ははるかに効率的にこのタスクを完了することができ、マクロを必要としています。ここで
私がこれまで持っているものである:多分
Sub mergeSheets()
Dim c As Range, cfind As Range, x, dest As Range, cfind1 As Range
On Error Resume Next
Worksheets("sheet3").Cells.Clear
With Worksheets("Sheet1")
.UsedRange.Copy Worksheets("sheet3").Range("a1")
For Each c In Range(.Range("a2"), .Range("c2").End(xlDown))
x = c.Value
With Worksheets("sheet2")
Set cfind = .Cells.Find(what:=x, lookat:=xlWhole)
If cfind Is Nothing Then GoTo line1
.Range(cfind.Offset(0, 1), cfind.End(xlToRight)).Copy
With Worksheets("sheet3")
Set cfind1 = .Cells.Find(what:=x, lookat:=xlWhole)
If cfind1 Is Nothing Then GoTo line1
cfind1.End(xlToRight).Offset(0, 1).PasteSpecial
End With 'sheet3
End With 'sheet2
line1:
Next
End With 'Sheet 1
Application.CutCopyMode = False
End Sub
おかげ
何を試しましたか? SOは "私のためのコード"サイトではなく、 "自分のコードを手伝ってくれます"。質問する方法については、[How to Ask](http://stackoverflow.com/help/how-to-ask)を参照してください。これまでに試したコード/マクロ/公式を投稿してください。 – BruceWayne
なぜVBAですか?単にシート1に 'VLOOKUP'を使って、'#N/A'を除外してみるのはなぜですか? –
だからどこに行きましたか? – Davesexcel