解決済み

エクセルVBAでセル内の特定文字列を太字に

  • 困ってます
  • 質問No.7054631
  • 閲覧数3413
  • ありがとう数6
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 99% (519/522)

エクセル2003です。
A2からA100の範囲のすべてのセルに文字列(文章)が入っています。
セルにより、約30~1200文字程度とばらばらです。
この範囲の各セルの文字列の中に、「愛、恋、幸福、love」という文字列があれば、その語句だけを太字にしたいのです。
(なければ、なにもしません。)
英字(love)は半角全角大文字小文字を問いません。
一応、ここまでは書いたのですが、検索するところでお手上げになってしまいました。
なにとぞ、お助けください。

Sub Test()
Dim myW
Dim i As Long
myW = Split("愛,恋,幸福,love", ",")
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
For n = LBound(myW) To UBound(myW)
MsgBox Cells(i, "A").Value & "に" & myW(n) & "があれば太字に" 'この肝心な部分がわかりません。
Next n
Next i
End Sub

質問者が選んだベストアンサー

  • 回答No.2

ベストアンサー率 38% (1910/4994)

一例です。

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
お礼コメント
emaxemax

お礼率 99% (519/522)

ありがとうございます。
検索開始位置を指定し、こうやって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
投稿日時 - 2011-10-06 13:45:03

その他の回答 (全2件)

  • 回答No.3

ベストアンサー率 30% (79/257)

#1です。
複数出現については質問文に無かったのでうっかりしていました。失礼しました。
私もmu2011さまに感謝。
お礼コメント
emaxemax

お礼率 99% (519/522)

> 複数出現については質問文に無かったのでうっかりしていました。

いえいえ、わたしがちゃんと質問に書かなかったのが悪いんです。
今回は有難うございました。
投稿日時 - 2011-10-06 17:42:22
  • 回答No.1

ベストアンサー率 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プロパティがポイントです。
お礼コメント
emaxemax

お礼率 99% (519/522)

> InStr関数とCharactersプロパティがポイントです。

有難うございます。
おかげさまで検索&太字設定ができました。
また、vbTextCompareで全半角大小問わず検索できることも勉強になりました。

ただ、同一セル内に同じ語句が複数出てきた場合、最初のものしか対象になりませんでした。
(わたしの質問が悪かったですね、すみません、)
投稿日時 - 2011-10-06 13:37:25
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

ピックアップ

ページ先頭へ