
いつもお世話になっています。
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件)
- 最新から表示
- 回答順に表示
No.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 のような曖昧比較式にする必要があります。
締め切りになっていませんでしたので、参考までに
No.3
- 回答日時:
こんにちは
1行ずつ記入してゆく方式になっているので、そのループ内で「色」の処理も行うのなら、
>For k= 1 To ~~
のループは不要で、1行分だけの処理を記述すればそれで足ります。
処理対象となっている文字列は words(i)で、現在の行番号は row2なので、
If words(i) = "タイトル" Then sh2.Rows(row2).Interior.ColorIndex = 44
のような要領で済むはずです。
(row2をインクリメントする前に実行しないと行がずれます)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) ExcelVBAの転記について 1 2022/03/23 20:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定の文字を含むシートだけマ...
-
excelのマクロで該当処理できな...
-
Excelマクロのエラーを解決した...
-
【VBA】特定の文字で改行(次の...
-
【ExcelVBA】全シートのセルの...
-
ユーザーフォームに入力したデ...
-
エクセルのシート名変更で重複...
-
実行時エラー1004「Select メソ...
-
VBAで同じシート名のコピー時は...
-
VBA 存在しないシートを選...
-
実行時エラー'1004': WorkSheet...
-
ブック名、シート名を他のモジ...
-
Worksheet_Changeの内容を標準...
-
XL:BeforeDoubleClickが動かない
-
Excel VBA 文字列のセルを反映...
-
エクセルVBA ListBoxの並び...
-
EXCEL(VBA)でシート保護がかか...
-
VBA ユーザーフォーム上のチェ...
-
Excelマクロで複数シートの特定...
-
【エクセルVBA】「Protect User...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字を含むシートだけマ...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
ユーザーフォームに入力したデ...
-
実行時エラー'1004': WorkSheet...
-
XL:BeforeDoubleClickが動かない
-
エクセルVBA Ifでシート名が合...
-
実行時エラー1004「Select メソ...
-
エクセルのシート名変更で重複...
-
【ExcelVBA】全シートのセルの...
-
VBA 存在しないシートを選...
-
ブック名、シート名を他のモジ...
-
Excel チェックボックスにチェ...
-
VBA 検索して一致したセル...
-
エクセルで通し番号を入れてチ...
-
シートが保護されている状態で...
-
ExcelのVBAのマクロで他のシー...
-
【VBA】特定の文字で改行(次の...
-
Worksheet_Changeの内容を標準...
-
Excel VBA で自然対数の関数Ln...
おすすめ情報