こんにちは!
VBAになりますが、一例です。
Sheet1・Sheet2とも1行目が項目行になっていて、A列からデータはあるとします。
Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻りマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)
Sub Sample1() 'この行から
Dim j As Long, lastRow As Long, c As Range
Dim wS1 As Worksheet, wS2 As Worksheet
Set wS1 = Worksheets("Sheet1")
Set wS2 = Worksheets("Sheet2")
With Worksheets("Sheet3")
.Cells.Clear
wS1.Range("A1").CurrentRegion.Copy .Range("A1")
For j = 1 To .Cells(1, Columns.Count).End(xlToLeft).Column
Set c = wS2.Rows(1).Find(what:=.Cells(1, j), LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
lastRow = wS2.Cells(Rows.Count, c.Column).End(xlUp).Row
If lastRow > 1 Then
Range(wS2.Cells(2, c.Column), wS2.Cells(lastRow, c.Column)).Copy .Cells(Rows.Count, j).End(xlUp).Offset(1)
End If
End If
Next j
'▼
For j = 1 To wS2.Cells(1, Columns.Count).End(xlToLeft).Column
Set c = .Rows(1).Find(what:=wS2.Cells(1, j), LookIn:=xlValues, lookat:=xlWhole)
If c Is Nothing Then
lastRow = wS2.Cells(Rows.Count, j).End(xlUp).Row
Range(wS2.Cells(1, j), wS2.Cells(lastRow, j)).Copy .Cells(1, Columns.Count).End(xlToLeft).Offset(, 1)
End If
Next j
'▲
.Activate
End With
End Sub 'この行まで
※ どちらかのSheetに変更があった場合はその都度マクロを実行する必要があります。
※ とりあえずSheet2の項目でSheet1にない場合は、その右隣りにそのまま表示するようにしていますが、
Sheet2の項目は必ずSheet1にある!というのであれば
コード内の「▼」から「▲」までの行を消去してください。m(_ _)m
お礼
tom04さま 詳細な説明をいただき、ありがとうございます。 それぞれのコードの組み合わせは未だ理解できない部分が多いですが、 流れは理解できました。 ポイントは「変数」ですね… お教えいただいた内容を理解できるように、勉強したいと思います。 また、何かございましたら、よろしくお願いいたします。 この度は、本当にありがとうございました。