プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になっています。

800行くらいあるシートがあるのですが
その中で特定のワードが入っている行を塗りつぶししたいです。

シート名:出力   (他にも複数シートがあります)
ワード: "Text:"(: も必要です)"タイトル" "入力値" の3種類
ワードが入っているのは全てB列です。

下記、記載してみたのですが、、、全くもって反応してくれなくて(試しに1つのワードだけで動くかやってみたのですが全然だめでした・・・・)
何がいけないのか教えていただきたいです。

こちらで色々と教えて頂き、貼り付け用シートに貼った内容を
カンマで改行して出力シートに転記するというところまでできました。
転記した出力シートで特定のワードが入っていたら塗りつぶしというのをやりたいのですが・・・
--------------------------------------------------
Sub 特定文字があったら塗りつぶし()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim row1 As Long
Dim row2 As Long
Dim maxrow As Long
Dim words As Variant
Dim i As Long
Dim k As Long


Set sh1 = Worksheets("貼り付け用")
Set sh2 = Worksheets("出力")

sh2.Rows("2:" & Rows.Count).ClearContents
maxrow = sh1.Cells(Rows.Count, "A").End(xlUp).Row
row2 = 2

For row1 = 2 To maxrow
words = Split(sh1.Cells(row1, "B").Value, ",")
If UBound(words) < 0 Then
sh2.Cells(row2, "A").Value = sh1.Cells(row1, "A").Value
row2 = row2 + 1
End If
For i = 0 To UBound(words)
If i = 0 Then
sh2.Cells(row2, "A").Value = sh1.Cells(row1, "A").Value
End If
sh2.Cells(row2, "B").Value = words(i)
row2 = row2 + 1

'↑まではうまく動きます↓は全然駄目

For k = 1 To Cells(Rows.Count, 1).End(xlUp).Row
If sh2.Cells(k, 2) = "タイトル" Then  '試しに1つのワードだけ
Rows(k).Interior.ColorIndex = 44
End If
Next k
Next i
Next
End Sub

A 回答 (4件)

こんにちは


>転記した出力シートで特定のワードが入っていたら塗りつぶしというのをやりたいのですが
すでに#3様が的確な回答をされていますので、解決されているのではないかと思います。

処理量が多くなるようであれば、処理時間などを考慮し
行全体に色を付けるより必要箇所のみの方が良いように思います

>何がいけないのか教えていただきたいです。

For k = 1 To Cells(Rows.Count, 1).End(xlUp).Row
If sh2.Cells(k, 2) = "タイトル" Then  '試しに1つのワードだけ
Rows(k).Interior.ColorIndex = 44
End If
Next k
この部分を指すものと思います
先ず、複数シートを対象に処理をする場合、シートを明示するようにします
この場合、明示するべき箇所は3か所
Cells(Rows.Count, 1).End(xlUp).Row
sh2.Cells(k, 2)
Rows(k)
1か所は明示済みですが2か所はアクティブシートになっています
Worksheets("出力")を表示して実行すれば実行出来そうですが・・・
もう一点、問題があるかもです。これに付いても、すでに回答されていますが

>特定のワードが入っていたら
これは、"タイトル" だけを指しているのでしょうか?
"123タイトル" や "123タイトル123" などの可能性もあると読めます

もし、含むとするのなら、=では正しく比較できません
#1様、2様の回答にあるような(検証抽出)比較方法や
If sh2.Cells(k, 2) Like "*タイトル*" Then のような曖昧比較式にする必要があります。

締め切りになっていませんでしたので、参考までに
    • good
    • 0

こんにちは



1行ずつ記入してゆく方式になっているので、そのループ内で「色」の処理も行うのなら、
>For k= 1 To ~~
のループは不要で、1行分だけの処理を記述すればそれで足ります。

処理対象となっている文字列は words(i)で、現在の行番号は row2なので、
If words(i) = "タイトル" Then sh2.Rows(row2).Interior.ColorIndex = 44
のような要領で済むはずです。
(row2をインクリメントする前に実行しないと行がずれます)
    • good
    • 1

worksheetfunction.countif を使うとか?

    • good
    • 1

instr関数使うとよいと思います。

    • good
    • 1

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