こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

別ブック間のすべてのシートのある列を比較

こんにちは、
エクセルvba超初心者で修行中のものです。


別ブック間のすべてのシートのある列を比較し、同じ値に色を付けるというマクロを
作りたいのですが、
下記のようにシートを限定する→With Workbooks("マクロ1.xls").Sheets("Sheet1")
とうまくいくのですが、それぞれのブックのすべてのシートに対して比較をしたいので
With Workbooks("マクロ1.xls").worksheets
と書くと
コンパイルエラー、メソッドまたはデータメンバーが見つかりません
と出てきてSet search1 = .Range(.Range("A2"), .Range("A" & Rows.Count).End(xlUp))
このなかの左から二つ目のRangeの色が反転します。
vba に関する勉強不足は重々承知しておりますが、意味が理解できません。
どうすれば、シート全体を検索できるようになるのでしょうか?

ぜひお力をお貸しください

よろしくお願いいたします。



Sub search()

Dim search1 As Range, search2 As Range, s As Range, ss As Range


With Workbooks("マクロ1.xls").Sheets("Sheet1")
Set search1 = .Range(.Range("A2"), .Range("A" & Rows.Count).End(xlUp))
End With
With Workbooks("まくろ2.xls").Sheets("Sheet1")
Set search2 = .Range(.Range("i2"), .Range("i" & Rows.Count).End(xlUp))
End With

For Each s In search1
For Each ss In search2
If s.Value = ss.Value Then
s.Interior.ColorIndex = 6
ss.Interior.ColorIndex = 6

End If
Next ss
Next s
End Sub

投稿日時 - 2013-03-14 15:53:35

QNo.7993160

困ってます

質問者が選んだベストアンサー

それぞれにあるシートを総当りで比較するって事なのかな?

Sub search()

Dim ws1 As Worksheet, ws2 As Worksheet
Dim search1 As Range, search2 As Range, s As Range, ss As Range

For Each ws1 In Workbooks("マクロ1.xls").Worksheets

With ws1
Set search1 = .Range(.Range("A2"), .Range("A" & Rows.Count).End(xlUp))
End With

For Each ws2 In Workbooks("まくろ2.xls").Worksheets

With ws2
Set search2 = .Range(.Range("i2"), .Range("i" & Rows.Count).End(xlUp))
End With

For Each s In search1
For Each ss In search2
If s.Value = ss.Value Then
s.Interior.ColorIndex = 6
ss.Interior.ColorIndex = 6
End If

Next ss
Next s
Next ws2
Next ws1
End Sub

ただ同じシートインデックス(左からの枚数)が同じもの同士で良ければ
違う書き方もあるけど、上記はかなり時間かかるかも?

投稿日時 - 2013-03-14 17:16:31

お礼

n-jun様

ご回答ありがとうございました。
はい、シートを総当たりで比較したいです。
望みどおりうまくいきました!
早くこのようなマクロをさささっとかけるように
なってみたいです。

今後ともよろしくお願いいたします。

投稿日時 - 2013-03-18 11:26:18

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問