プロが教える店舗&オフィスのセキュリティ対策術

テキストファイルを読み込むエクセルVBAを作りました。
テキストデータ内の漢字をカタカナに変換したいのですが
どのようなVBAにしたら良いのでしょうか?
セルに入力された漢字の読みを入手する方法は分かっていますが、
テキストの漢字から入手する方法が分かりません。
よろしくお願いもうしあげます。

A 回答 (5件)

>テキストファイルを読み込む


なので、読み込んだデータの Phonetic.Text は登録されていません。
ActiveCellに「佐藤」という漢字があるとき
 Msgbox Activecell.Phonetic.Text
で確認すると、「佐藤」がそのまま表示されると思います。

漢字からフリガナを取得するには、以下のようにします。
 Msgbox Application.GetPhonetic(Activecell.Value)
すると「サトウ」が取得できます。

ただしGetPhonetic関数で取得できるよみがなは、必ずしも正しいとは限りません。それぞれの漢字の一般的なよみがなを使用するからです。
その点はご承知置きください
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
GetPhoneticを使ってセルに入力されたよみがなを入手する方法は以前から知っていました。
>Msgbox Activecell.Phonetic.Text
>で確認すると、「佐藤」がそのまま表示されると思います。
まさにこのケースの時です。知りたいのは。

お礼日時:2009/01/01 03:25

こんにちは。



以下は、単なるお遊びマクロです。
作ってみてわかるのは、やはり、本来、正規表現置換を利用し、文章を分解しなくてはならいのですが、前回書いたように、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
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
このままで問題なく使えます。

お礼日時:2009/01/03 16:02

こんにちは。



>漢字から自動的にカナに変換したいのです。
ご質問には、最終的な目的が書かれていませんので、ご自身の技術の向上なら、zap35さんの提供されたコードを応用していけばよいと思います。しかし、業務や仕事の話としては、ご質問のカテゴリが違うような気がします。

VBAとおっしゃっていますが、とても、VBAごときでは太刀打ちできない世界だと思います。漢字かな混じり文をひらがな変換にするプログラムは、視覚障害者用の点字タイプに使用するものや、ローマ字変換プログラムなどに応用されていますが、最近では、インターネット検索にも応用されています。そのまま、ひらがなに変換したところで、それでは、読めたものではないからです。

VBA/VBでできないとは言っていませんが、本格的なものと比較すると、単なる真似事になってしまいます。理由は、MS-IMEの機能をAPIで抜き出しているからで、修正機能も分かち書き機能もないからです。

専門的に行うには、有名なのは、Unix 系(Win可能)KAKASI(kanji kana simple inverter) とか、いうものがあります。やる気になれば、可能だと思いますが、大きなプログラムなど入れなくてはならないとかなると、ちょっと面倒かなって思います。

http://kakasi.namazu.org/

応用したものに、ひらがなゲートウェアというものもあります。
http://www.hiragana-gateway.com/

それと、私の記憶では、障害者用のシステムでは、富士通が専門だったと思います。
    • good
    • 0
この回答へのお礼

そういうものが使える環境ならば使っています。
職場で使うのですが、業務で使うには違いませんが、一般業務用というよりは自分の仕事の効率化に使います。
職場のセキュリティ上の理由により、新たなソフトのインストールは禁止されています。
USB、CD、FDDなどの媒体の接続およびインターネット接続も禁止されています。
Officeソフト、エディター、メインフレーム端末ソフト、ロータスノーツが使えるだけです。
メインフレームの言語は自由に使えますが、PCで使用が許されているプログラム言語はVBAだけです。
本来VBAでやることではないかも知れませんが、これしか選択肢がありません。
今回の漢字からの変換、100パーセントの正確性は求めていません。
違っている部分はあとでマニュアルで修正するつもりです。

お礼日時:2009/01/01 21:11

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

回答ありがとうございます。
どうも私が勘違いしていたようです。
セルのよみがな取得はタイプ入力したものだけができるものと思い込んでいました。
テキスト入力したものをセルに書き込んで、Application.GetPhoneticで入手できるんですね。
理解不足でご迷惑をおかけしました。

お礼日時:2009/01/01 21:26

#01です。


補足回答を拝見して意味が分からなくなりました

 >>で確認すると、「佐藤」がそのまま表示されると思います。
 >まさにこのケースの時です。知りたいのは。

このケースの時にGetPhonetic関数を用いて「サトウ」を取得することが目的ではないのですか? では何をされたいのでしょう??

もしふりがなが登録されていないセルにGetPhonetic関数で取得したふりがなを登録したいなら
 Activecell.Phonetic.Text = Application.GetPhonetic(Activecell.Value)

元のセルの値をふりがなに置き換えるなら
 Activecell.Value = Application.GetPhonetic(Activecell.Value)
のようにできますが…

ただし元のセルをVBAで直接ふりがなに置き換えてしまうと、やり直しが利きませんから、シートをコピーしてから実行するようにするのがよいと思います。
    • good
    • 0
この回答へのお礼

言葉足らずですいません。
セルにふりがなをつけたり取得したりするのが目的ではありません。
テキストファイルで漢字入力されたものをカナに変換するのが目的です。
入力データは大量にありますので、漢字から自動的にカナに変換したいのです。
よろしくお願いします。

お礼日時:2009/01/01 09:07

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