指定された全角換算の文字数分、文字列の先頭から切り出して返す関数
タイトルのマクロは、以下です。
'********************************************************
'* 関数名: GetFullWidthChars
'* 概要 : 指定された全角換算の文字数分、文字列の先頭から切り出して返す関数
'*
'* 引数:
'* inputString [String] - 処理対象の文字列(全角/半角混在可)
'* charCount [Long] - 全角換算で何文字分切り出すかの指定値
'*
'* 戻り値:
'* [String] - 全角文字を1文字、半角文字を0.5文字としてカウントし、
'* 指定された全角換算文字数分だけ先頭から切り出した文字列
'*
'* 使用される補助関数:
'* - IsFullWidthChar: 1文字が全角かどうかを判定する関数
'*
'* 背景:
'* - 日本語テキストでは、全角(例:漢字、ひらがな、カタカナ、全角英数字)と
'* 半角(例:半角英数字、記号など)の文字幅の違いにより、
'* 単純な文字数での処理が見た目上の長さに一致しない場合がある。
'* - この関数は見た目の「幅」を考慮したテキスト処理に有効。
'********************************************************
Function GetFullWidthChars(ByVal inputString As String, ByVal charCount As Long) As String
Dim result As String ' 出力する結果文字列
Dim totalWidth As Double ' 全角換算の累積文字幅(半角は0.5、全角は1.0)
Dim i As Long ' 文字位置インデックス
Dim char As String ' 文字を一時的に格納する変数
totalWidth = 0 ' 初期化:全角換算の長さ
result = "" ' 初期化:出力用の文字列
' 入力文字列を1文字ずつチェック
For i = 1 To Len(inputString)
' i番目の文字を取得
char = Mid(inputString, i, 1)
' 全角なら+1、半角なら+0.5としてカウント
If IsFullWidthChar(char) Then
totalWidth = totalWidth + 1
Else
totalWidth = totalWidth + 0.5
End If
' 全角換算文字数を超えた場合はそれ以上追加しない
If totalWidth > charCount Then
Exit For
End If
' 結果文字列に現在の文字を追加
result = result & char
Next i
' 完成した結果文字列を返す
GetFullWidthChars = result
End Function
✅ 使用例
' 例: 全角換算で 5文字分取り出す
Debug.Print GetFullWidthChars("アイウエオabc漢字カタカナ", 5)
' → 全角換算で5文字分だけ取り出された結果が返る("アイウエオabc漢")