セルの文字列内の特定のワードの書式設定を変更するプログラムを書いてみましょう。「マクロの記録」を使ってセルの文字列の一部分を変更すればヒントが見えてきます。
マクロの記録で出力されるコードセルに適当な文字列を入力して、マクロの記録を開始して文字列の一部分の書式設定を変更してみましょう。今回は以下の様にフォントサイズを一部変更してみした。
Sub Macro1() ActiveCell.FormulaR1C1 = "ABCDABCD" With ActiveCell.Characters(Start:=1, Length:=0).Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ThemeColor = xlThemeColorLight1 .TintAndShade = 0 .ThemeFont = xlThemeFontNone End With With ActiveCell.Characters(Start:=1, Length:=2).Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 16 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ThemeColor = xlThemeColorLight1 .TintAndShade = 0 .ThemeFont = xlThemeFontNone End With With ActiveCell.Characters(Start:=3, Length:=6).Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ThemeColor = xlThemeColorLight1 .TintAndShade = 0 .ThemeFont = xlThemeFontNone End WithEnd Sub長々と出力されましたが、変更しているのはフォントサイズ部分だけなので、重複しているところはカットしてOKです。更にWithステートメントも外すと以下の様になります。
Sub Macro1改() ActiveCell.FormulaR1C1 = "ABCDABCD" ActiveCell.Characters(Start:=1, Length:=0).Font.Size = 11 ActiveCell.Characters(Start:=1, Length:=2).Font.Size = 16 ActiveCell.Characters(Start:=3, Length:=6).Font.Size = 11End Subだいぶスッキリと書けました。最初の行の、ActiveCell.FormulaR1C1 = “ABCDABCD” については数式バーを編集状態にした事で出力されたものだと思います。
ActiveCell.Characters の使い方さて、今回の主役となるのが、 ActiveCell.Characters です。引数は、Start と Length の2つで、両方とも省略可能で、省略した場合は全ての文字列が対象となります。
ActiveCell.Characters は、セルの文字列に対してプロパティを設定する事ができますが、文字列の範囲を指定する事ができます。尚、セルに文字列以外の数値や日付型などが設定されている場合は上手く動作しないので注意してください。
Start は開始位置Length は対象とする文字数になります。
引数を1つ取った場合はStartを指定した事になり、開始する位置を指定できます。Length:=0 とした場合は、全ての文字列が対象となります。
という事で2行目は()部分を無くして、以下の様に書いてもOKです。ActiveCell.Characters.Font.Size = 11上記のプログラムでは、セルの文字列全体のフォントサイズを 11 にセットしています。続く2行は、先頭から2文字をフォントサイズ 16 に、3文字目から6文字をフォントサイズ 11 にセットしています。結果的に、今回は標準のフォントサイズが 11 なので、下線部分のコードのみで良かったことになります。
検索部分の文字列のフォントサイズ変更セルの文字列の一部分の書式設定を変更する方法がわかりましたので、検索して書式設定を変更するプログラムを書いてみます。セルの文字列から検索文字列を探すにはInStr関数を使います。InStr関数は、文字列と検索する文字列を与えると、ヒットした位置を返してくれます。(InStr関数の詳細はこちらを参照してください。)これを利用してセルの文字列の一部分を変更してみましょう。
Sub myMacro1() Dim hit As Long, sStr As String, l As Long sStr = "AB" l = Len(sStr) hit = InStr(ActiveCell.Text, sStr) ActiveCell.Characters(Start:=hit, Length:=l).Font.Size = 16End Subプログラム実行前は以下の状態です。
実行してみると以下の様になります。
最初の検索文字”AB”のフォントサイズが変更されています。ただ、検索文字列の“AB”は2回出てきますので2回目の“AB”もフォントサイズを変更したいところです。
複数回検索して文字列のフォントサイズを変更複数回検索するには、InStr関数の第一引数である検索開始位置を指定しながら繰り返す必要があります。
InStr関数を使って文字列を複数回検索する方法については以下を参考にしてみてください。・文字列を複数回検索する
Sub myMacro2() Dim hit As Long, sStr As String, l As Long sStr = "AB" l = Len(sStr) hit = 0 Do hit = InStr(hit + 1, ActiveCell.Text, sStr) If hit < 1 Then Exit Do ActiveCell.Characters(Start:=hit, Length:=l).Font.Size = 16 Loop End Subこのプログラムでは、1回目の検索で得た結果から次の検索位置を指定して2回目以降の検索開始位置に指定しています。検索文字列が存在すれば何度もInStr関数が実行され、検索文字列が見つからなかった時点でループを抜けます。
まとめセル文字列の書式設定を部分的に変更するには、マクロの記録でコードを出力するとオブジェクトやそのプロパティが確認できるので便利です。ActiveCell.Charactersに関しては文字列以外(数値や数式、日付型)では上手くいかないので注意してください。検索文字列が出現するのは1回とは限りませんので、InStr関数の開始位置を調節しながら繰り返す事で、全ての検索文字列にヒットさせることが可能です。
Do Loop のプログラムミスに注意Do Loop に関してはプログラムを間違えると無限ループとなりExcelが反応しなくなる事があります。”Loop”の行にブレークポイントを設置するか、”Loop”の前に Stop を書けば、繰返し処理を1回づつ止めながら動作させる事ができるので、開発段階では設定するようにしましょう。Do Loop を書くときは注意を払いましょう。
関連記事:マクロの記録を料理する3色の付いた文字部分を()に変換するマクロ罫線エディター「マクロの記録」を利用するマクロの記録を料理する 2別ブックのデータを集計ExcelVBA 繰返し処理正規表現 RegExp