特定の文字だけ太字にする
マクロ講座84回
![特定の文字だけ太字にする](gazo2022/2013_macro_84.png)
![特定の文字だけ太字にする](gazo2022/2013_macro_84.png)
特定の文字を太字にする InStr関数で探す
特定の文字列を探して太字にするには
マクロ講座の83回に登場した「InStr関数」を使って特定の語句を探して太字にする、
またフォントを赤色にするというサンプルを紹介します。
InStr関数は、文字列の中から指定した文字列を検索し、
最初に見つかった文字位置を返す
文字列処理関数です。
(サンプルファイルは、こちらから マクロ84回サンプルデータ)
タヌキという文字列を太字にする
次のサンプル文章の中で特定の文字列だけを太字にしたいと言うマクロを紹介します。
文章は、童話です。
かちかち山のタヌキ
昔々のお話です
ある日おじいさんは悪いタヌキを捕まえました
タヌキめ、いつも畑をめちゃめちゃにしようって
タヌキは粛々泣き出します
![特定の文字を太字にするマクロ1](gazo2022/2013_macro_84_01.png)
文章は、童話です。
かちかち山のタヌキ
昔々のお話です
ある日おじいさんは悪いタヌキを捕まえました
タヌキめ、いつも畑をめちゃめちゃにしようって
タヌキは粛々泣き出します
![特定の文字を太字にするマクロ1](gazo2022/2013_macro_84_01.png)
手順として、InStr関数で最初の文のなかにあるタヌキの文字の最初の文字位置を探します。
位置を探すコードを作成したら、次に、太字にするにはどうしたら良いかを考えていきます。
![特定の文字を太字にするマクロ2](gazo2013/instr-function.png)
![特定の文字を太字にするマクロ2](gazo2013/instr-function.png)
ではInStr関数の構文に引数を入力してB2セルの文字列にあるタヌキの位置を取得しましょう。
そしてその戻り値を C2セルに記入します。
コードは、次のようになります。
そしてその戻り値を C2セルに記入します。
コードは、次のようになります。
Public Sub タヌキの位置() Dim 位置 As Long 位置 = InStr(1, Cells(2, 2), "タヌキ", vbTextCompare) Cells(2, 3) = 位置 End Sub
タヌキのタの文字が文の中の7文字目にあるということがわかりました。
この7文字目は太字で赤くすることができます。位置が分かっているのですから。
ではその次のヌやキについてはどうでしょうか?
![特定の文字を太字にするマクロ4](gazo2022/2013_macro_84_02.png)
この7文字目は太字で赤くすることができます。位置が分かっているのですから。
ではその次のヌやキについてはどうでしょうか?
![特定の文字を太字にするマクロ4](gazo2022/2013_macro_84_02.png)
そうです、Len関数を使ってタヌキという文字が何文字かということを調べてその文字数が3文字だということを取得すればいいのです。
文字列の7文字目から始まって3文字を対象にフォントを太字にしてほんとを赤くするというコードを書けば良いことになります。![特定の文字を太字にするマクロ5](gazo2022/2013_macro_84_03.png)
文字列の7文字目から始まって3文字を対象にフォントを太字にしてほんとを赤くするというコードを書けば良いことになります。
Public Sub 手順2タヌキを太字() Dim 位置 As Long 位置 = InStr(1, Cells(2, 2), "タヌキ", vbTextCompare) With Cells(2, 2).Characters(位置, Len("タヌキ")).Font .Bold = True .ColorIndex = 3 End With End Sub
![特定の文字を太字にするマクロ5](gazo2022/2013_macro_84_03.png)
このコードのポイントはCharacters オブジェクトです。Characters オブジェクトを使用すると、文字列のうちの一部だけを対象にした修正ができます。
![特定の文字を太字にするマクロ6](gazo2022/characters_object.png)
![特定の文字を太字にするマクロ6](gazo2022/characters_object.png)
選択範囲の行ごとにタヌキという文字列を太字にする
続いて、選択範囲の行を1行1行チェックして対象の文字を太字にするコードを考えていきます。
行ごとに操作を繰り返すには、For文を使います。
また、対象行に探す文字列がない場合には、処理をしないコードを入れます。
行ごとに操作を繰り返すには、For文を使います。
また、対象行に探す文字列がない場合には、処理をしないコードを入れます。
Sub macro84_instr() Dim myword Dim i As Long, n As Long, 位置 As Long myword = "タヌキ" For i = 2 To Cells(Rows.Count, "B").End(xlUp).Row 位置 = InStr(1, Cells(i, "B"), myword, vbTextCompare) If 位置 > 0 Then With Cells(i, "B").Characters(位置, Len(myword)).Font .Bold = True .ColorIndex = 3 End With End If Next i End Sub
コードを実行すると、このように、シートの文字列を行ごとにチェックし、対象文字だけを太字赤に変更します。
![特定の文字を太字にするマクロ7](gazo2022/2013_macro_84_05.png)
![特定の文字を太字にするマクロ7](gazo2022/2013_macro_84_05.png)