プロが教えるわが家の防犯対策術!

A列に名前、B列にPHONETICで取り出したヨミがあります。
C列にBをアルファベット化したものを反映する関数はありますか?

(A)山田 花子→(B)ヤマダ ハナコ→(C)YAMADA HANAKO
としたいのです。
欲を言えば、「佐藤陽子」さんはSATOU YOUKOではなく、
SATO YOKOになると最高なんですが・・・。

よろしくお願いします。

A 回答 (11件中1~10件)

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
    • good
    • 3
この回答へのお礼

Wendy02様

すごい~~。出来てます~~。
ありがとうございます。これで作業効率がググッと上がります。

で、厚かましくももう1点お聞きしたいのですが、
スペースを反映させるにはどうしたら良いでしょうか?
「" "」を14行目・27行目の最後に付け足すのかな、と思ったのですが
「コンパイルエラー」と出てしまいます。

お礼日時:2005/06/23 12:33

一応、VBAコードでは、文字の中間にある空白を反映させるようには作ってあります。



解説:

27行目  ,ヴ,ー,-, , "

14行目  ,*,^,^, , "

変換前  変換後
27行目, 14行目
ヴ  ;  * 
ー  ; ^
-  ; ^
□  ; " "  (□は、全角空白, " " は、半角空白)
" "  ; " "  (" " は、半角)←ここの変換は、論理的にはありえない。

[" " のクォーテーションマークは便宜的に書いているだけです。]

VBAコードの最初の所あたりで、
 myString = StrConv(myString, vbWide)
となっていて、
半角スペースも、全角スペースも、すべて全角スペースに換え、それも、上記の部分で変換対象にしています。

それでスペースが反映しないとなると、全面的な見直しになりますが、こちらでは、今、再現できていません。
    • good
    • 1
この回答へのお礼

Wendy02様

出来ました!
(すみません、最初にやった時は私の貼り付け方が間違っていたようです)

最初に質問したときは、まさかこんなに回答者さまのお手を煩わせるとは思っておらず、
ド素人のわがままにお付き合い下さいまして、感謝しております。
これからもよろしく…というのは流石に厚かましすぎるので、
私もVBAの勉強をしようかと思います。

本当にありがとうございました。

お礼日時:2005/06/23 15:26

ricky223 さん、こんばんは。



私は、1つのものにこだわると、だいたい、1年以上、作り直しをしつづけますが、ここでは、そうもできませんので、ある一定の基準になったら公開します。だから、ここで発表するのものは、限定した仕様のものになる可能性が強いです。

ここのサイトは、私の個人用のいわゆる電子空間(HPやオンライン・ブリーフケース)を紹介することが禁止されていますから、あくまでも、ここで発表するコードに限られますが、いずれ完成版は、人知れず、どこかで出します。

Koizumi Jun'ichiro^
ということで、

今、角川の『国語辞典』の漢字の読みを見ていて、予想しました。それは、旅行業界が出しているようなヘボン式ではなくて、ヘボン式の変換テーブルを使った発音優先方式なのですね。だいたい分かりました。

例:

たろう→taro^ , おおの→o^no, とおやま→to^yama
おかあさん→oka^san, おねいさん→one^san

ふううんじ→fu^unji

となるわけですね。
最初のご質問の中の、

さとう ようこ→sato^ yoko^

となるのかな?
ちょっと確認してみてください。

この回答への補足

Wendy02様、こんにちは。

今、過去のデータを漁っている最中なのですが、
さとう ようこ→sato^ yo^ko のようです。
(作業者によって分かれていたりもするんですが…)

促音(小さい"っ")は、次の最小の文字を重ねます。
 ニッポン → Nippon
ただし、次の文字が「ch」(cha, chu, cho)の場合は「t」で表します。
 マッチ → Matchi
また、なぜか例外的に「イノウエ」さんは Ino^e としています。

補足日時:2005/06/21 12:47
    • good
    • 0

hiroyukitankさん、ricky223さん



私のつたない書き込みに、関心もっていただいて、どうもありがとうございます。

hiroyukitankさんの
>私もヘボン式に対応させようと思って一時研究していたのですが,自分に必要なかったので途中で止めてしまいました(汗)。

ヘボン式を調べてみてて、途中で投げ出したくなる部分がいくつかありますね。

>もう一つハードルVBAに足を踏み入れてみられてはいかがでしょうか

私の場合、仕事はEXCELもVBAも必要はありませんが、プログラムもまったく知らないで、本だけですが、2年半程度で、VBAは、そこそこには使えるようになりました。

今回、昨日から、ずっと、ヘボン式の資料をインターネットで探しているのですが、基準書になるものが見当たりません。(図書館で調べないといけないようです。もう少し時間が必要です。)

https://www.nta.co.jp/kaigai/hebon.htm
日本旅行社のヘボン式の記述(パスポートに書くためのもの)

[日本語(仮名書き)のローマ字表記]には、「ISO 3602 1989-09-01」

http://www.age.ne.jp/x/nrs/iso3602/index.html
「ISO 3602 1989-09-01」

というものがありますが、これは、日本国内で通用しているローマ字とは違うようです。評価のしようがありません。

EXCELのフリーソフトウェアとして、

http://www2s.biglobe.ne.jp/~iryo/2vba/s2vba15.html
KIroumazi(ロ-マ字変換)ver0.7

にヘボン式がありましたので、試してみましたが、なぜへボン式と謳っているのか、疑問に思いました。

ヘボン式は、下の変換の上がりをみていただければ分かりますが、必ずしも、「OO」が二つ続いても、長音として省略できるものではないようです。

ヘボン式は今、旅行業で使われ、間違えれば、出入国審査の際に止められるなんていうこともあるそうですから、「ヘボン式」と銘打つ時は、そうそう自分勝手にはできそうにもありません。

現在までの、私のコードによる変換例ですが、たぶん、80%~90%は目標に達成しているような気がしていますが、完成はしていません。basp21 など、外部ツールを使うと少しは楽なのですが、一般向けですから、正規表現自体も使用するのをやめました。なお、文字処理系のVBAは必ず、Wordも視野に入れるというのが、私の条件です。

'------------------------------------------
やまだ ようこ     yamada yoko
おおやま        oyma
ほのう         hono
ほのお         honoo
いのう ただたか    ino tadataka
とおやま きんしろう  toyama kinshiro
くち はっちょう     kuchi hatcho
せのう         seno
なんば         namba
ほんま         homma
さんぺい        sampei
きっかわ        kikkawa
ひがしごおり      higashigori

※基準例外:
(「'」を入れて対処します)
[比較]
こうし(格子)     koshi
こ'うし(子牛)    koushi

※基準例外2: 純粋のヘボン式には、「^」の表記がない。
ノーリツ       no^ritsu ×

※ヴは、変換させない。
ヴァイオリン      *xaiorin

●まだ改正されていない点(基準書がないと分からない)
(現在の変換例)
おかあさん      okaasan ?
くうき        kuuki  ?
'--------------------------------------

この回答への補足

こんばんは。

本日会社で確認しようと思ったのですが、なんと社内にマニュアルらしき物が存在しないことが発覚してしまいました…。あわわわ…。
先輩に聞いてもお局様に聞いても、皆「普通にヘボン式でいいんだよ」と言うばかりで、きちんと研修(?)を受けた人は居ないようです。私もですが。

で、これまでに入力されているデータを見ますと、
(1) b, p, m の前に来る「n」は「m」に変換 ←これはWendy02様も採用されていますね
(2) 母音(a,i,u,e,o)とナ行(nから始まる)の前に来る「n」は直前に「'」を付ける
という規則は存在するようです(あくまで社内で)。
ですので「小泉純一郎」→ Koizumi Jun'ichiro^ となります。
また「風雲児(フウウンジ)」のように母音が3つ続く場合は、 fu^unji と2番目が長音記号で処理されていたようです(と、先輩が言っていました)。

さて先に書きましたように、現在我が社の無秩序っぷりが白日の下に晒されたため、
マニュアル作成の問題が持ち上がってしまいました。
Wendy02様, hiroyukitank様のおっしゃる通り、ヘボン式の規則には王道と呼べるものがないようですね。
訓令式の方が理に適ってる、という主張のサイトまであって…。

Wendy02様の目指される完璧な変換ツールは私も見てみたいので、もうしばらく質問を続けてもよろしいでしょうか?
(だんだん質問の趣旨とズレてきたかな)

補足日時:2005/06/20 21:18
    • good
    • 0

Wendy02さんからコメントいただけるなんて夢のようです。


的確迅速な回答,高度なテクニックなど,尊敬している一人としてうれしいです。

Wendy02さんが言われるように,ローマ字にはいろいろな流儀があってそれらに全て対応しようとすると相当難しいと思います。
私もヘボン式に対応させようと思って一時研究していたのですが,自分に必要なかったので途中で止めてしまいました(汗)。
こだわりの回答すごく期待しています。

>じ → ji , ち → chi , つ → tsu , ふ → fu , しゃ しゅ しょ → sha shu sho , ちゃ ちゅ ちょ → cha chu cho
ricky223さん,これらについては,私の場合エクセルのセルでカスタマイズするような考えをしています。
ヘボン式等のルール以外にも個人の好みなどもあるのでユーザーが変えられたらいいなと思っています。

>かく言う私も記録とその実行くらいしかやったことないんですが f^_^;
ということですが,このくらいできれば,もう一つハードルを越えてVBAに足を踏み入れてみられてはいかがでしょうか。
Wendy02さんから回答をいただいたことをきっかけに大きく羽ばたけるかもしれません。(よけいなお世話でしたらすみません。お許しください。)
    • good
    • 0

#5のhiroyukitankさんへ



どうもありがとうございます。
ご紹介になった二点は、両方ともみてみました。

私の場合は、この両方の考え方とも違いますが、もし、ご質問者の方が、それらで満足されるなら、大変申し訳ありませんが、それでもよいのではないかと思います。まだまだ、私のは、途中段階ですから。私は、この手のものは、すごくこだわりがあるので、なるべく完璧にしたいと思っていますが、それには、まだ日数が必要です。以前、ローマ字の由来とか、JISを始め、外務省式とか国鉄式とか、ヘボン式とか、仕様書を読んだことがありますが、現実に流通しているものには、統一規格はなかったような気がします。

それから、
http://park11.wakwak.com/~miko/Excel_Note/15-03_ …
この特徴は、Vlookup関数を使っているのですね。

この中のコードで、
Cnv1(11, 2) = "o"""

となっているのは、

Cnv1(11, 2) = "o"

と直したほうがよいようです。
私の場合は、Office VBAとして視野に入れているので、若干、その点が違ってきます。

それと、現在の私の

Kana2Roman関数とひらカナローマくんと変換比較すると、

私のは、
 あいうえお      aiueo
 しゅっちょうしょ   shucchousho
 バレーボール     bare-bo-ru
 ヴァイオリン     vaiorinn
 サッカー       sakka-

という変換をします。
    • good
    • 0

No.2です。



>インストールは禁止されていますが、マクロは、「禁止」と言われたことはないです。

「ひらカナローマくん」はただのエクセルファイルですからインストールという概念はありません。マクロでローマ字の変換をしています。

マクロでしたら↓このようなサイトを見つけました。
http://park11.wakwak.com/~miko/Excel_Note/15-03_ …

Wendy02さんの回答楽しみにしています。

この回答への補足

>「ひらカナローマくん」はただのエクセルファイル
あ、そうだったんですか。
じゃあ、いいかな(…いいのかな…?)
迷います(笑)

ご紹介いただいたサイト、目が回りそうです…。(すみません、アホで)
Wendy02様といい、hiroyukitank様といい、世の中には難しい事を考えられる人がいるんですね…。

補足日時:2005/06/18 16:35
    • good
    • 0

こんばんは。



もうだめかと思っていたので、もう、しばらく、少し時間の余裕をください。
一応、できてはいたものの、最初のご質問にある、例えば、YOUKO をYOKO というように、二重母音を1つの母音に変更する以外にも、いくつか決められないものがあります。

現在出来上がっているのは、

ライオンキング  raionnkinngu /raionkingu
セッション    sesshonn  /sesyon
ローマじ     ro-maji  /roomaji
たいしょうじだい taishoujidai /taishozidai
れんしゅう    rennshuu  /renshu

現在は、左側の変換がなされます。

長音の問題など、かなり迷うところなのです。また、「ん」は、「nn」なのか、「n」なのか、という問題。「じ」は、「ji」なのか、「zi」なのか等々。

こういう仕様の問題がいくつも出てきてしまっています。
あまり、こちら側で一方的に作ったものを渡しても不満が残るだろうと思います。アドバイスがありましたら、お願いします。マクロの規模としては、比較的小さなものです。

この回答への補足

基本的にはヘボン式ですので、
じ → ji , ち → chi , つ → tsu , ふ → fu , しゃ しゅ しょ → sha shu sho , ちゃ ちゅ ちょ → cha chu cho
などとなります。
「ん」は「n」一文字です。
また、長音記号は「^」で表しています。
(ローマじ → ro^maji となります)

ただ、長音の処理については、私も確信が持てなくて…。
(リチャードは間違いなく Richa^do ですが、小泉純一郎は Koizumi Junichiro^ だったかも…
とすると、佐藤陽子は Sato^ Yo^ko !??)

月曜、会社でマニュアルを確認してから回答させていただいてよろしいでしょうか?
色々お手間をかけさせてしまって、申し訳ありません。

補足日時:2005/06/18 16:28
    • good
    • 0

他のソフト・インストール禁止で、マクロ禁止令が出ているなら、不可能だと思います。

Roman2Kana(ローマ字→かな)マクロを作ったことがあるので、逆もできると思いますが、無駄になるといけないので、一応、確認まで。

この回答への補足

遅くなってすみません。

インストールは禁止されていますが、
マクロは、「禁止」と言われたことはないです。
というより、上の人(禁止令を出した人)はマクロの存在をあまり知らないのでは…
と思います。

かく言う私も記録とその実行くらいしかやったことないんですが f^_^;

補足日時:2005/06/17 21:27
    • good
    • 0

フリーソフトなら「ひらカナローマくん 」はいかがでしょうか。



参考URL:http://www.vector.co.jp/soft/win95/util/se253829 …
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
No.1の方へのお礼にも書いたのですが、フリーソフトは使えないのです。
せっかく教えていただいたのに、申し訳ありません。

お礼日時:2005/06/16 15:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています