半角カタカナをヘボン式ローマ字に変換するプログラム。 ルールは下記を参考にした。全部は実装していない。(手抜き) http://www.n-hirata-office.com/cgi-bin/n-hirata/siteup.cgi?category=1&page=3 Function romaji(kana) Dim k As String Dim n As Integer x = "" p = 1 lens = Len(kana) While (p <= lens) k = Mid(kana, p, 3) x = x + romaji1(k, n) p = p + n Wend p = InStr(x, "ッ") If (p > 0) Then Mid(x, p, 1) = Mid(x, p + 1, 1) End If p = InStr(x, "OO") While (p > 0) x = Left(x, p) + Mid(x, p + 2) p = InStr(x, "OO") Wend p = InStr(x, "OU") While (p > 0) x = Left(x, p) + Mid(x, p + 2) p = InStr(x, "OU") Wend p = InStr(x, "UU") While (p > 0) x = Left(x, p) + Mid(x, p + 2) p = InStr(x, "UU") Wend romaji = x End Function Function romaji1(kana As String, kanalen As Integer) As String Dim p As Integer kana3 = "ギャギュギョジャジュジョビャビュビョピャピュピョ" roma3 = "GYAGYUGYOJA JU JO BYABYUBYOPYAPYUPYO" p = InStr(kana3, kana) If (Len(kana) = 3) And (p > 0) Then romaji1 = Mid(roma3, p, 3) romaji1 = Trim(romaji1) kanalen = 3 Exit Function End If kana2 = "ガギグゲゴザジズゼゾダヂズデドバビブベボパピプペポ" roma2 = "GAGIGUGEGOZAJIZUZEZODAJIZUDEDOBABIBUBEBOPAPIPUPEPO" s = Left(kana, 2) p = InStr(kana2, s) If (Len(s) = 2) And (p > 0) Then romaji1 = Trim(Mid(roma2, p, 2)) kanalen = 2 Exit Function End If kana4 = "キャキュキョシャシュショチャチュチョニャニュニョヒャヒュヒョミャミュミョリャリュリョ" roma4 = "KYAKYUKYOSHASHUSHOCHACHUCHONYANYUNYOHYAHYUHYOMYAMYUMYORYARYURYO" p = InStr(kana4, Left(kana, 2)) If (Len(kana) = 2) And (p > 0) Then p = (p - 1) / 2 * 3 + 1 romaji1 = Trim(Mid(roma4, p, 3)) kanalen = 2 Exit Function End If kana5 = "アイウエオカキクケコサスセソタテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン" roma5 = "A I U E O KAKIKUKEKOSASUSESOTATETONANINUNENOHAHIFUHEHOMAMIMUMEMO" + _ "YAYUYORARIRUREROWAO N " p = InStr(kana5, Left(kana, 1)) If (p > 0) Then p = (p * 2 - 1) romaji1 = Trim(Mid(roma5, p, 2)) kanalen = 1 Exit Function End If kana6 = "シチツ" roma6 = "SHICHITSU" p = InStr(kana6, Left(kana, 1)) If (p > 0) Then p = (p - 1) * 3 + 1 romaji1 = Trim(Mid(roma6, p, 3)) kanalen = 1 Exit Function End If romaji1 = Left(kana, 1) kanalen = 1 End Function