- ベストアンサー
エクセルVBAでセル内の特定文字列を太字に
- エクセル2003で、特定の文字列が含まれているセルを太字にする方法について教えてください。
- A2からA100の範囲には、文字列が入っています。その中で、「愛、恋、幸福、love」という文字列が含まれている場合にセルを太字にしたいです。
- Sub Test()内のforループで、セルの値と特定の文字列を比較し、条件に一致すればセルを太字にする処理を追加すれば実現できます。具体的なコードは以下のようになります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
一例です。 pos = InStr(1, Cells(i, "A"), myW(n), vbTextCompare) Do While pos > 0 Cells(i, "A").Characters(pos, Len(myW(n))).Font.Bold = True pos = InStr(pos + 1, Cells(i, "A"), myW(n), vbTextCompare) Loop
その他の回答 (2)
- ・真 綾・(@Ma-yan_bh1011)
- ベストアンサー率30% (79/257)
#1です。 複数出現については質問文に無かったのでうっかりしていました。失礼しました。 私もmu2011さまに感謝。
お礼
> 複数出現については質問文に無かったのでうっかりしていました。 いえいえ、わたしがちゃんと質問に書かなかったのが悪いんです。 今回は有難うございました。
- ・真 綾・(@Ma-yan_bh1011)
- ベストアンサー率30% (79/257)
そこまで自力で書ける人になら全文載せてもいいかな(笑) Sub Test() Dim myW Dim i As Long Dim c As Range Dim inS As Long myW = Array("愛", "恋", "幸福", "love") For Each c In Range("A2", Cells(Rows.Count, "A").End(xlUp)).Cells For Each s In myW With c inS = InStr(1, .Value, s, vbTextCompare) If inS > 0 Then .Characters(inS, Len(s)).Font.Bold = True End If End With Next Next End Sub こういう感じです。 質問者さんの元のコードをなるべく残しました。 InStr関数とCharactersプロパティがポイントです。
お礼
> InStr関数とCharactersプロパティがポイントです。 有難うございます。 おかげさまで検索&太字設定ができました。 また、vbTextCompareで全半角大小問わず検索できることも勉強になりました。 ただ、同一セル内に同じ語句が複数出てきた場合、最初のものしか対象になりませんでした。 (わたしの質問が悪かったですね、すみません、)
お礼
ありがとうございます。 検索開始位置を指定し、こうやってLOOPさせれば複数の同一文字列の出現に対処できるんですね! とっても勉強になりました。 以下のようにやって目的が達成できました。 Sub Test03() Dim myW Dim i As Long, n As Long, pos As Long myW = Split("愛,恋,幸福,love", ",") For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row For n = LBound(myW) To UBound(myW) pos = InStr(1, Cells(i, "A"), myW(n), vbTextCompare) Do While pos > 0 With Cells(i, "A").Characters(pos, Len(myW(n))).Font .Bold = True .ColorIndex = 3 End With pos = InStr(pos + 1, Cells(i, "A"), myW(n), vbTextCompare) Loop Next n Next i End Sub