文字列中の「長音符(ー・ー)」やカタカナの「ニ/ニ」がカタカナの一部ではないと判断される場合に、それぞれ「-(半角ハイフン)」「二(漢数字)」に変換

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

'********************************************************
'* 関数名: ConvertLongDashAndNi
'* 概要  : 長音符(ー・ー)やカタカナの「ニ(全角・半角)」が
'*         カタカナの文脈以外で使われている場合に置き換える。
'*
'* 引数:
'*   text [String] - 対象の文字列
'*
'* 処理内容:
'*   - 長音符「ー」「ー」がカタカナの前後にない場合、「-」(半角ハイフン)に変換
'*   - 「ニ」「ニ」がカタカナの前後にない場合、「二」(漢数字)に変換
'*
'* 注意:
'*   - この処理は「IsKatakana」関数の利用を前提とする
'*     (1文字がカタカナかどうかを判定する関数。別途実装が必要)
'********************************************************
Function ConvertLongDashAndNi(text As String) As String
    Dim result As String             ' 変換結果を格納する文字列
    Dim i As Long                    ' ループカウンタ
    Dim currentChar As String       ' 現在処理中の文字
    Dim prevChar As String          ' 直前の文字
    Dim nextChar As String          ' 直後の文字
    
    result = ""                      ' 初期化

    ' 文字列の1文字ずつ処理
    For i = 1 To Len(text)
        currentChar = Mid(text, i, 1)   ' 現在の文字

        ' 前の文字を取得(文字列先頭の場合は空文字)
        If i > 1 Then
            prevChar = Mid(text, i - 1, 1)
        Else
            prevChar = ""
        End If

        ' 次の文字を取得(文字列末尾の場合は空文字)
        If i < Len(text) Then
            nextChar = Mid(text, i + 1, 1)
        Else
            nextChar = ""
        End If

        ' 「長音符」(全角または半角)を処理
        If currentChar = "ー" Or currentChar = "ー" Then
            ' 前後がカタカナでなければ「-」(半角ハイフン)に変換
            If Not (IsKatakana(prevChar) Or IsKatakana(nextChar)) Then
                currentChar = "-"
            End If

        ' 「ニ」または「ニ」を処理
        ElseIf currentChar = "ニ" Or currentChar = "ニ" Then
            ' 前後がカタカナでなければ「二」(漢数字)に変換
            If Not (IsKatakana(prevChar) Or IsKatakana(nextChar)) Then
                currentChar = "二"
            End If
        End If

        ' 処理済み文字を結果に追加
        result = result & currentChar
    Next i

    ' 最終的な変換結果を返す
    ConvertLongDashAndNi = result
End Function

補足:

この関数は、たとえば以下のような変換を行います:

入力文字列変換後の文字列理由
AーBA-B「ー」の前後がカタカナでない → 半角ハイフンに変換
アーイアーイ前後がカタカナなのでそのまま
ニAニ二A二「ニ」の前後がカタカナでない → 漢数字に変換
カニサラダカニサラダ「ニ」がカタカナの一部 → 変換しない

🔧 前提:

関数 ConvertLongDashAndNi は、

  • 長音符(ー、ー)が前後にカタカナがない場合 → 半角ハイフン(-)に変換
  • 「ニ」または半角「ニ」が前後にカタカナがない場合 → 漢数字「二」に変換

✅ 実行例 1:カタカナではない前後 → 変換される

Debug.Print ConvertLongDashAndNi("AーB ニAニ")
A-B 二A二

解説:

  • → 前後が英字(非カタカナ) → - に変換
  • → 左がスペース、右が英字 → に変換
  • → 左が英字、右がスペース → に変換

✅ 実行例 2:カタカナの一部 → 変換されない

Debug.Print ConvertLongDashAndNi("カーイーカニサラダー")
カーイーカニサラダー

解説:

  • → 前後がカタカナ → そのまま
  • → 「カ」「サ」などカタカナに挟まれている → そのまま

✅ 実行例 3:混在文字列

Debug.Print ConvertLongDashAndNi("ABCニXYZ ー123 ニ")
ABC二XYZ -123 二

「IsKatakana」関数

Follow me!