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