F018 セル内の文字を指定された文字数で改行する関数

2019-05-19
EXCEL自作関数

 セル内の文字を指定された文字数で改行する関数です。
セル内で一行の文字数を決めたい場合、セルの幅の影響を受けてなかなか思った通りの文字数にならない事があります。
そこで、文字数を指定して改行をする関数を作りました。
VBEの標準モジュールに下のコードを登録して「Excelマクロ有効フォーム」で保存してください。
関数の登録方法は⇒♯000 ユーザー定義関数を登録する方法

登録されたら、シート上からユーザー関数「RineSplit」が使用できます。
使い方は 
ワークシート上で =RineSplit (文字列)の関数として使用できます。
【例】
 セル A1
 拝啓、日頃は弊社業務にご協力いただきありがとうございます。

 RineSplit (A1,10) → 拝啓、日頃は弊社業務
にご協力いただきあり
がとうございます。
 ※セル内で、全角10文字ずつ改行コードが入り3行になります。

Function RineSplit(S As String, R As Long)
’セル内の文字を指定された文字数で改行する関数
’ RineSplit(文字列, 一行の文字数)
’ RineSplit(“あいうえおかきくけ”,6) → あいうえお
’ かきくけ
On Error GoTo EXITFUN
Dim i1 As Long
Dim i2 As Long: i2 = 1
Dim L As Long
Dim St As Long: St = 1
Dim Lfn As Long
Dim Lfp
Dim SE As String
Dim L1 As String
Dim L2 As String
R = R * 2
SE = S
Lfn = (LenB(SE)- LenB(Replace(SE, vbLf, “”))) / 2
If Lfn > 0 Then
 ReDim Lfp(1 To Lfn)
 For i1 = 1 To LenB(SE)
  If MidB(SE, i1, 2) = vbLf Then
  If i2 = 1 Then
  Lfp(i2) = i1
  Else
   Lfp(i2) = i1- Lfp(i2- 1)
  End If

  If Lfp(i2) Mod 2 = 1 And i2 = 1 Then
   Lfp(i2) = Lfp(i2)- 1
  ElseIf Lfp(i2) Mod 2 = 1 Then
   Lfp(i2) = Lfp(i2)- 3
  End If
 i2 = i2 + 1
End If
Next
End If

SE = Replace(SE, vbLf, “”)
i2 = 1
For i = 1 To 100
If Lfn = 0 Or i2 > Lfn Then
  L1 = MidB(SE, 1, R)
ElseIf Lfp(i2) < R Then
 L1 = MidB(SE, 1, Lfp(i2))
 i2 = i2 + 1
Else
 L1 = MidB(SE, 1, R)
 Lfp(i2) = Lfp(i2)- R
End If

If LenB(L1) Mod 2 = 1 Then
 L1 = L1 & ” “
End If

SE = MidB(SE, LenB(L1) + 1)
If L2 = “” Then
 L2 = L1
Else
 L2 = L2 & vbLf & L1
End If

If Len(SE) = 0 Then
 Exit For
End If
Next

RineSplit = L2
EXITFUN:
End Function

ここで紹介したコード使用による損害に対しては一切責任は負えません。