文字列中の「長音符(ー・ー)」やカタカナの「ニ/ニ」がカタカナの一部ではないと判断される場合に、それぞれ「-(半角ハイフン)」「二(漢数字)」に変換
タイトルのマクロは、以下です。
'********************************************************
'* 関数名: 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ーB | A-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 二