ここから本文です

VBAで教えてください。 エクセルの一覧を差分チェックをしているのですが、 自...

tao********さん

2018/3/1722:59:30

VBAで教えてください。

エクセルの一覧を差分チェックをしているのですが、
自動で差分を検出して、
差異がある場合には行に色をつけたいと考えています。

具体的にはA列、B列、C列に以下のようなものが記載されていて、

A列に名前
B列にグループID
C列に個別コード

B列とC列には全てユニークIDが紐付けされるので、
B列とC列の組み合わせが全て一致している事を確認したいです。


※エクセルで抽出される一覧のフォーマット例

A B C
==================================
1|田中|AAAAA|123456789
==================================
2|田中|AAAAA|123456789
==================================
3|田中|AAAAA|123456789
==================================
4|吉澤|BBBBB|123456789
==================================
5|吉澤|BBBBB|333333333
==================================
6|吉澤|BBBBB|222222222
==================================
7|吉澤|BBBBB|333333333
==================================

上記の例ですと例えば1行目の
A列に"田中"
B列目に"AAAAA"
C列目に"123456789"

であればB列が"AAAAA"の場合は、
全ての行でC列目は"123456789"になります。

しかし上記の一覧でB列が"BBBBB"の場合は、
全ての行でC列目は"333333333"になる筈だが、
6行目で差異が出ているのでErrとなるので、

B列が"BBBBB"の行は全て何色でもいいので、
色をつけたいと考えています。

上記の説明で意図が伝わるか解りませんが、
ご教授頂ければ幸いです。

閲覧数:
69
回答数:
2
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

gd0********さん

2018/3/1723:49:24

はじめにDictionaryを作っておき
各行ごとに以下の処理をくり返す
・B列の値がDictionaryのkeyに含まれるか確認する
・含まれていなければB列をKey、C列をValueとしてDictionaryに入れる
・含まれていたら、DictionaryのValueとC列の値が等しいことを確認する
・等しくなければ、B列の同じ値の行すべてに色をつける

どうでしょうか。

  • 質問者

    tao********さん

    2018/3/1823:01:02

    こんばんは

    コメントありがとうございます。

    VBAの逆引き片手に一度、ムムっときたのですが、
    日々、目を通すリストのボリュームがかなりのもので、

    且つ内容が毎回異なるもので、
    dicを事前に作成する事が困難かな、、、と考えています。

    VBAまたはVBSで作業自体を一回で済ませたらと、
    考えていまして。。。

    コメントありがとうございます。

  • その他の返信(3件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2018/3/21 01:29:20

ご丁寧に教えていただきありがとうございました。

ベストアンサー以外の回答

1〜1件/1件中

hel********さん

2018/3/1808:11:03

変わったやり方。邪道ですけど。

Sub Sample()
Range("A1").CurrentRegion.Copy Range("Z1")
Range("Z1").CurrentRegion.RemoveDuplicates Columns:=Array(2, 3), Header:=xlNo
Dim i As Integer, j As Integer
For i = 1 To Range("AA" & Rows.Count).End(xlUp).Row
If Application.WorksheetFunction.CountIf(Range("AA:AA"), Range("AA" & i)) > 1 Then
For j = 1 To Range("B" & Rows.Count).End(xlUp).Row
If Range("B" & j) = Range("AA" & i) Then
Range("A" & j & ":C" & j).Interior.ColorIndex = 6
End If
Next j
End If
Next i
Range("Z:AB").Delete
End Sub

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる