無限不可能性ドライブ

『ニューラルネットワーク自作入門』に刺激されてExcelVBAでニューラルネットワークを作ってみたものの、やっぱり数学やらなきゃと思い少しずつやってきたのもあって、自分の知識の整理とかそういった感じです。

【VBA】文字列をいい感じに改行してみる

面白そうなチャレンジだったのでやってみました。


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

f:id:celaeno42:20190120000103p:plain

だいたいいい感じのところで改行できてるようですね。