文字列分割プロシージャ(泣き別れ防止)

住所などの長い文字列を印刷する場合、適度な長さで分割して複数行にすることがよくあります。
その場合、単純に文字の長さだけで分割すると、変な位置で切れてしまって見栄えがよくありません。
 
そういうときのために、適切な位置で切るプロシージャを用意しておくと何かと便利です。
汎用的なので使いまわしがききますし。
なお、スペースで区切りを判定するようにしてあるので、スペースで区切られていないと単純に文字の長さだけで分割します。

' # 文字列分割(泣き別れ防止)                               #
'   argI   :i   分割対象文字列
'   argLen :i   分割単位文字数
'   argO   :o   分割結果文字列
Private Function DivideText4(ByVal argI As String _
                           , ByVal argLen As Long _
                           , ByRef argO As String) As Boolean
    Dim wkRow(1 To 5) As String
    Dim wkTextBuf As String
    Dim wkText1 As String
    Dim DivPos As Long
    Dim FindFlg As Boolean
    Dim I As Long
    Dim j As Long

    wkTextBuf = argI
    wkRow(1) = argI
    For j = 1 To 4
        If Len(wkRow(j)) <= argLen Then
            Exit For
        End If
        ' 区切り位置を探す
        FindFlg = False
        For I = argLen + 1 To 1 Step -1
            wkText1 = Mid(wkTextBuf, I, 1)
            If wkText1 = Space(1) Or wkText1 = " " Then
                DivPos = I
                FindFlg = True
                Exit For
            End If
        Next I
        ' 区切り位置で区切る
        If FindFlg Then
            wkRow(j) = Mid(wkTextBuf, 1, DivPos - 1)
            wkRow(j + 1) = Mid(wkTextBuf, DivPos + 1)
        Else
            wkRow(j) = Mid(wkTextBuf, 1, argLen)
            wkRow(j + 1) = Mid(wkTextBuf, argLen + 1)
        End If
        ' 次の文字列を用意する
        wkTextBuf = wkRow(j + 1)
    Next j

    If wkRow(5) = "" Then
        argO = wkRow(1) & vbLf _
             & wkRow(2) & vbLf _
             & wkRow(3) & vbLf _
             & wkRow(4)
        DivideText4 = True
    End If
End Function

 
以下は、サンプルテスト用のドライバです。

Sub TEST()
    Dim I As String
    Dim O As String
    Dim Re As Boolean

    I = "鹿児島県 札幌市 千代田区 嵯峨二尊院門前善光寺山町 大字高津原 12−34 シティテラス大井高津原ヒルトップガーデン 777号室"
    Re = DivideText4(I, 25, O)
    Debug.Print I
    Debug.Print O
    Debug.Print "----+----1----+----2----+----3----+----4----+----5"

    I = "東京都 港区 六本木 1−6−1 泉ガーデンタワー 18階"
    Re = DivideText4(I, 25, O)
    Debug.Print I
    Debug.Print O
    Debug.Print "----+----1----+----2----+----3----+----4----+----5"
End Sub