
仕事で効率的になるようにVBAを勉強しながらプログラムを作成しているのですが、
同じエクセルで2つのシートの突合でどうすればいいのか頭を悩ませています。
ご教授頂けると助かります。
◆シートの配列◆
【Sheet1】B4「種類」 G4「番号」 K4「商品コード」 M4「数量」 S4「金額」
※5行目からデータが入っていて最終行は毎回違います。
【Sheet2】A2「番号」 C2「商品コード」 E2「分類」 F2「A数量」 G2「B数量」 H2「金額」
※3行目からデータが入っていて最終行は毎回違います。
(上記の列以外もデータが入っていますが突合対象のデータではありません)
実行したい内容は、【Sheet1】G列「番号」と【Sheet2】A列「番号」をキーとして一致した行の下記【1】~【4】のデータが一致しているかを確認したいのですが、下記内容【1】【2】がシートでタイトル名とデータの文言が違います。
システムから出力しているデータなので変更ができません。
※同じシート内で重複している「番号」はないです。
【1】一致確認列:【Sheet1】B列「種類」=【Sheet2】 E列「分類」
パターン1【Sheet1】「種類」データが小型or中型=【Sheet2】「分類」データがBで一致
パターン2【Sheet1】「種類」データが大型=【Sheet2】「分類」データがAで一致
【2】一致確認列:【Sheet1】 M列「数量」=【Sheet2】F列「A数量」or G列「B数量」
上記、パターン1の場合は【Sheet1】M列「数量」=【Sheet2】 G列「B数量」
上記、パターン2の場合は【Sheet1】M列「数量」=【Sheet2】 F列「A数量」
【3】一致確認列:【Sheet1】K列「商品コード」=【Sheet2】 C列「商品コード」
【4】一致確認列:【Sheet1】S列「金額」=【Sheet2】 H列「金額」
全一致で「一致」1箇所でも不一致があれば「不一致」のメッセージBoxを表示させたいです。
そして、一致しない箇所があれば色付けしたいと思っています。
複雑な内容で分かりにくい文書の記載のみとなり大変申し訳ございませんが、
ご教授いただけますよう宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
とりあえず、こんな事でしょうか?
---------------------------------------------------------------------------
Sub Macro1()
Dim 一致 As Boolean
Dim 不一致 As Boolean
Dim 元行 As Long
Dim 元終 As Long
Dim 先行 As Long
Dim 先終 As Long
Dim 色 As Long
色 = RGB(255, 0, 0)
元終 = Sheets("Sheet1").Cells(Rows.Count, 7).End(xlUp).Row
先終 = Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
For 元行 = 5 To 元終
一致 = False
For 先行 = 3 To 先終
If Sheets("Sheet1").Cells(元行, 7).Value = Sheets("Sheet2").Cells(先行, 1).Value Then
Sheets("Sheet1").Cells(元行, 2).Interior.Color = 色
Sheets("Sheet2").Cells(先行, 5).Interior.Color = 色
Select Case Sheets("Sheet1").Cells(元行, 2).Value
Case "小型", "中型"
If Sheets("Sheet2").Cells(先行, 5).Value = "B" Then
Sheets("Sheet1").Cells(元行, 2).Interior.ColorIndex = xlNone
Sheets("Sheet2").Cells(先行, 5).Interior.ColorIndex = xlNone
Else
不一致 = True
End If
Case "大型"
If Sheets("Sheet2").Cells(先行, 5).Value = "A" Then
Sheets("Sheet1").Cells(元行, 2).Interior.ColorIndex = xlNone
Sheets("Sheet2").Cells(先行, 5).Interior.ColorIndex = xlNone
Else
不一致 = True
End If
Case Else
不一致 = True
End Select
Sheets("Sheet1").Cells(元行, 13).Interior.Color = 色
Sheets("Sheet2").Cells(先行, 6).Interior.Color = 色
Sheets("Sheet2").Cells(先行, 7).Interior.Color = 色
If Sheets("Sheet1").Cells(元行, 13).Value = Sheets("Sheet2").Cells(先行, 6).Value Then
Sheets("Sheet1").Cells(元行, 13).Interior.ColorIndex = xlNone
Sheets("Sheet2").Cells(先行, 6).Interior.ColorIndex = xlNone
Sheets("Sheet2").Cells(先行, 7).Interior.ColorIndex = xlNone
Else
If Sheets("Sheet1").Cells(元行, 13).Value = Sheets("Sheet2").Cells(先行, 7).Value Then
Sheets("Sheet1").Cells(元行, 13).Interior.ColorIndex = xlNone
Sheets("Sheet2").Cells(先行, 6).Interior.ColorIndex = xlNone
Sheets("Sheet2").Cells(先行, 7).Interior.ColorIndex = xlNone
Else
不一致 = True
End If
End If
If Sheets("Sheet1").Cells(元行, 11).Value <> Sheets("Sheet2").Cells(先行, 3).Value Then
Sheets("Sheet1").Cells(元行, 11).Interior.Color = 色
Sheets("Sheet2").Cells(先行, 3).Interior.Color = 色
不一致 = True
End If
If Sheets("Sheet1").Cells(元行, 19).Value <> Sheets("Sheet2").Cells(先行, 8).Value Then
Sheets("Sheet1").Cells(元行, 19).Interior.Color = 色
Sheets("Sheet2").Cells(先行, 8).Interior.Color = 色
不一致 = True
End If
一致 = True
Exit For
End If
Next
If 一致 = False Then
Sheets("Sheet1").Cells(元行, 7).Interior.Color = 色
不一致 = True
End If
Next
For 先行 = 3 To 先終
一致 = False
For 元行 = 5 To 元終
If Sheets("Sheet1").Cells(元行, 7).Value = Sheets("Sheet2").Cells(先行, 1).Value Then
一致 = True
Exit For
End If
Next
If 一致 = False Then
Sheets("Sheet2").Cells(先行, 1).Interior.Color = 色
不一致 = True
End If
Next
If 不一致 Then
MsgBox ("不一致")
Else
MsgBox ("一致")
End If
End Sub
---------------------------------------------------------------------------
・ 適当に作りましたので、結構時間がかかります。
・「一致しない箇所があれば色付け」は、とりあえず「赤」にしてます。
「色 = RGB(255, 0, 0)」を変えればお好みの色に変更出来ます。
・ 両シート共「番号」でソートしてしまってもよければもっと早い処理ができます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VLOOKUP FALSEのこと
-
if関数の複数条件について
-
【マクロ】実行時エラー '424':...
-
同じ名前(重複)かつ 日本 ア...
-
excel
-
【マクロ】数式を入力したい。...
-
Office2021のエクセルで米国株...
-
【画像あり】オートフィルター...
-
エクセルシートの見出しの文字...
-
エクセルの複雑なシフト表から...
-
エクセルのVBAで集計をしたい
-
エクセルでフィルターした値を...
-
【関数】=EXACT(a1,b1) a1とb1...
-
【画像あり】【関数】指定した...
-
勤怠表について ABS、TEXT関数...
-
エクセルの文字数列関数と競馬...
-
表計算ソフトでの様式の呼称
-
【マクロ】【画像あり】4つの...
-
Excelで4択問題を作成したい
-
空白のはずがSUBTOTAL関数でカ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
夢グループという会社から良く...
-
動画さがしています。ポール・...
-
質問です。 中学生1人でコンサ...
-
スタンディングライブで背が低...
-
チケットは折り曲げても・・・?
-
歌手・演奏者は途中でトイレに...
-
小田和正コンサート
-
ライブ会場のお香の匂いについて
-
コンサートの際の夕食
-
大阪城ホール:立ち見→指定席?
-
ジャニーズのコンサートに行っ...
-
奢るべきでしょうか。
-
コンサートに行った事がないっ...
-
クリスマスに好きな人と会うか...
-
札幌ドームの話
-
ザローリングストーンズは、ア...
-
はじめまして。 演歌歌手(吉幾...
-
ロッピーについて質問です。 ロ...
-
札幌ドームの話
-
ローソンチケット ロッピーで...
おすすめ情報