• 締切済み

エクセルのマクロについて教えて下さい。

資料作成の為に、マクロを組んでいるのですが、どうしてもできない部分があり、 ご教授頂きたく書きこませて頂きます。 私が行いたいのは、2種のブック(1ブック,2ブックとして)を用意して、 2ブックのC列にある文字列を1ブックのC列に検索をかけて、該当する物があれば、 セルの塗りつぶしを行う。と言う動作です。 ですが、2ブックのC列の取り込みがうまく出来ません。 range(C)と書いてもエラーが出てしまします。 何卒、ご教授のほど、宜しくお願い致します。 Sub selectfoundsheets() For Each s In Worksheets vx = MsgBox(s.Name & " を検索しますか?", vbYesNo) If vx = vbYes Then s.Select Set c = Cells.Find(What:="   ")   'ここに2ブックのC列を取り込みたいのです。 If Not c Is Nothing Then f = c.Address Do With c.Interior .ColorIndex = 6 .Pattern = xlSolid .PatternColorIndex = xlAutomatic End With Set c = Cells.FindNext(c) Loop While Not c Is Nothing And c.Address <> f End If End If Next s End Sub

みんなの回答

回答No.2

質問者の意図がいまいちハッキリしませんので、 次のように解してお答えします。 <質問者の意図> ブック2において、ブック1を自動的に開き、 ブック2のシート1のC列にある全て文字列値が、ブック1のシート1のC列にある全て文字列の値と一致するかどうかを調べ、 一致すればブック2のC列にある文字列値のセルを色付けする。 なお、作業終了後はブック1を自動的に変更保存しないで閉じる。 <マクロの事前準備> ブック2のX列(どの列でも可)に次の式を記し、それを文字列値が存在する可能性のある範囲の行にコピーする。 =If(C1="","","S") X列を表示したくなければ、X列を隠し列にして下さい。(隠し列/行はマクロ実行に関係なし) <マクロ> Sub ZZZ() Dim A,B,C,D,E Dim AA Dim AAA() AA=ActiveWorkBook.Name A = Application.WorksheetFunction.CountIf(Range("X1:X10000"),"S") ReDim AAA(A,2) B=0 For C=1 To A B = B + Application.WorksheetFunction.Match("S", Range(Cells(B + 1, 24), Cells(10000, 24)), 0) (24はX列の意味) AAA(C,1)=B AAA(C,2)=Cells((B,3).Value  (3はC列の意味) Next C Workbooks.Open Filename:="C:\YYY\XXX.xls" Sheets(1).Select E=0 For C=1 To A D= Application.WorksheetFunction.CountIf(Range("C1:C10000"), AAA(C,2)) If D>0 Then Workbooks(AA).Sheets(1).Cells(AAA(C,1),3).Interior.ColorIndex = 6 E=E+1 End If ActiveWorkBook.Close False MsgBox "***作業が完了しました。" & vbCrLf & _ "***作業件数は" & E & "件でした。" End If

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

>range(C)と書いてもエラーが出てしまします。 ですが Columns("C:C")と記述します。 >s.Select > >Set c = Cells.Find(What:="   ") は Set c = Columns("C:C").Find(What:="   ") の1行ですね。

babelu
質問者

お礼

早速のご回答ありがとうございました。 現状B2~F700まで文字が入力されている、(空欄やセル結合含む)のですが そこ以外(A1、G~)のすべてのセルが塗りつぶされる様になってしまいました。 あくまでも、ブック2のC列に一致するブック1のC列の物を塗りつぶししたいのですが・・・申し訳無いです

関連するQ&A