• ベストアンサー

エクセルVBAでテキストの漢字の読みを入手するには?

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

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

>テキストファイルを読み込む なので、読み込んだデータの Phonetic.Text は登録されていません。 ActiveCellに「佐藤」という漢字があるとき  Msgbox Activecell.Phonetic.Text で確認すると、「佐藤」がそのまま表示されると思います。 漢字からフリガナを取得するには、以下のようにします。  Msgbox Application.GetPhonetic(Activecell.Value) すると「サトウ」が取得できます。 ただしGetPhonetic関数で取得できるよみがなは、必ずしも正しいとは限りません。それぞれの漢字の一般的なよみがなを使用するからです。 その点はご承知置きください

believe_me
質問者

お礼

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

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

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

believe_me
質問者

お礼

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

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 >漢字から自動的にカナに変換したいのです。 ご質問には、最終的な目的が書かれていませんので、ご自身の技術の向上なら、zap35さんの提供されたコードを応用していけばよいと思います。しかし、業務や仕事の話としては、ご質問のカテゴリが違うような気がします。 VBAとおっしゃっていますが、とても、VBAごときでは太刀打ちできない世界だと思います。漢字かな混じり文をひらがな変換にするプログラムは、視覚障害者用の点字タイプに使用するものや、ローマ字変換プログラムなどに応用されていますが、最近では、インターネット検索にも応用されています。そのまま、ひらがなに変換したところで、それでは、読めたものではないからです。 VBA/VBでできないとは言っていませんが、本格的なものと比較すると、単なる真似事になってしまいます。理由は、MS-IMEの機能をAPIで抜き出しているからで、修正機能も分かち書き機能もないからです。 専門的に行うには、有名なのは、Unix 系(Win可能)KAKASI(kanji kana simple inverter) とか、いうものがあります。やる気になれば、可能だと思いますが、大きなプログラムなど入れなくてはならないとかなると、ちょっと面倒かなって思います。 http://kakasi.namazu.org/ 応用したものに、ひらがなゲートウェアというものもあります。 http://www.hiragana-gateway.com/ それと、私の記憶では、障害者用のシステムでは、富士通が専門だったと思います。

believe_me
質問者

お礼

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

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

#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

believe_me
質問者

お礼

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

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

#01です。 補足回答を拝見して意味が分からなくなりました  >>で確認すると、「佐藤」がそのまま表示されると思います。  >まさにこのケースの時です。知りたいのは。 このケースの時にGetPhonetic関数を用いて「サトウ」を取得することが目的ではないのですか? では何をされたいのでしょう?? もしふりがなが登録されていないセルにGetPhonetic関数で取得したふりがなを登録したいなら  Activecell.Phonetic.Text = Application.GetPhonetic(Activecell.Value) 元のセルの値をふりがなに置き換えるなら  Activecell.Value = Application.GetPhonetic(Activecell.Value) のようにできますが… ただし元のセルをVBAで直接ふりがなに置き換えてしまうと、やり直しが利きませんから、シートをコピーしてから実行するようにするのがよいと思います。

believe_me
質問者

お礼

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

関連するQ&A

  • エクセルVBAで

    いつもお世話になっています。 エクセルVBAでセルのデータを読み込んでテキストファイルを出力するプログラムを書いています。 その際に、セル内のデータで「00」や「01」などのデータを読み込んで、そのままテキスト出力させたい場合関数の指定をStringにした場合「0」や「1」と出てしまいます。 「00」や「01」でテキスト出力させる方法を教えてください。 よろしくお願いいたします。

  • エクセル上で漢字入力されたデータをカタカナに変換する方法はありますか?

    エクセル上で、漢字入力されたデータをカタカナに変換する方法はありますか?

  • VBAでテキストファイルからデータを読み込む方法

    VBAでテキストファイルからデータを読み込む方法を探しています。 コンマ区切りのデータを、エクセルに書き込みたいです。 テキストファイルにはコンマ区切りで6個のデータを書き込んであります。 それを、セルD3からD7に書き込む方法を教えていただきたいです。よろしくお願いします。

  • excel vba 一番効率の良い方法を教えてください。

    こんにちは。よろしければ教えてください。 VBAで、テキストデータから読み込んだ日付「20080825」を、 エクセルシートに貼り付ける際(又は貼り付けた後)に、 「2008/08/25」と表示すると同時に「日付」として認識できる形 にしたいのです。(つまりシリアル値に変換したいということに なるのかな?) ○読み込むデータは8ケタの数値です。 ○当然ながら、セル1つにつき1つの日付です。 ○データが多いので、一つ一つ変換すると時間がかかります。   (しかしこの方法しか思いつきません;) ○VBAでもワークシート関数でも…方法は問いません。 一番適している方法を教えてください。 よろしくお願い致します。

  • ExcelのVBAで漢字検索

    ExcelのVBAのエディターで漢字を検索しようと入力をすると単漢字変換しかできません。熟語で変換しようとすると文字化けします。(Excel2003) これは、バグでしょうか? (VBE-編集-検索-検索する文字列での入力) どなたか?詳しい方いますか? 教えてください。 宜しくお願いします。

  • エクセルでテキストデータを読み込むときに、カンマの扱い

    エクセルVBAで、 open "**.txt" for input as #1 で読み込ませています。1行のデータとして、セルに入力したいのですが、カンマが入っているとそこで区切られてしまいます。これをしないようにしたいのですが、テキストファイルのデータに全角のカンマ,を使っても同じようになってしまいます。何か方法はありませんでしょうか?

  • Excelで漢字をひらがなにする関数

    セルに入力されている単語(漢字、カタカナ、ひらがなが混合、例:「エクセル関数」)があります。それを隣のセルに全部ひらがなで出したいのですが、方法はありますか?IMEの「再変換」の機能ではなく、関数があれば教えていただきたいのです。(「PHONETIC」関数は知っていますが、これはカタカナに変換する関数です) 段階として、 1.ひらがなに変換する関数 2.または、PHONETIC関数でカタカナに直したセルをひらがなに変換する関数 3.ダメなら、うまいこと「ひらがな」になるマクロの組み方(あまり好みませんが、この際・・・) を、ご存知の方、是非よろしくお願いします。

  • エクセル2003でテキストファイルへ変換

    エクセル2003を使用しております。 客先から送信されてきたエクセルファイルを テキストファイルへ変換する作業をしておりますが、 セル内に入力されたデータに関してはテキストファイルに 変換しても問題ないのですが、 オートシェイプで作図して、その中にテキストで入力された データに関しては、テキスト形式で保存してもなにも入っていませんでした。 オートシェイプの罫線は必要なく、中に入力されたテキストデータだけ 必要なので、現在は、1つ1つテキストデータを選択してコピーして、メモ帳にペーストいるので、時間が掛かってしまいます。 オートシェイプ内に入力されたデータも含めて、テキスト形式でファイルを保存することはできますでしょうか?

  • エクセル VBA

    いつも、皆々様にはお世話になり、大変役立たせていただいております。 エクセルのデータについての質問です。 セルごとに A,B,C,D,E...... イ,ロ,ハ,ニ,ホ,ヘ,ト... と並んでいるデータがあるとします。 それをテキストデータとして取り出して、 A B C D E . . イ ロ ハ . . . と 各データを改行して取り出すことは可能でしょうか。 行列の変換ではありません。 各セルのデータをひとつずつ取り出して、 テキストデータとして1行ずつ取り出す方法なのです。 VBAで別のシートに1個ずつデータを移して、 ちまちまやっていれば出来そうなのですが、 一発でやる方法はないでしょうか。 よろしくお願い申し上げます。 なぜこのようなことが必要かと申しますと、 歯科のレセ電のプログラムの一環であります。

  • VBAでEXCELから固定長のテキストデータにしたい

    VBAにてEXCELに展開されたデータを固定長のテキストデータに落としたい。 EXCEL側の用件 (1)シート1にボタンを用意して、ボタンをクリックしたらテキストファイルを作成する処理にしたい。 (2)シート2にデータが展開されている。 列は10個程度、行は場合によりけり(MAX65536?) 固定長にする箇所とかはわかるのですが、ボタンクリックしたらシート2を見て、セル(もしくはrange)をどのように取得すればいいのかVBAがよくわからないのです。

専門家に質問してみよう