【VBA】文字列をいい感じに改行してみる
面白そうなチャレンジだったのでやってみました。
ExcelのLENとかLENBって、全角も半角もおんなじだから、漢字とひらがなカタカナと半角英数が混じった文字をだいたい見た目同じあたりで改行するってコード書くのかなりめんどいのな。諦めた。
— fishb (@dampenedkid) January 18, 2019
Option Explicit 'メインのエントリポイントです。このプロシージャから実行してください。 Public Sub Main() Dim r As Long '一行あたりのバイト数(全角文字×2を指定のこと:全角10文字ごとに改行したい場合は20を指定) Const MAX_BYTE As Long = 20 'A2~A5に対象の文字列を入力した状態で実行してください。 '結果はB2~B5セルに出力されます。 For r = 2 To 5 Cells(r, 2).Value = いい感じに改行(Cells(r, 1).Value, MAX_BYTE) Next End Sub 'なるべく一行が揃うように改行します。 '[引数] <- aStr : String / 対象の文字列, aMaxByte : Long / 一行あたりのバイト数 '[戻り値] -> String / 改行された文字列 Private Function いい感じに改行(ByRef aStr As String, ByRef aMaxByte As Long) As String Dim res As String Dim char1 As String Dim pos As Long Dim byteCount As Long Dim strLine As String '文字列を1文字ずつ取り出しつつ長さを計っていく For pos = 1 To Len(aStr) char1 = Mid(aStr, pos, 1) strLine = strLine & char1 'vbのLenBの仕様上の都合により、StrConvで変換の上カウント byteCount = LenB(StrConv(strLine, vbFromUnicode)) If byteCount >= (aMaxByte - 1) Then res = res & strLine & vbCrLf strLine = "" End If Next '最後に残った部分を追加 res = res & strLine '末尾に改行がある場合は削除 If Right(res, 2) = vbCrLf Then res = Left(res, Len(res) - 2) End If いい感じに改行 = res End Function
だいたいいい感じのところで改行できてるようですね。