dポイントプレゼントキャンペーン実施中!

VBA初心者です。
Excel2010を使用しています。
よろしくお願いします。

H列 国名が表示されています。
V列 文字列
W列 文字列

H列が「日本」の時は、V列で重複チェックする。

H列が、日本以外の時(アメリカ、ドイツなど)は
W列で重複チェックする。
ただし、W列が「除外」と入力されている行は、無視する。

どちらの場合も重複していたら、ひとつめを含めて
該当行のA〜Wまで黄色にする。

全て組み合わせた記入の仕方が分かりませんでした。わかる方、教えて下さい。よろしくお願いします。

質問者からの補足コメント

  • 回答いたします。

    1)1行目は見出しですか。→見出しです。

    2)W行が除外の場合、無視するとなってますが、国名が日本でも同様ですか。→①重複しない(日本の場合はW列に「除外」という文字列は発生しない&その他の文字列が重複しても判定は不要です。そのためV列で判定したいです。)

    3)日本以外の場合は、重複判定ですが→ ②でお願いします。(国名ごとに、W列の文字列を判定)

    4)日本の場合は、V列に除外という文字があっても、通常の文字列として扱う。→重複でお願いします。判定したくないところに「除外」と入力しており、通常の文字列内に「除外」という文字列はありません。

    追加補足要求です。 1)行はどのくらいありますか→3000行程度ですが、可変です。

      補足日時:2017/07/11 17:13
  • tatsu99様

    早速のご対応ありがとうございました。
    コードを拝見いたしまして、
    まだ実行はできていませんが
    一点、私の回答ミスに気がつきました。

    3)日本以外の場合は、重複判定ですが、 ①「国名+W行の文字列」が重複の場合、重複とする。 (この場合、青色部分は重複しない。) ②W行の文字列のみで、重複の判定をする。 (この場合、青色部分は重複する) ①②のどちらでしょうか。

    の設問に対する回答は「 ①「国名+W行の文字列」が重複の場合、重複とする。 (この場合、青色部分は重複しない。)」でした。

    特にこの部分が分からなくて悩んでいるので、
    よろしければ教えていただけますでしょうか。
    宜しくお願いいたします。

    No.3の回答に寄せられた補足コメントです。 補足日時:2017/07/11 21:24

A 回答 (5件)

以下のマクロを標準モジュールへ登録してください。


Option Explicit
Public Sub 重複チェック()
Dim maxrow As Long
Dim row As Long
Dim dicT0 As Object
Dim dicT1 As Object
Dim key1 As Variant
Dim key2 As Variant
Dim key As Variant
Set dicT0 = CreateObject("Scripting.Dictionary") ' 連想配列の定義
Set dicT1 = CreateObject("Scripting.Dictionary") ' 連想配列の定義

maxrow = Cells(Rows.Count, "H").End(xlUp).row 'sheet H列 最終行を求める
'既存の色を解除
Range("A2:W" & maxrow).Select
With Selection.Interior
.Pattern = xlNone
End With
For row = 2 To maxrow
key1 = Cells(row, "H").Value
If key1 = "日本" Then
key2 = Cells(row, "V").Value
Else
key2 = Cells(row, "W").Value
End If
If key1 = "日本" Or key2 <> "除外" Then
key = key1 & "|" & key2
If dicT0.exists(key) = True Then
dicT1(row) = True
dicT1(dicT0(key)) = True
Else
dicT0(key) = row
End If
End If
Next
For Each key In dicT1
Range("A" & key & ":W" & key).Select
With Selection.Interior
.Color = 65535
End With
Next
MsgBox ("完了")
End Sub
この回答への補足あり
    • good
    • 1

すみません。


No3の回答ですが、
>3)日本以外の場合は、重複判定ですが、 ①「国名+W行の文字列」が重複の場合、重複とする。 (この場合、青色部分は重複しない。)
> ②W行の文字列のみで、重複の判定をする。 (この場合、青色部分は重複する) ①②のどちらでしょうか。
>の設問に対する回答は「 ①「国名+W行の文字列」が重複の場合、重複とする。 (この場合、青色部分は重複しない。)」でした。
①の仕様で作成していました。(②ではありません)
したがって、結果的にNo3がそのまま使えます。
    • good
    • 1
この回答へのお礼

ありがとう

できました!

こういう場合はkeyを使うのですね。
他にも応用できそうなので、
色々と悩んでみたいと思います。

ありがとうございました。

お礼日時:2017/07/12 09:13

3)日本以外の場合は、重複判定ですが、 ①「国名+W行の文字列」が重複の場合、重複とする。

(この場合、青色部分は重複しない。) ②W行の文字列のみで、重複の判定をする。 (この場合、青色部分は重複する) ①②のどちらでしょうか。
の設問に対する回答は「 ①「国名+W行の文字列」が重複の場合、重複とする。 (この場合、青色部分は重複しない。)」でした。

>特にこの部分が分からなくて悩んでいるので、
>よろしければ教えていただけますでしょうか。

判らないというのは、①と②の違いが判らないという意味ですか?
それとも①を実装するには、どうすれば良いかわからないという意味ですか?
どちらの意味でしょうか?
    • good
    • 0

追加補足要求です。


1)行はどのくらいありますか。
    • good
    • 0

補足要求です。


1)1行目は見出しですか。(添付図のグレー部分)

2)W行が除外の場合、無視するとなってますが、国名が日本でも同様ですか。
①日本でも無視するなら、緑の部分は重複しない。
②日本は無視しないなら、緑の部分は重複する。
①②のどちらでしょうか?

3)日本以外の場合は、重複判定ですが、
①「国名+W行の文字列」が重複の場合、重複とする。
(この場合、青色部分は重複しない。)
②W行の文字列のみで、重複の判定をする。
(この場合、青色部分は重複する)
①②のどちらでしょうか。

4)日本の場合は、V列に除外という文字があっても、通常の文字列として扱う。
従って、オレンジの部分は重複する。・・・これであってますか。
「VBAを使用した、複数条件での重複チェッ」の回答画像1
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています