ローマ字氏名をひらがなに変換したい [VBA・LibreOffice]
LibreOffice の VBA を使用して、ローマ字で書かれた氏名をひらがな(平仮名)に変換することを考えます。
例えば、「Ida Yoshinori」は、平仮名にすると「いだよしのり」になります。
このような処理を実行する関数が欲しいとき、生成AIが普及する前の時代、私はWebで自分でサンプルコードを探していましたが、今ではChatGPTなどの便利な生成AIがサンプルコードを書いてくれます。
ChatGPTに、以下のようなプロンプト(ChatGPTに依頼内容を伝えるメッセージ)を送ってみました。
VBAの、以下の関数を書いてください。
•関数名は「convToKatakana」とする。
•引数は、ローマ字で記述された氏名とする。(例:Ida Yoshinori)
#処理:
•ローマ字を平仮名に変換し、戻り値として返す。(例:Ida Yoshinori を いだよしのり に変換する。)
------
上記のプロンプトに対してChatGPTが出力したコードを、LibreOffice の Calc に貼り付けて実行してみたところ、クラッシュしてしまいました。そこで、以下のようなプロンプトを送りました。
以下のコードは、LibreOffice で実行するとクラッシュしてしまいます。LibreOfficeで正常に動作するように、コードを修正してください。
---コード---
------
これに対し、ChatGPTは以下のコードを出力してくれました。以下のコードはクラッシュすることなく、実行できました。
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」という文字列が、下図のように「いあよしのり」となってしまいます。そのため、完成させるにはまだ修正が必要となります。

このようなとき、「『Ida Yoshinori』が『いあよしのり』になってしまいます。『いだよしのり』と正しく表示されるように修正してください。」などというプロンプトを送れば、修正してくれるでしょう。それでも、修正後のコードも完ぺきではない可能性が高いので、コードの動作については自分でテストケースを作るなどして検証する必要がありそうです。(テストケースを生成AIに作らせるというのも、いいかもしれません。)
#まとめローマ字の氏名を平仮名に変換するVBAの関数を、ChatGPTに書いてもらいました。書いてもらった関数は「Ida Yoshinori」が「いあよしのり」となってしまうので、修正が必要です。それでも、ChatGPTがコードの原形を作ってくれるので、自分でコードを入力する手間が省けます。プログラミングにおいて、ChatGPTなどの生成AIは、便利なツールです。