プロが教えるわが家の防犯対策術!

作成したマクロでどうしてもエラーが、でてきます。
内容としては
2つのエクセルファイルを起動し、①片方のファイルのキーワード一覧表から、②もう片方のファイルの中で一致・重複するキーワードに色付け(セルor文字)する作業を繰り返すというものです。
例)①にNGワードが並んでおり、②の複数のセルに文章が書かれている。②の文章中にNGワードが含まれているセルを発見する毎に色付け作業を繰り返す。

作成したマクロは
Sub test()
Dim actBook, objBook, ngWord, mySeru, i
'NGワードのあるブックでSheet1にあるものとする。
Set actBook = Workbooks("①.xls")
'セルに文章が入っているブック
Set objBook = Workbooks("②.xls")
'NGワードのあるSheet1を選択
actBook.Sheets("Sheet1").Select
'NGワードのセルをngWordという変数に入れる
For Each ngWord In ActiveSheet.UsedRange
'セルに文章が入っている②ブックの各シートへの繰り返し
For i = 1 To objBook.Sheets.Count
'文章が入っているセルをmySeruという変数に入れる
For Each mySeru In objBook.Sheets(i).UsedRange
'各セルの文章にNGワードが含まれているかを確認
If InStr(1, mySeru.Value, ngWord.Value) <> 0 Then
'含まれている場合、セルを黄色で塗りつぶし
mySeru.Interior.ColorIndex = 6
End If
Next
Next
Next
Set actBook = Nothing
Set objBook = Nothing
End Sub

これで範囲がありませんとエラーがでます。
どうしたらよろしいでしょうか?
よろしくお願いします。

A 回答 (2件)

こんにちは!


すでに回答は出ていますので、参考程度で・・・
ブックが開いていない場合は開くところからやってみました。

「NGワード」が入っているブックの標準モジュールとしています。
「NGワード」はコードが記載されているブックの「Sheet1」に入力されているという前提です。

Sub Sample1()
Dim k As Long, myPath As String, fN As String, myFlg As Boolean
Dim wS As Worksheet, wB As Workbook
Dim c As Range, myFound As Range, myFirst As Range, myRng As Range
myPath = "保存場所のパス" & "\"
fN = "②.xls" '←色付けをしたいブックのファイル名★
'▼ファイルが開いていない場合は開く//
For k = 1 To Workbooks.Count
If Workbooks(k).Name = fN Then
myFlg = True
Exit For
End If
Next k
If myFlg = False Then
Workbooks.Open (myPath & fN)
End If
'▼開いたファイルの各シート、セルの色付け//
Set wB = Workbooks(fN)
For k = 1 To wB.Worksheets.Count
Set wS = wB.Worksheets(k)
For Each c In ThisWorkbook.Worksheets("Sheet1").UsedRange
Set myFound = wS.Cells.Find(what:=c, LookIn:=xlValues, lookat:=xlPart)
If Not myFound Is Nothing Then
Set myFirst = myFound
Set myRng = myFound
Do
Set myFound = wS.Cells.FindNext(after:=myFound)
If myFound.Address = myFirst.Address Then Exit Do
Set myRng = Union(myRng, myFound)
Loop
myRng.Interior.ColorIndex = 6
End If
Next c
Next k
End Sub

※ 開いたブックは開いたままにしています(上書き保存や閉じるの操作はしていない)

※ 以下のコトは余計なお世話かもしれませんが・・・

お示しのコード内の変数
>Dim actBook, objBook, ngWord, mySeru, i
は何も変数の宣言をしていないので、すべて Variant型になっています。
大勢に影響はないとは思いますが
一つずつ型を宣言するコトをおススメします。

まずはこの程度で・・・m(_ _)m
    • good
    • 0

エラーが出るのは、「Set actBook = Workbooks("①.xls")」ですか?


①.xls は、事前に開いてあるのですよね?もし開いていないのであれば、開いてください。もしくは、マクロの中から開いてください。
また、ファイル名が違っていてもエラーになるので、その辺も要確認です(拡張子も含めて)。

その他、修正が必要な個所があります。こんな感じです。

Sub test()
Dim actBook, objBook, ngWord, mySeru, i
'NGワードのあるブックでSheet1にあるものとする。
Set actBook = Workbooks("①.xls")
'セルに文章が入っているブック
Set objBook = Workbooks("②.xls")
'NGワードのセルをngWordという変数に入れる
For Each ngWord In actBook.Sheets("Sheet1").UsedRange
If ngWord.Value <> "" Then
'セルに文章が入っている②ブックの各シートへの繰り返し
For i = 1 To objBook.Sheets.Count
'文章が入っているセルをmySeruという変数に入れる
For Each mySeru In objBook.Sheets(i).UsedRange
'各セルの文章にNGワードが含まれているかを確認
If InStr(1, mySeru.Value, ngWord.Value) <> 0 Then
'含まれている場合、セルを黄色で塗りつぶし
mySeru.Interior.ColorIndex = 6
End If
Next
Next
End If
Next
Set actBook = Nothing
Set objBook = Nothing
End Sub
    • good
    • 0

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