
シートを突合するマクロを色々なコードを見て、
使えるようにしていたのですが、
条件と突合先のデータが色々な場所にあるので、
突合作業が上手く行かないので、相談させてください。
シート同士を突合して、
不一致だった場合、色を塗って
不一致箇所にコメントで大元のデータをコメントに表示させるという事を
行いたいのですが、データが多岐に渡り、
さらに、アクセスから抽出したデータのため、
突合する番号が重複して、存在しているので
Find nextで動かすか
配列に格納させて、突合させる方法もあると開発者からアドバイスを頂いたのですが、
その開発者の方が退職してるため、
色々調べて、ほかの人のコードを参考にしながら
やってみたのですが、上手くいかないので、
行き詰まってしまったので、どなたか、
良い方法があれば教えて頂けませんか?
下記に途中ですが、マクロのコードと
概要と添付にて図を表示します。
お手数ですが、宜しくお願い致します
Sub 突合テスト()
Dim A As Long, B As Long
Dim C As Worksheet, D As Worksheet
Set C = Worksheets("突合先")
Set D = Worksheets("データ")
A = Range("C65536").End(xlUp).Row
B = Range("IV" & A).End(xlToLeft).Column
With C
For A = 3 To A
For B = 3 To B
If .Cells(A, B) <> D.Cells(A, B) Then
.Cells(A, B).Interior.ColorIndex = 38 '←色をぬる
Else
.Cells(A, B).Interior.ColorIndex = 0
End If
Next B
Next A
End With
End Sub
前任者の方が参考にとのことで、
ネットに記述されていたコードを基に変えていけばいいと
言われて残されたコードです。
条件が複雑のため、改造しようと色々と考えましたが
上手く行かないので、アドバイス方お手数ですがよろしくお願いいたします。
--------------------------------------------------------------------------
☆概要構成☆
突合先シート(データと違ってた場合,色を塗って違った値をコメントに入れる)
C列 D列 E列 F列 G列
0119998888 AA1 BB1 CC1 DD1
0119998889 AA2 BB2 CC2 DD2
0119998890 AA3 BB3 CC3 DD3
0119998891 AA4 BB4 CC4 DD4
0119998892 AA5 BB5 CC5 DD5
→データは3行目から始まって都度、行の数は変動する。
C列 D列 E列 F列 G列にデータが記述
--------------------------------------------------------------------------
比較するデータシート(アクセスで抽出したデータをエクセルにしているもの
フィールド分けされており、基準となる番号がD列に重複して存在
列は動かないが、行の数は変動する)
D列 M列 AD列
0119998888 BB1 AA2
0119998889 BB2 AA3
0119998890 ~ BB3 AA4
0119998891 BB4 AA5
0119998892 BB5 AA6
D列 N列 X列
0119998888 CC1 DD1
0119998889 CC2 DD2
0119998890 ~ CC3 DD3
0119998891 CC4 DD4
0119998892 CC5 DD5
→元々はアクセスからデータを抽出しているため、広範囲までII列までデータが存在
行も変動するが1000行以上ある
D列に基準となる番号が突合先のシートC列の番号と同じものがあるが
確認するデータのカテゴリの関係上、
重複して存在している。
----------------------------------------------------------------------------
最終的にやること
突合して、
突合先のシートのD列とデータシートのAD列が一致してなかったら、
突号先のシートのD列のセルに
一致してない箇所のセルをピンク色に塗る。
データシートのセル値を突合先セルのコメントに入れる。
突合先のシートのE列とデータシートのM列が一致してなかったら、
突号先のシートのE列のセルに
一致してない箇所のセルをピンク色に塗る。
データシートのセル値を突合先セルのコメントに入れる。
突合して、
突合先のシートのF列とデータシートのN列が一致してなかったら、
突号先のシートのF列のセルに
一致してない箇所のセルをピンク色に塗る。
データシートのセル値を突合先セルのコメントに入れる。
突合先のシートのG列とデータシートのX列が一致してなかったら、
突号先のシートのG列のセルに
一致してない箇所のセルをピンク色に塗る。
データシートのセル値を突合先セルのコメントに入れる。

No.1ベストアンサー
- 回答日時:
シート[突合先]のC列の最終行【A】と3行の最終列【B】を取得
A3セルから最終行:最終列を比較範囲
相違があった場合にシート[突合先]の該当セルを塗りつぶして、コメントを挿入するマクロコードです。
コメントには、シート[データ]の値が入ります。
Sub 突合テスト2()
Dim A As Long, B As Long
Dim C As Worksheet, D As Worksheet
Dim i As Long, k As Long
Set C = Worksheets("突合先")
Set D = Worksheets("データ")
C.Activate
A = Range("C65536").End(xlUp).Row
B = Range("iv3").End(xlToLeft).Column
Cells.ClearComments
'すべてのコメントを削除してから比較・コメント挿入という流れです。
With C
For k = 3 To A
For i = 3 To B
If .Cells(k, i) <> D.Cells(k, i) Then
.Cells(k, i).Interior.ColorIndex = 38 '←色をぬる
.Cells(k, i).AddComment
.Cells(k, i).Comment.Visible = True
.Cells(k, i).Comment.Text Text:=D.Cells(k, i).Value
Else
.Cells(k, i).Interior.ColorIndex = xlNone
End If
Next i
Next k
End With
End Sub
---------------------------------------------------
ご質問の記事に掲載されていたコード Sub突合テストを部分的に修正しただけです。
修正した箇所
B = Range("IV" & A).End(xlToLeft).Column
最終列を求めるコードですが、Rangeの指定が間違っています。
正しくは
B = Range("iv3").End(xlToLeft).Column
三行目の最終列を求めましたが、一行目にする場合はRange("iv1")に書き直してください。
For A = 3 To A
For文にAが二回出てきますが、これでは処理ができません。
For 変数 初期値 to 最終値
という書き方をします。
A と B は最終値として使いますので、別の変数を宣言して使います。
i と k を使いました。
For k = 3 To A
For i = 3 To B
No.4
- 回答日時:
相違があった時にデータシートのセルの値をコメントとして表示させる処理なんですが、コメントには[数値]を入れられないみたいなんです。
相違セルの値が数値だとエラーになります。対策は文字列型の変数を宣言して、データシートの値を文字列に変換する必要があります。
Dim Str As String
If .Cells(k, i) <> D.Cells(k, i) Then
Str =D.Cells(k, i).Value
.Cells(k, i).Comment.Text Text:= Str
No.3
- 回答日時:
原因が分かりました。
[データ]のセルが空白で、[突合先]の同一セルに値がある場合、
.Cells(k, i).Interior.ColorIndex = 38 '←色をぬる
.Cells(k, i).AddComment
.Cells(k, i).Comment.Visible = True
セルに色を塗って【コメント枠】を表示することはできますが、
.Cells(k, i).Comment.Text Text:=D.Cells(k, i).Value
D.Cells(k, i).Valueが存在しないので、コメントにテキストが入りません。
エラーを回避するには、
If .Cells(k, i) <> D.Cells(k, i) Then
を
If .Cells(k, i) <> D.Cells(k, i) And _
D.Cells(k, i) <> "" Then
に書き換えてください。
No.2
- 回答日時:
'.Cells(k, i).Comment.Text Text:=D.Cells(k, i).Value
このコードの先頭にシングルクォーテーションを打ってやり直してみてください。
その行でエラーになるということは、その前のコード(セルに色を塗る、コメントを挿入)は出来ているはずです。
シート[突合先]の色が塗られたセルがF54だったとしたら、シート[データ]のF54を調べてみてください。シート[データ]に値がないのかもしれません。
他の調べ方として、そのデータブックは一旦閉じて、仮のブックを新規作成してください。
そして、そのブックのシート名を[突合先]に変更します。
[突合先]のB3:F100ぐらいの範囲を選択して同じ値(数字でも文字列でも可)を入力してください。Ctrl+Enterで選択範囲に同じ値が入ります。
そしてそのシートを同一ブックに複製し、シート名を[データ]にします。
[突合先]の任意のセルに、入力済みの値とは異なる値を入力します。動作確認用なので1つのセルだけ変更すれば充分です。
この状態で、マクロを実行してください。
値を変更したセルが塗りつぶされて、最初に入力した値がコメントとして挿入されるか調べてみてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- Visual Basic(VBA) 複数シートの複数列に入力されているデータを重複なしで抽出するVBAを作りたいです。 9 2022/06/17 10:33
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
お肉の下のシートを煮込んでし...
-
2つのシート間での重複データ...
-
エクセルを利用して、日計と累...
-
エクセルで1行だけ数式が反映さ...
-
エクセルでフラグがたっている...
-
excel シート1の奇数(偶数)...
-
VBA 縦のデータを横にするコード
-
エクセルでシート間の相対参照
-
指定した条件でTRANSPOSE関数を...
-
毎日の日計を別シートに自動で...
-
エクセルのシートをコピーして...
-
複数シートのセルの 記号の数...
-
エクセルで製作したシートをメ...
-
複数シートの列、幅の一括変更方法
-
EXCELで受験票を作成したい(名...
-
ステンレス・ニロスタ鋼につい...
-
エクセルで○のついた項目を抽出
-
クッキングシート
-
2センチ四方くらいのタイルを...
-
チュロス袋の代用
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
お肉の下のシートを煮込んでし...
-
エクセルを利用して、日計と累...
-
エクセルのシートをコピーして...
-
条件にマッチする行を抽出するV...
-
エクセルで1行だけ数式が反映さ...
-
2つのシート間での重複データ...
-
毎日の日計を別シートに自動で...
-
指定した条件でTRANSPOSE関数を...
-
エクセルでフラグがたっている...
-
エクセルで○のついた項目を抽出
-
チュロス袋の代用
-
EOMONTH関数の代わり
-
エクセル ○印がついている行を...
-
excel シート1の奇数(偶数)...
-
EXCELで受験票を作成したい(名...
-
2つのシート突合の相違時色塗り...
-
エクセルで2つのシートに同じ名...
-
VBA 縦のデータを横にするコード
-
派遣会社の担当者からタイムシ...
-
Excelで複数のシートに列のグル...
おすすめ情報
コードありがとうございます!!
色々確認して、確認する予定ですが、
コードを実行すると、下記の場所にエラー出たのは、
データ先のシートの条件がまずかったのでしょうか?
エラー修正してもらって、動きを確認できました。
コードを再度、見直したのですが、
突合先とデータが同じ列で動くコードだったので、
一度、突合の番号を別で格納してから、動かしてみます
返答遅れて申し訳ありません。
無事、動きました ありがとうございます