今、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の場合でして。
この各行の文字数はランダムに違うので…なんとかそちらにも対応できたらと考えております。
お力添えいただけますと幸いです。
よろしくお願い致します。
テストでコードを作ってみました
https://youtu.be/g3KKlVqscDE?t=934
↑テスト結果
使ってみてください。
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) などで、改行の行数をチェックしてみた。
まだまだ、運用時にエラーがあるかもしれませんが、
解決の糸口、サンプルとなれば幸いです。
https://www.youtube.com/watch?v=g3KKlVqscDE
↑失敗したデバッグ解説最初から※失敗を時間のある時に見て笑ってください・・・
これを参考に「改行コード」を検索して、それぞれの行の文字数を数えることができそうです。
リンクありがとうございます。
0D0A難しいですね…「上位バイトと下位バイトがスワップしていますので、次のように記録されているのがわかります。」ってところで「えっ?」となりました。
0Aなんてどこにもなく、0xしか見当たらないのですが…もう少しじっくり読み、改行コードの理解を深めていきたいと思います!