伊田生活ブログのロゴ
HOME  >  勉強
カテゴリー : 勉強 - メモ
•VBA •LibreOffice •ChatGPT
公開日:

ローマ字氏名をひらがなに変換したい [VBA・LibreOffice]


2025-01-26

LibreOffice の VBA を使用して、ローマ字で書かれた氏名をひらがな(平仮名)に変換することを考えます。

例えば、「Ida Yoshinori」は、平仮名にすると「いだよしのり」になります。

このような処理を実行する関数が欲しいとき、生成AIが普及する前の時代、私はWebで自分でサンプルコードを探していましたが、今ではChatGPTなどの便利な生成AIがサンプルコードを書いてくれます。

ChatGPTに、以下のようなプロンプト(ChatGPTに依頼内容を伝えるメッセージ)を送ってみました。

------
VBAの、以下の関数を書いてください。
•関数名は「convToKatakana」とする。
•引数は、ローマ字で記述された氏名とする。(例:Ida Yoshinori)
#処理:
•ローマ字を平仮名に変換し、戻り値として返す。(例:Ida Yoshinori を いだよしのり に変換する。)
------

上記のプロンプトに対してChatGPTが出力したコードを、LibreOffice の Calc に貼り付けて実行してみたところ、クラッシュしてしまいました。そこで、以下のようなプロンプトを送りました。

------
以下のコードは、LibreOffice で実行するとクラッシュしてしまいます。LibreOfficeで正常に動作するように、コードを修正してください。

---コード---
------

これに対し、ChatGPTは以下のコードを出力してくれました。以下のコードはクラッシュすることなく、実行できました。

Option VBASupport 1

Sub a()
    Dim result As String
    result = convToKatakana("Ida Yoshinori")
    MsgBox result ' 結果を表示
End Sub

Option Explicit

Function convToKatakana(inputName As String) As String
    Dim romajiTable() As Variant
    Dim result As String
    Dim i As Long, j As Long
    Dim chunk As String
    Dim lowerInput As String

    ' 小文字に変換
    lowerInput = LCase(inputName)

    ' ローマ字 -> 平仮名 の対応表を配列で定義
    romajiTable = Array( _
        Array("shi", "し"), Array("chi", "ち"), Array("tsu", "つ"), _
        Array("ka", "か"), Array("ki", "き"), Array("ku", "く"), Array("ke", "け"), Array("ko", "こ"), _
        Array("sa", "さ"), Array("su", "す"), Array("se", "せ"), Array("so", "そ"), _
        Array("ta", "た"), Array("te", "て"), Array("to", "と"), _
        Array("na", "な"), Array("ni", "に"), Array("nu", "ぬ"), Array("ne", "ね"), Array("no", "の"), _
        Array("ha", "は"), Array("hi", "ひ"), Array("fu", "ふ"), Array("he", "へ"), Array("ho", "ほ"), _
        Array("ma", "ま"), Array("mi", "み"), Array("mu", "む"), Array("me", "め"), Array("mo", "も"), _
        Array("ya", "や"), Array("yu", "ゆ"), Array("yo", "よ"), _
        Array("ra", "ら"), Array("ri", "り"), Array("ru", "る"), Array("re", "れ"), Array("ro", "ろ"), _
        Array("wa", "わ"), Array("wo", "を"), _
        Array("n", "ん"), _
        Array("a", "あ"), Array("i", "い"), Array("u", "う"), Array("e", "え"), Array("o", "お") _
    )

    ' 変換処理
    result = ""
    i = 1
    Do While i <= Len(lowerInput)
        For j = LBound(romajiTable) To UBound(romajiTable)
            chunk = Mid(lowerInput, i, Len(romajiTable(j)(0)))
            If chunk = romajiTable(j)(0) Then
                result = result & romajiTable(j)(1)
                i = i + Len(romajiTable(j)(0)) - 1
                Exit For
            End If
        Next j
        i = i + 1
    Loop

    ' 結果を返す
    convToKatakana = result
End Function

しかし、「Ida Yoshinori」という文字列が、下図のように「いあよしのり」となってしまいます。そのため、完成させるにはまだ修正が必要となります。

img_1

このようなとき、「『Ida Yoshinori』が『いあよしのり』になってしまいます。『いだよしのり』と正しく表示されるように修正してください。」などというプロンプトを送れば、修正してくれるでしょう。それでも、修正後のコードも完ぺきではない可能性が高いので、コードの動作については自分でテストケースを作るなどして検証する必要がありそうです。(テストケースを生成AIに作らせるというのも、いいかもしれません。)

#まとめ

ローマ字の氏名を平仮名に変換するVBAの関数を、ChatGPTに書いてもらいました。書いてもらった関数は「Ida Yoshinori」が「いあよしのり」となってしまうので、修正が必要です。それでも、ChatGPTがコードの原形を作ってくれるので、自分でコードを入力する手間が省けます。プログラミングにおいて、ChatGPTなどの生成AIは、便利なツールです。