カタカナの「ケ」(全角)または「ケ」(半角)が漢字に挟まれている場合、それを漢字の「ヶ」に変換する関数

住所データや地名を整理しているとき、「茅ケ崎」「関ケ原」のように、大きな「ケ」で入力されてしまっているデータを「茅ヶ崎」「関ヶ原」のような正しい「ヶ(小さなヶ)」に一括変換したいことはありませんか?

単純に「ケ」をすべて「ヶ」に置換してしまうと、「ケーキ」が「ヶーキ」になってしまうといった誤変換が発生します。 そこで、「前後の文字が漢字の場合だけ、ピンポイントで『ヶ』に変換する」実用的なマクロ関数(UDF)を作成しました。全角の「ケ」だけでなく、半角の「ケ」にも対応しています。

💡 このマクロでできること(変換例)

  • 茅ケ崎茅ヶ崎 (前後の「茅」「崎」が漢字なので変換する
  • 関ケ原関ヶ原 (半角の「ケ」も、前後の「関」「原」が漢字なので変換する
  • ケーキケーキ (前後の文字が漢字ではないので変換しない
  • 1ヶ月1ヶ月 (前の文字が数字なので変換しない

💻 ソースコード

以下のコードをVBAの標準モジュールに貼り付けてご使用ください。 ※この関数は、1文字が漢字かどうかを判定する「isKanji」関数が別途必要です。(記事の後半にリンクを掲載しています)

'********************************************************
'* 関数名: ConvertKeBetweenKanji
'* 概要  : カタカナの「ケ」(全角)または「ケ」(半角)が漢字に挟まれている場合、
'*         それを漢字の「ヶ」に変換する。
'*
'* 引数:
'*   text [String] - 対象の文字列
'*
'* 処理内容:
'*   - 「ケ」または「ケ」が、前後ともに漢字である場合に限り、
'*     それを「ヶ」(漢字としての小文字)に置き換える。
'*   - 上記以外の場合は変換せず、そのまま保持する。
'*
'* 注意:
'*   - この処理は「isKanji」関数の利用を前提とする。
'*     (指定した1文字が漢字であるかを判定する関数。別途実装が必要)
'********************************************************
Function ConvertKeBetweenKanji(text As String) As String
    Dim i As Long
    Dim result As String
    Dim currentChar As String
    Dim prevChar As String
    Dim nextChar As String

    result = ""

    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 isKanji(prevChar) And isKanji(nextChar) Then
                currentChar = "ヶ"
            End If
        End If

        result = result & currentChar
    Next i

    ConvertKeBetweenKanji = result
End Function

🔍 処理の仕組み

  1. 1文字ずつチェック:入力された文字列を先頭から1文字ずつ読み込みます。
  2. 前後の文字を取得:現在チェックしている文字の「1文字前(prevChar)」と「1文字後(nextChar)」の文字を特定します。
  3. 条件判定:現在の文字が「ケ」または「ケ」であり、かつ前後の文字が両方とも漢字(isKanjiがTrue)の場合のみ、「ヶ」に置き換えます。
  4. 安全設計:文字列の先頭や末尾にある「ケ」を処理する際、エラー(領域外アクセス)にならないよう、位置の判定(i > 1i < Len(text))を丁寧に行っています。

🛠️ 合わせて必要な「漢字判定関数」の例

上記マクロを動かすために必要な、1文字が漢字かどうかを判定する isKanji 関数は、以下のリンクを参照願います。Unicodeの文字コードの範囲を利用して判定します

実行例

Debug.Print ConvertKeBetweenKanji("大ケ谷")   ' → "大ヶ谷"
Debug.Print ConvertKeBetweenKanji("山ケ島")   ' → "山ヶ島"
Debug.Print ConvertKeBetweenKanji("イケメン") ' → "イケメン"(変換されない)

🔒 安心・安全宣言 本マクロには、外部へのデータ送信処理や広告表示などの不正なコードは一切含まれていません。完全ローカル環境で動作するため、社内の機密データや個人情報を含む名簿のクリーニングにも安心してご利用いただけます。

Follow me!