質問: マクロで行毎にセル内のフォントサイズを変更したい 今、Excelの1つのセル内に、 --------------- サンダーボルト アクアマリンのままでいて 環八東街道交差点 -------------- という文字列が入力されております。 フォントサイズは「24」に設定されております。 また、このような3行の文字列が、A3セルからA30の各セルに入り、並んでおります。 この状況におきまして。 セル内1行目の文字サイズを20、2行目を14、3行目を16に、マクロで変更できるようにしたいのです。 マクロを記録すると、 With ActiveCell.Characters(Start:=1, Length:=7).Font With ActiveCell.Characters(Start:=9, Length:=12).Font With ActiveCell.Characters(Start:=22, Length:=8).Font 等が出てきたので、この辺りを活用したり、1gyoume、2gyoume、3gyoume等の変数を用意して何か処理をするのでしょうか...。ただ、上記は「サンダーボルト」「アクアマリンのままでいて」「環八東街道交差点」という、各行の文字数が7、12、8の場合でして。 この各行の文字数はランダムに違うので...なんとかそちらにも対応できたらと考えております。 お力添えいただけますと幸いです。 よろしくお願い致します。
回答: テストでコードを作ってみました ↑テスト結果 使ってみてください。 Excel VBA セル内を改行(VBLF)で区切られた文字列のフォントを行単位で変更するテスト ``` Option Explicit Sub main() Dim y As Integer For y = 3 To 30 'a3からA30までループ Call test_font_resize(Cells(y, "A")) Next y End Sub 'セル Rangeを受け取り 改行で区切られた文字列のフォントを変更するテスト Sub test_font_resize(objRANGE As Range) Dim strBOX As Variant '改行vbLfで分割後に入れる配列 Dim nSTART As Integer 'フォント変更位置 Dim nLEN As Integer '文字数 Dim i As Integer 'ループのカウンター '分割後のフォントサイズ Dim nSIZE(3) As Integer nSIZE(0) = 20 '文字のサイズ、一行目 nSIZE(1) = 14 '2行目 nSIZE(2) = 16 '3行目 'セル内改行 vbLfで区切られているので、分割しstrBOXへ格納 strBOX = Split(objRANGE.Cells(1, 1), vbLf) 'ubound(strBOX) で↑の結果、カズがわかります 'フォントのサイズを変更する nSTART = 1 For i = 0 To 2 '三行目までサイズ変更 If i > UBound(strBOX) Then Exit For '配列、改行の数をチェック nLEN = Len(strBOX(i)) objRANGE.Cells(1, 1).Characters(Start:=nSTART, Length:=nLEN).Font.Size = nSIZE(i) nSTART = nSTART + nLEN + 1 '↑上の文字数と改行の文字一つを+ Next i End Sub ``` 1.VBAのSplit関数を使用して、セル内改行された文字列を vbLf で区切り取得 strBOX = Split(objRANGE.Cells(1, 1), vbLf) 2.Characters(Start:=開始位置, Length:=文字数).Font.Size = フォントサイズ セル内のフォントを部分的に変更したかったので、 マクロ記録された .Characters を使用する 3.エラーチェックで分割された文字列の数を数える 必ず固定の改行があると決めつけると痛い目みるので、 UBound(strBOX) などで、改行の行数をチェックしてみた。 まだまだ、運用時にエラーがあるかもしれませんが、 解決の糸口、サンプルとなれば幸いです。 ↑失敗したデバッグ解説最初から※失敗を時間のある時に見て笑ってください・・・