指定された全角換算の文字数分、文字列の先頭から切り出して返す関数

タイトルのマクロは、以下です。

'********************************************************
'* 関数名: 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漢")

IsFullWidthChar: 1文字が全角かどうかを判定する関数

Follow me!