質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.36%

  • VBA

    1122questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

GetPhoneticを使用した、ふりがなの抽出

解決済

回答 2

投稿 2017/11/28 15:55

  • 評価
  • クリップ 0
  • VIEW 58

torisan

score 87

EXCEL VBAで
文字列の読みを抽出しようとしています。

Sub Macro1()
    MsgBox yomi("光ファイバケーブル")   'ヒカリファイバケーブル
    MsgBox yomi("同軸ケーブル")         'ドウジクケーブル
    MsgBox yomi("STPケーブル")          'STPケーブル
    MsgBox yomi("CPEVケーブル")         'CPEVケーブル
    MsgBox yomi("UTPケーブル")          'UTPケーブル
    MsgBox yomi("AEケーブル")           'AEケーブル
    MsgBox yomi("USBケーブル")          'ウsbケーブル
    MsgBox yomi("ETC")                  'エTC
End Sub

Function yomi(txt As String)
    yomi = Application.GetPhonetic(txt) '読みを再変換して出力(全角で出力される)
End Function

上記 Macro1 を動かした時の結果は
プログラム右のコメントの通りです。

上6つは期待した通りの結果が出力されているのですが、
下2つについては、中途半端に
アルファベットがカタカナに変換されています。

こうなってしまう条件と回避方法を教えて頂ければと思います。
確認できたのは、『USB』と『ETC』ですが他にもあるかもしれません。

関係あるかわかりませんが、この現象が起こっているパソコンのIMEは
『Microsoft Office IME 2010』……らしいです。
(コントロールパネル→(表示方法:大きいアイコン)地域と言語→キーボードと言語 タブ→キーボードの変更(C) より確認)

また、複数のパソコンで動かすことが想定される為、
個々の設定が影響しない、解決方法だと嬉しいです。

以上、よろしければご教授願います。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

同じく『Microsoft Office IME 2010』の環境なので試してみました。
どうやらIMEの辞書から変換の優先度が高い順のような気がします。
最初は正確に「USBケーブル」と出力されていましたが、「USBケーブル」というのをわざと「うsbケーブル」のように変換させていたら、いつの間にかそれが出るようになりました。
なので、そのように誤変換されているPCは、そのPCを使っている人がそのように誤変換をしてしまった過去があるのではと思います。

結論としては、GetPhonetic関数だけでは複数変換候補がある場合、どれを選択するかは機械では判断できないので、正確な変換は無理です。
ある程度語彙が決まっているのであれば、シートか何かに変換表でも作ってそれに従って変換させた方が確実です。
もしくは手修正を前提とした一次変換として使うのであれば有用です。

投稿 2017/11/28 16:48

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/28 17:22

    >そのPCを使っている人がそのように誤変換をしてしまった過去があるのではと思います。
    はい、言われてみればそのような覚えがあります。

    語彙については数が多すぎる為、
    ある程度の指標として使用する事とします。
    回答ありがとうございました。

    キャンセル

0

ふりがなは、文字入力時の情報をExcelが記憶していることによって取得しています。
そのため、コピー&ペーストを行うなど、入力方法によっては正確に取得することができません。

私の環境では質問に記載の"ウsb"等を再現できてはいませんが、上記のような理由により発生しているものと推測します。

対応としては、ライブラリを探されるか、外部APIを使用するなどが考えられるかと思います。
外部APIの例としては、下記があります。

テキスト解析:ルビ振り - Yahoo!デベロッパーネットワーク
https://developer.yahoo.co.jp/webapi/jlp/furigana/v1/furigana.html

投稿 2017/11/28 16:59

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/28 17:25

    Excelが記憶しているふりがなを取得するのはワークシート関数のPHONETIC関数ではないでしょうか。
    アプリケーション関数のGetPhoneticはIMEから持ってくるようですよ。

    キャンセル

  • 2017/11/28 17:26

    再現できずという事は個別の環境で間違いなさそうですね……。
    外部APIについては、そこまで大きなプログラムではない事と、
    変換後にもメンテ画面がある事などから見送る事としました。
    回答ありがとうございました。

    キャンセル

  • 2017/11/28 21:01

    Application.GetPhoneticはIMEの情報を参照するのですね。
    把握できていなかったので、勉強になりました。
    回答として適当ではなかったようで失礼いたしました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.36%

関連した質問

  • 受付中

    VBA cpu使用率取得

    プログラミング初心者のものです。管理者の制約で、学校でタスクマネージャを開くことができません。そこでエクセルvbaでタスクマネージャを再現しようと思い、日々精進しております。学校に

  • 解決済

    VBA タイマー機能をつける

    文字の意味とフォントの色が一致しないようなテスト(ストループカラーワードテスト;例 あかという文字が緑色で書かれている)を作りたいです. 現在,問題は画像で表示して,その回答が下

  • 解決済

    シートのコピー

    vbaにて開いたexcelのシートをマクロ等を実行しているexcelのSheet1にコピーしたいのですが、どのように記述したらよいでしょうか。 Sheet1が既に存在した場合Sh

  • 解決済

    ADODB.Stream 保存時エラー

    ADODB.Streamでファイルを作成していてSaveToFileで保存する際に、 ’アプリケーション定義またはオブジェクト定義のエラーです’とエラーが発生します。 変数SA

  • 解決済

    VBAのループ処理途中でシートへ入力したい。

    VBAでループ処理の途中でシートに書き込みを行い、その情報を基に処理を実行したいです。 具体的には・・・ エクセルファイルには2つのシートがあります。 ”設定”シートと”記入”

  • 解決済

    テキストボックスを使用した問題を作成(エクセル)

    【前提】 エクセル・ユーザーフォーム上にテキストボックスを3つ・コマンドボタンを一つ配置しています。 【実現したいこと】 問題の答えをテキストボックスに入力・コマンドボタンをクリッ

  • 受付中

    VBAのexec()について

    外部batファイルをexec()で実行しました。 ですがその際、StdOutには4096バイトしか出力出来ないそうで、結果が途中までしか出力出来ません。 batファイルを複数に分け

  • 解決済

    VBA高速化について

    20個のエクセルファイルを読み込み、特定のシートにあるテーブルから特定の値を探し出し、その右横にあるセルの値を取り出します。 集計用のエクセルのテーブルでも、同じ特定の値をテーブル

同じタグがついた質問を見る

  • VBA

    1122questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。