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

題名記載の詳細を以下に記します
(状態)
 シート1
  →比較対象
 シート2
  →セルに記載した内容はシート1と比較して列行がバラバラ

(困っている点)
 上記状態の2つのシートを、マクロで比較させて、条件が不一致のセルの色(何色でも)を変化させようと考えています

ただ、どうもうまくいかず有識者の知識をお借りしたいと思い投稿しました

直接コードを記述頂ければ助かりますが、類似のサイトがあれば自主的に学習しますので、アドバイスを頂ければ幸いです

因みに、私のVBA知識はほぼ初心者です

A 回答 (3件)

こんばんは!



>条件が不一致のセルの色(何色でも)を変化させようと・・・

とありますが、
具体的な条件提示がないので、仮にSheet1のデータでSheet2にない場合
そのデータセルの色を変える!という解釈でのコードの一例です。

標準モジュールにコピー&ペーストしてマクロを実行してみてください。

Sub test()
Dim c As Range, i As Long, j As Long
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Worksheets("Sheet1") '←「Sheet1」は実際のシート名に!
Set ws2 = Worksheets("Sheet2") '←「Sheet2」も・・・
i = ws2.UsedRange.Rows.Count
j = ws2.UsedRange.Columns.Count
ws1.Cells.Interior.ColorIndex = xlNone
For Each c In ws1.UsedRange
If c <> "" And WorksheetFunction.CountIf(Range(ws2.Cells(1, 1), ws2.Cells(i, j)), c) = 0 Then
c.Interior.ColorIndex = 6 '←黄色にしています。
End If
Next c
End Sub

※ Sheet2のA1セルが空白の場合はダミーとして何かA1セルに入力しておいてください。
(Sheet2の最終行・最終列の取得ができないため)

※ 一発で解決!という訳にはいかないと思います。
あくまで叩き台としての投稿です。m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございます
今回のケースはこのマクロで補完出来そうです

ただ、1点ご教授願いたいのですがですが…
1 For each文を調べたのですがイマイチ理解出来ず、具体的な動作のイメージ(どのように比較対象を検索させているのか)を教えていただけませんか?

お礼日時:2012/10/24 20:17

続けてお邪魔します。



>cに関してはアクティブシートのRANGEを宣言と言うよりも、WS1をForeach文で範囲を指定させてい>るという認識でよろしいでしょうか

に関してですが、
質問文では範囲が明確でないので、あのようなコードにしましたが、
範囲がはっきりわかっているのであれば

For Each c In Selection ←範囲指定している範囲内のそれぞれの「c」という意味
処理
Next c

と一緒のコトになります。

※ 変数「c」を何型で宣言するか?
についてですが、

↓のURLの中間よりやや下の部分
「固有オブジェクト型を指定するメリット」
のところが参考にならないでしょうか?

http://officetanaka.net/excel/vba/error/compilat …

この程度でごめんなさいね。m(_ _)m
    • good
    • 0
この回答へのお礼

構文一例の提供及び、細かな説明、ありがとうございます

非常にわかりやすく、理解出来ました

お礼日時:2012/10/27 21:37

No.1です。



>For~Each に関してですが・・・

前回のコード内で
i・j はSheet2の最終行・最終列を取得しています。
COUNTIF関数の「範囲」を指定するためです。

次にCOUNTIF関数の「検索条件」が アクティブSheetの「c」になります。
この「c」をFor~Next で順番にループしています。

仮に↓の画像がSheet1だとすると
For Each c In ws1.UsedRange
・・・
・・・
Next c

これで太線内(A2:F4)が「Usedrange」となります。

これをA2から右(列方向)に順番にループすることになります。
前回のコードで
>If c <> "" And WorksheetFunction.CountIf(Range(ws2.Cells(1, 1), ws2.Cells(i, j)), c) = 0 Then

に該当するデータは 1~10 です。

※ 見た目は空白でも、数式等が入っていれば「Usedrange」となりますので、
範囲はもっと広がる可能性があります。

この程度で参考になりますかね?m(_ _)m
「他シートのセルを比較する方法」の回答画像2
    • good
    • 0
この回答へのお礼

細部迄ご説明ありがとうございます
最後にもう一点質問させてください

cに関してはアクティブシートのRANGEを宣言と言うよりも、WS1をForeach文で範囲を指定させているという認識でよろしいでしょうか?

お礼日時:2012/10/27 03:46

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