- ベストアンサー
エクセルVBAでテキストの漢字の読みを入手するには?
テキストファイルを読み込むエクセルVBAを作りました。 テキストデータ内の漢字をカタカナに変換したいのですが どのようなVBAにしたら良いのでしょうか? セルに入力された漢字の読みを入手する方法は分かっていますが、 テキストの漢字から入手する方法が分かりません。 よろしくお願いもうしあげます。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>テキストファイルを読み込む なので、読み込んだデータの Phonetic.Text は登録されていません。 ActiveCellに「佐藤」という漢字があるとき Msgbox Activecell.Phonetic.Text で確認すると、「佐藤」がそのまま表示されると思います。 漢字からフリガナを取得するには、以下のようにします。 Msgbox Application.GetPhonetic(Activecell.Value) すると「サトウ」が取得できます。 ただしGetPhonetic関数で取得できるよみがなは、必ずしも正しいとは限りません。それぞれの漢字の一般的なよみがなを使用するからです。 その点はご承知置きください
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 以下は、単なるお遊びマクロです。 作ってみてわかるのは、やはり、本来、正規表現置換を利用し、文章を分解しなくてはならいのですが、前回書いたように、VBAの領分ではなさそうな気がしてきますね。変換されたものは、全部、全角になってしまいます。 なお、GetPhonetic は、単語の変換ではなく、文章の変換をさせることで、ヒット率は上がります。それは、GetPhonetic 自体に文節の構造を把握する機能があると聞きます。 Sub ConvertKatakana() Dim Fname Dim FNo As Integer Dim TextLine As String Dim Buf As Variant Dim BufLine As Variant Dim Fso As Object Dim f As Object Dim mPath As String Fname = Application.GetOpenFilename("Text ファイル(*.txt),*.txt") If Fname = "False" Then Exit Sub End If FNo = FreeFile() Open Fname For Input As #FNo Do Until EOF(FNo) Line Input #FNo, TextLine If Len(TextLine) > 0 Then Buf = ConvertTxt(TextLine) End If BufLine = BufLine & Buf & vbCrLf Buf = "" Loop Close #FNo Set Fso = CreateObject("Scripting.FileSystemObject") mPath = Mid(Fname, 1, InStrRev(Fname, "\")) Fname = Mid(Fname, InStrRev(Fname, "\") + 1) '出力名は、ファイル名の前に、'h' を付ける '同名ファイルは削除 If Dir(mPath & "h_" & Fname) <> "" Then Kill mPath & "h_" & Fname End If Set f = Fso.CreateTextFile(mPath & "h_" & Fname, 2, True) f.Writeline (BufLine) f.Close Set Fso = Nothing End Sub Function ConvertTxt(strTxt As Variant) Dim v As Variant v = Application.GetPhonetic(strTxt) 'v = StrConv(v, vbHiragana) 'ひらがなの場合 ConvertTxt = v End Function
お礼
回答ありがとうございます。 このままで問題なく使えます。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >漢字から自動的にカナに変換したいのです。 ご質問には、最終的な目的が書かれていませんので、ご自身の技術の向上なら、zap35さんの提供されたコードを応用していけばよいと思います。しかし、業務や仕事の話としては、ご質問のカテゴリが違うような気がします。 VBAとおっしゃっていますが、とても、VBAごときでは太刀打ちできない世界だと思います。漢字かな混じり文をひらがな変換にするプログラムは、視覚障害者用の点字タイプに使用するものや、ローマ字変換プログラムなどに応用されていますが、最近では、インターネット検索にも応用されています。そのまま、ひらがなに変換したところで、それでは、読めたものではないからです。 VBA/VBでできないとは言っていませんが、本格的なものと比較すると、単なる真似事になってしまいます。理由は、MS-IMEの機能をAPIで抜き出しているからで、修正機能も分かち書き機能もないからです。 専門的に行うには、有名なのは、Unix 系(Win可能)KAKASI(kanji kana simple inverter) とか、いうものがあります。やる気になれば、可能だと思いますが、大きなプログラムなど入れなくてはならないとかなると、ちょっと面倒かなって思います。 http://kakasi.namazu.org/ 応用したものに、ひらがなゲートウェアというものもあります。 http://www.hiragana-gateway.com/ それと、私の記憶では、障害者用のシステムでは、富士通が専門だったと思います。
お礼
そういうものが使える環境ならば使っています。 職場で使うのですが、業務で使うには違いませんが、一般業務用というよりは自分の仕事の効率化に使います。 職場のセキュリティ上の理由により、新たなソフトのインストールは禁止されています。 USB、CD、FDDなどの媒体の接続およびインターネット接続も禁止されています。 Officeソフト、エディター、メインフレーム端末ソフト、ロータスノーツが使えるだけです。 メインフレームの言語は自由に使えますが、PCで使用が許されているプログラム言語はVBAだけです。 本来VBAでやることではないかも知れませんが、これしか選択肢がありません。 今回の漢字からの変換、100パーセントの正確性は求めていません。 違っている部分はあとでマニュアルで修正するつもりです。
- zap35
- ベストアンサー率44% (1383/3079)
#01です >漢字から自動的にカナに変換したいのです。 ならばGetPhonetic関数で取得したよみがなを、どこかのセルに書き込めば良いだけではありませんか? #02の回答にも類似サンプルは書きましたよ(^^; テキストを読み込むVBAがお書きになれるレベルの方のようですから、どこが分からないのでしょうね? 補足回答が全く補足になっていません 例えばA列にテキストを読み込んだ文字列があるとき、B列にふりがなを表示させるならこんなマクロでもできます。シートの構成が分かりませんので後はご自身で工夫してください。 Sub Macro1() Dim r As Range For Each r In Range(Range("A1"), Range("A65536").End(xlUp)) r.Offset(0, 1).Value = Application.GetPhonetic(r.Value) Next r End Sub
お礼
回答ありがとうございます。 どうも私が勘違いしていたようです。 セルのよみがな取得はタイプ入力したものだけができるものと思い込んでいました。 テキスト入力したものをセルに書き込んで、Application.GetPhoneticで入手できるんですね。 理解不足でご迷惑をおかけしました。
- zap35
- ベストアンサー率44% (1383/3079)
#01です。 補足回答を拝見して意味が分からなくなりました >>で確認すると、「佐藤」がそのまま表示されると思います。 >まさにこのケースの時です。知りたいのは。 このケースの時にGetPhonetic関数を用いて「サトウ」を取得することが目的ではないのですか? では何をされたいのでしょう?? もしふりがなが登録されていないセルにGetPhonetic関数で取得したふりがなを登録したいなら Activecell.Phonetic.Text = Application.GetPhonetic(Activecell.Value) 元のセルの値をふりがなに置き換えるなら Activecell.Value = Application.GetPhonetic(Activecell.Value) のようにできますが… ただし元のセルをVBAで直接ふりがなに置き換えてしまうと、やり直しが利きませんから、シートをコピーしてから実行するようにするのがよいと思います。
お礼
言葉足らずですいません。 セルにふりがなをつけたり取得したりするのが目的ではありません。 テキストファイルで漢字入力されたものをカナに変換するのが目的です。 入力データは大量にありますので、漢字から自動的にカナに変換したいのです。 よろしくお願いします。
お礼
回答ありがとうございます。 GetPhoneticを使ってセルに入力されたよみがなを入手する方法は以前から知っていました。 >Msgbox Activecell.Phonetic.Text >で確認すると、「佐藤」がそのまま表示されると思います。 まさにこのケースの時です。知りたいのは。