| 
    
     |  | なんか、質問の説明とイメージが合って無い様な? A列とB列が一致した場合はどうなるの?
 一応、一致した場合も出力しています
 尚、A列、B列共に昇順整列済みとします
 
 Option Explicit
 
 Public Sub Extraction()
 
 'データの列数
 Const clngColumns As Long = 1
 
 Dim i As Long
 Dim lngEnd1 As Long
 Dim vntList1 As Variant
 Dim lngRow1 As Long
 Dim lngEnd2 As Long
 Dim vntList2 As Variant
 Dim lngRow2 As Long
 Dim vntResult As Variant
 Dim lngWrite As Long
 Dim strProm As String
 
 'A列ののA1を基準とします(Listの左上隅)
 With ActiveSheet.Cells(1, "A")
 '行数を取得
 lngEnd1 = .Offset(Rows.Count - .Row).End(xlUp).Row - .Row + 1
 If lngEnd1 <= 1 And .Value = "" Then
 strProm = "データが有りません"
 GoTo Wayout
 End If
 'A列を配列に取得
 vntList1 = .Resize(lngEnd1 + 1, clngColumns).Value
 End With
 
 'B列のB1を基準とする
 With ActiveSheet.Cells(1, "B")
 '行数を取得
 lngEnd2 = .Offset(Rows.Count - .Row).End(xlUp).Row - .Row + 1
 If lngEnd1 <= 1 And .Value = "" Then
 strProm = "データが有りません"
 GoTo Wayout
 End If
 'A、B列を配列に取得
 vntList2 = .Resize(lngEnd2 + 1, clngColumns).Value
 End With
 
 '結果出力用配列を確保
 ReDim vntResult(1 To lngEnd1 + lngEnd2, 1 To 1)
 
 '書き込み行を初期値に(Offse値)
 lngWrite = 0
 'Sheet1のA列の比較位置
 lngRow1 = 1
 'Sheet2のA列の比較位置
 lngRow2 = 1
 'Sheet1のA列若しくは,Sheet2のA列が最終行に達するまで繰り返し
 Do Until lngRow1 > lngEnd1 Or lngRow2 > lngEnd2
 '比較結果に就いて
 Select Case vntList1(lngRow1, 1)
 Case Is = vntList2(lngRow2, 1) 'Matchiした場合
 '出力位置を更新
 lngWrite = lngWrite + 1
 'A列のデータを配列に代入
 vntResult(lngWrite, 1) = vntList1(lngRow1, 1)
 '両データの比較位置の更新
 lngRow1 = lngRow1 + 1
 lngRow2 = lngRow2 + 1
 Case Is > vntList2(lngRow2, 1) 'B列の固有行の場合
 '出力位置を更新
 lngWrite = lngWrite + 1
 'B列のデータを配列に代入
 vntResult(lngWrite, 1) = vntList2(lngRow2, 1)
 'B列の比較位置を更新
 lngRow2 = lngRow2 + 1
 Case Is < vntList2(lngRow2, 1) 'A列の固有行の場合
 '出力位置を更新
 lngWrite = lngWrite + 1
 'A列のデータを配列に代入
 vntResult(lngWrite, 1) = vntList1(lngRow1, 1)
 'A列の比較位置を更新
 lngRow1 = lngRow1 + 1
 End Select
 Loop
 
 '残ったA列の固有値を出力
 For i = lngRow1 To lngEnd1
 '出力位置を更新
 lngWrite = lngWrite + 1
 'データを配列に代入
 vntResult(lngWrite, 1) = vntList1(i, 1)
 Next i
 
 '残ったB列の固有値を出力
 For i = lngRow2 To lngEnd2
 '出力位置を更新
 lngWrite = lngWrite + 1
 'データを配列に代入
 vntResult(lngWrite, 1) = vntList2(i, 1)
 Next i
 
 Application.ScreenUpdating = False
 
 '抽出データを書きこむ位置を指定し結果配列を出力
 With ActiveSheet.Cells(1, "C").Resize(lngWrite)
 .NumberFormatLocal = "@"
 .Value = vntResult
 End With
 
 Application.ScreenUpdating = True
 
 strProm = "処理が完了しました"
 
 Wayout:
 
 MsgBox strProm, vbInformation
 
 End Sub
 
 |  |