プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。エクセルで作成された2つのファイルの値の比較をしようとしていて、不一致行を抽出しようとしています。以下をエクセル上もしくはアクセスで簡単に抽出できる方法を教えてください。
2つのファイルには列が8列ずつあります。5列目までが一致しているけれども6-8列目が異なるケースを抜き出したいと思っています。
例えば
Aファイル
A,A,A,A,A,100,200,0 ・・・(1)
A,A,A,A,A,200,200,0 ・・・(2)
Bファイル
A,A,A,A,A,100,200,0・・・(1)
A,A,A,A,A,200,100,0・・・(2)
上記の場合(2)のデータの抽出をしたいと思っております。

A 回答 (1件)

Aファイルを開いておいて(ttt1.xlsとする)、そのVBEの標準モジュールに下記を貼りつける。

比較対象はファイルB(ttt2.xls)とし、閉じておくこと。両ファイルともSheet1にデータがあるとする。
Sub test01()
k = 1
Workbooks.Open "c:\my documents\ttt2.xls"
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Workbooks("ttt1.xls").Worksheets("sheet1")
Set sh2 = Workbooks("ttt2.xls").Worksheets("sheet1")
d = sh1.Range("a1").CurrentRegion.Rows.Count
' MsgBox d
For i = 1 To d
GoSub hikaku
If eq = "y" Then
Else
Cells(k, 10) = i '不一致行番号
For j = 1 To 8
sh1.Cells(k, j + 10) = sh2.Cells(i, j)
Next j
k = k + 1
End If
Next i
Exit Sub
'-----
hikaku:
If (sh1.Cells(i, 1) = sh2.Cells(i, 1)) And _
(sh1.Cells(i, 2) = sh2.Cells(i, 2)) And _
(sh1.Cells(i, 3) = sh2.Cells(i, 3)) Then
eq = "y"
Else
eq = "n"
End If
Return
End Sub
(テストデータ)Aファイル
a121
b232
c453
d344
e455
f236
g447
h218
Bファイル
a121
b232
c453
d344
e4533
f236
g447
h218
(結果)
j1から
5e4533
実際例では、ファイル名、シート名、列の番号(Cells()の
()の中)など適当に変える必要ありますが。
また本例では、簡略化して、A、B、Cの3列しか比較してません。
    • good
    • 0
この回答へのお礼

ありがとうございます。質問後、試行錯誤して複数項目をカチネーションして、1項目にしアクセスの不一致クエリを使用して解決いたしました。
マクロを組むといいとは思ってはいたのですが経験がないので、いつも尻ごみをしてしまいます。例文をみてもピンとこないのですが、このようにあるものをこうやって実現するんだという形にしていただけるとすごく勉強になります。この方法でも試してみようと思います。最近、ファイルの値の比較の作業が非常に多く短時間で大量データを扱うことが多いためまた質問をするかもしれません。今回はありがとうございました。

お礼日時:2004/01/14 01:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!