🍄
VBAで文章を指定した折り返し文字数と行数に整形する
改行有りの文章を指定された行数で整形したい時
折り返し文字数はバイト数指定
Function setOrikaeshiLines(ByVal sentence, ByVal lineNumber, ByVal orikaeshiB)
Dim setCount As Integer: setCount = 0
Dim cCnt As Integer: cCnt = 0
Dim lineCount As Integer: lineCount = 0
Dim line As String: line = ""
Dim dispSentence As String: dispSentence = ""
Dim lineB As Integer: lineB = 0
Dim c1 As String
'最初の改行コードまでの文字数
cCnt = InStr(sentence, vbLf)
'改行有り、または、折り返し文字数より長い
If cCnt > 0 Or LenB(sentence) > orikaeshiB Then
'最大行数になるまでループ
Do While lineCount < lineNumber And Len(sentence) > 0
'最初の改行コードまでの文字数
cCnt = InStr(sentence, vbLf)
'改行コードがなければ文字列長を取得
If cCnt = 0 Then
cCnt = Len(sentence)
End If
'最初の改行コードまでの文字列を取得
line = Left(sentence, cCnt)
'改行コード以降の文字列をsentenceに上書き
sentence = Mid(sentence, cCnt + 1, Len(sentence))
'折り返し文字数より長い間はループ
Do While LenB(line) > orikaeshiB And lineCount < lineNumber
lineB = 0
Do While lineB < orikaeshiB And Len(line) > 0
'全半格でバイト数が異なるので、1文字ずつカウント
c1 = Left(line, 1)
line = Mid(line, 2, Len(line))
lineB = lineB + LenB(c1)
'表示用変数に格納
dispSentence = dispSentence & c1
Loop
lineCount = lineCount + 1
Loop
If LenB(line) <= orikaeshiB Then
dispSentence = dispSentence & line
line = ""
lineCount = lineCount + 1
End If
Loop
If Len(sentence) > 0 or Len(line) > 0 Then
dispSentence = dispSentence & " ...(以下省略)"
End If
Else
dispSentence = sentence
End If
setOrikaeshiLines = dispSentence
End Function
Discussion