ricky223 さん、こんばんは。
#さとう ようこ→sato^ yoko^
これは、私の記述間違いです。
>なぜか例外的に「イノウエ」さんは Ino^e としています。
たぶん、間違いから生じたものだと思います。
inoueにするためには、私のマクロでも、「いの'うえ」にしないと、inoueになりません。
ともかく、そろそろそ公開します。これは、付けたしの上に、オフィシャルなヘボン式とは違うものだということで、私自身としては、このマクロの扱いは、ここだけのものにすることにしました。
ここに公開した以上は、特に著作権を主張はできないけれども、まさか、こんなつぎはぎだらけのみっともないコードでは、私が作りましたとも言えないでしょう。(^^;
ユーザー定義関数と、マクロとに分けました。なるべく、<標準モジュール>に登録してください。RomajiHenkan マクロから使えば、右となりにローマ字が出力されます。一部は漢字も変換するはずです。ユーザー定義関数のままですと、さすがに重いです。
HTML上に出す関係で、半角空白のずれが生じる可能性があります。
最後の部分は、
*,^,^, , "
*,^,^,半角空白, 半角空白"
です。
'------------------------------------------------------------------
Option Explicit
Private Const Roman As String = _
"kyu,kyo,shu,sho,chu,cho,hyu,hyo,pyu,pyo,byu,byo,myu,myo,ryu,ryo," & _
"gyu,gyo,ju,jo,ju,jo,nyu,nyo,kori,gori,tori,dori, " & _
"kya,gya,sha,ja,cha,ja,nya,hya,bya,pya,mya,rya," & _
"kyu,gyu,shu,ju,chu,ju,nyu,hyu,byu,pyu,myu,ryu," & _
"kyo,gyo,sho,jo,cho,jo,nyo,hyo,byo,pyo,myo,ryo," & _
"fa,fi,fe,fo,kye,gye,she,je,pye,bye,mye,rye,dhi," & _
"o^,ko^,go^,so^,zo^,to^,do^,no^,ho^,po^,bo^,mo^,yo^,ro^," & _
"a,ka,ga,sa,za,ta,da,na,ha,pa,ba,ma,ya,ra,wa,xya,xa,n'," & _
"i,ki,gi,shi,ji,chi,ji,ni,hi,pi,bi,mi,wi,ri,xi,xyu,xo," & _
"u,ku,gu,su,zu,tsu,zu,nu,fu,pu,bu,mu,yu,ru,xu,xyo," & _
"e,ke,ge,se,ze,te,de,ne,he,pe,be,me,we,re,xe," & _
"o,ko,go,so,zo,to,do,no,ho,po,bo,mo,yo,ro,o,*,^,^, , "
Private Const Kana As String = _
"きゅう,きょう,しゅう,しょう,ちゅう,ちょう,ひゅう,ひょう,ぴゅう,ぴょう,びゅう,びょう,みゅう,みょう,りゅう,りょう," & _
"ぎゅう,ぎょう,じゅう,じょう,ぢゅう,ぢょう,にゅう,にょう,こおり,ごおり,とおり,どおり," & _
"きゃ,ぎゃ,しゃ,じゃ,ちゃ,ぢゃ,にゃ,ひゃ,びゃ,ぴゃ,みゃ,りゃ," & _
"きゅ,ぎゅ,しゅ,じゅ,ちゅ,ぢゅ,にゅ,ひゅ,びゅ,ぴゅ,みゅ,りゅ," & _
"きょ,ぎょ,しょ,じょ,ちょ,ぢょ,にょ,ひょ,びょ,ぴょ,みょ,りょ," & _
"ふぁ,ふぃ,ふぇ,ふぉ,きぇ,ぎぇ,しぇ,じぇ,ぴぇ,びぇ,みぇ,りぇ,でぃ," & _
"おう,こう,ごう,そう,ぞう,とう,どう,のう,ほう,ぽう,ぼう,もう,よう,ろう," & _
"あ,か,が,さ,ざ,た,だ,な,は,ぱ,ば,ま,や,ら,わ,ゃ,ぁ,ん," & _
"い,き,ぎ,し,じ,ち,ぢ,に,ひ,ぴ,び,み,ゐ,り,ぃ,ゅ,ぉ," & _
"う,く,ぐ,す,ず,つ,づ,ぬ,ふ,ぷ,ぶ,む,ゆ,る,ぅ,ょ," & _
"え,け,げ,せ,ぜ,て,で,ね,へ,ぺ,べ,め,ゑ,れ,ぇ," & _
"お,こ,ご,そ,ぞ,と,ど,の,ほ,ぽ,ぼ,も,よ,ろ,を,ヴ,ー,-, , "
Function HKana2Roman(ByVal myString As String)
Dim RomanArray As Variant
Dim KanaArray As Variant
Dim rtn As Variant
Dim KitsuOnFlg As Boolean
Dim nn As Variant, mm As Variant
Dim i As Long, c As Variant
Dim buf As String, ltr As String, mylocate As Integer
RomanArray = Split(Roman, ",")
KanaArray = Split(Kana, ",")
myString = StrConv(myString, vbWide)
myString = StrConv(myString, vbHiragana)
For i = 1 To Len(myString)
ltr = Mid$(myString, i, 3)
rtn = Application.Match(ltr, KanaArray, 0)
If Not IsError(rtn) Then
If KitsuOnFlg Then
buf = buf & Mid$(RomanArray(rtn - 1), 1, 1) & RomanArray(rtn _
- 1)
'促音ccの訂正
If InStr(buf, "cc") > 0 Then
buf = Replace$(buf, "cc", "tc")
End If
KitsuOnFlg = False
Else
buf = buf & RomanArray(rtn - 1)
End If
i = i + 2
Else
ltr = Mid$(myString, i, 2)
If ltr Like "っ?" Then
KitsuOnFlg = True
Else
rtn = Application.Match(ltr, KanaArray, 0)
If Not IsError(rtn) Then
If KitsuOnFlg Then
buf = buf & Mid$(RomanArray(rtn - 1), 1, 1) & RomanArray(rtn _
- 1)
'促音ccの訂正
If InStr(buf, "cc") > 0 Then
buf = Replace$(buf, "cc", "tc")
End If
KitsuOnFlg = False
Else
buf = buf & RomanArray(rtn - 1)
End If
If i + 1 = Len(myString) Then Exit For
i = i + 1
Else
ltr = Mid$(myString, i, 1)
rtn = Application.Match(ltr, KanaArray, 0)
If Not IsError(rtn) Then
If KitsuOnFlg Then
buf = buf & Mid$(RomanArray(rtn - 1), 1, 1) & _
RomanArray(rtn - 1)
KitsuOnFlg = False
Else
buf = buf & RomanArray(rtn - 1)
End If
End If
End If
End If
End If
Next i
'んのチェック1
Do
If InStr(buf, "'") > 0 Then
mylocate = InStr(mylocate + 1, buf, "'")
If Mid(buf, mylocate + 1, 1) Like "[kstnhmyrwcfgzjdbp]" Then
buf = Replace(buf, "'", "", 1, 1)
End If
If Mid(buf, mylocate + 1, 1) = "" Or Mid(buf, mylocate + 1, 1) = " " Then
buf = Replace(buf, "'", "", 1, 1)
Exit Do
End If
End If
Loop Until InStr(mylocate + 1, buf, "'") = 0
'んのチェック2
nn = Array("nb", "nm", "np")
mm = Array("mb", "mm", "mp")
For i = LBound(nn) To UBound(mm)
If InStr(buf, nn(i)) > 0 Then
buf = Replace(buf, nn(i), mm(i))
End If
Next i
'母音の例外長音
For Each c In Array("a", "i", "u", "e", "o")
If buf Like "*" & c & c & "?*" Then
buf = Replace(buf, c & c, c & "^", 1)
End If
Next c
HKana2Roman = buf
End Function
'----------------------------------------------------------
Sub RomajiHenkan()
Dim rng As Range
Dim c As Object
Dim buf As String
Dim myPhone As String
Set rng = Selection 'マウスで文字を選択
For Each c In rng
myPhone = WorksheetFunction.Phonetic(c)
If myPhone Like "[ぁ-ン]+" Then
c.Offset(, 1).Value = HKana2Roman(myPhone)
Else
myPhone = Application.GetPhonetic(myPhone)
c.Offset(, 1).Value = HKana2Roman(myPhone)
End If
Next
End Sub
お礼
Wendy02様 すごい~~。出来てます~~。 ありがとうございます。これで作業効率がググッと上がります。 で、厚かましくももう1点お聞きしたいのですが、 スペースを反映させるにはどうしたら良いでしょうか? 「" "」を14行目・27行目の最後に付け足すのかな、と思ったのですが 「コンパイルエラー」と出てしまいます。