仕事で効率的になるように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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- Visual Basic(VBA) VBA シート間の転記で、条件の追加コードの書き方について教えて下さい。 13 2023/02/26 09:31
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Excel(エクセル) Excelにて、行の最後のセルの値をコピーして別sheetに張りつけるVBAコードをご教授願います 3 2022/11/20 14:35
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Visual Basic(VBA) VBA 別sheetからの転記なのですが 2 2023/05/22 15:55
- Visual Basic(VBA) VBA For Each 〜 複数条件について 3 2022/10/20 20:05
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
質問です。 中学生1人でコンサ...
-
歌手・演奏者は途中でトイレに...
-
夢グループという会社から良く...
-
スタンディングライブで背が低...
-
コンサートチケットの値段高す...
-
チケットぴあの一般販売の座席...
-
ジャニーズのコンサートに行っ...
-
高2です。 チケットぴあのクレ...
-
Zepp Nagoya
-
徳永英明さんのコンサートの客...
-
彼氏が病気のとき彼女は遊びに...
-
コンサートの年齢制限
-
携帯電話番号から犯人を捕まえ...
-
スカイツリーについての質問です。
-
コンサートの時間
-
嵐のコンサートについて質問です。
-
大阪城ホールの立ち見ってどん...
-
平井堅・コンサートの曲名
-
ライブ、コンサート、スタンデ...
-
ライブ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
夢グループという会社から良く...
-
チケットぴあの一般販売の座席...
-
質問です。 中学生1人でコンサ...
-
スタンディングライブで背が低...
-
これはコンサートマナー違反で...
-
歌手・演奏者は途中でトイレに...
-
ジャニーズのコンサートに行っ...
-
チケットは折り曲げても・・・?
-
チケットぴあの先着で早いのは...
-
大阪城ホール:立ち見→指定席?
-
ジャニーズコンサートの子供入...
-
コンサート会場での飲食
-
コンサートの際の夕食
-
ライブ会場のお香の匂いについて
-
ローソンチケット ロッピーで...
-
東宝ナビザーブの先行抽選予約...
-
コンサートの子供料金について
-
ライブ会場で飲酒?
-
コンサートに行った事がないっ...
-
おかあさんといっしょのファミ...
おすすめ情報