• ベストアンサー

GetPhonetic("羨ま")

Sub test() Debug.Print Application.GetPhonetic("羨ましい") Debug.Print Application.GetPhonetic("羨まし") Debug.Print Application.GetPhonetic("羨ま") End Sub の戻り値が、 ウラヤマシイ ウラヤマシ は戻るのですが、 「羨ま」は何も取得されません。 正しい日本語ではないからでしょうか? IMEで変換できないものは、GetPhoneticで取得できないという事でしょうか?

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

  • ベストアンサー
回答No.1

こんにちは。 バージョンによっても事情は異なりますが、Office IME の場合でお応えします。 > 正しい日本語ではないからでしょうか? 概ね合っていますが、少し違います。  IMEに登録した変換候補 を参照したり、  実際にIMEで変換して学習させた変換候補 を参照したり、   複数の候補の中から、使用頻度の高さや至近での変換例などから   学習して、優先度の高い順番に複数のふりがなを返す というのが.GetPhoneticですから、 > IMEで変換できないものは、GetPhoneticで取得できないという事でしょうか? の方が近いですね。  Debug.Print Application.GetPhonetic("羨ま") で  ウラヤマ を返す為には、基本的には、 予めIMEで[単語の登録]をしておく必要があります。 そういう意味では、 「正しい日本語ではないから」です。 でも[単語の登録]をしなくても、 例えばの手順として、   Excelシート上でひとつのセルを選択した状態から、   "うらやま"とタイプして、   一旦、変換キーを押して、   続けて、[Shift]+[←]キーを押して、   "うらや" と "ま" を個別に変換できる状態にしてから、   "うらや"の変換候補から単漢字"羨"を選択して   確定する という作業を済ませた後で、  Debug.Print Application.GetPhonetic("羨ま") を実行すれば、  ウラヤマ が返るようになります。 また、 漢字や漢字を含む単語に関連付けられた変換候補 つまり「ふりがな候補」は、ひとつではありませんし、 IMEの[単語の登録]機能や、上記のような実際の変換履歴によって 数が増えることもあります。 実際に変換した頻度によって優先順が変わることもあります。 PC環境は勿論、ユーザーの使い方によっても 様々な違いがでるものなので、 皆に共通した絶対的な答があるようなものでもないですね。 参考に、例えば、以下を実行して試してみて下さい。 Sub try8980490w2() Dim s As String   s = Application.GetPhonetic("赤")   Do     Debug.Print s     s = Application.GetPhonetic()   Loop While s <> "" End Sub おそらく、多くの環境では、  アカ と、ひとつだけ返るものと思います。 続けて、実際にIMEを使って(例えばExcelで)  "せき"とタイプして"赤"に変換して確定  "しゃく"とタイプして"赤"に変換して確定 のような手順を踏んでから、もう一度、 Sub try8980490w2() を実行すると、今度は、  アカ  セキ  シャク の3つが戻るようになるかと、、、。 このように、使い方の影響を受けるものだ、ということだけは 意識しておきましょう。 以上、参考まで。

xampxmyuupl
質問者

お礼

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

その他の回答 (1)

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.2

「うらやまし」、「い」 に、対して 個別に 送り仮名設定 されている ので、しょう 其の 基本単位を割った ので、送り仮名設定が 適応 されなくなった 其だけです ね 例えば 羨 此の一文字 其だけでも 設定してやれば 送り仮名は 取得できます よ お試しあれ

xampxmyuupl
質問者

お礼

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

関連するQ&A

  • DatePartを関数使うと、スペースがはいる

    Sub test1() Debug.Print Format(Date, "m") End Sub Sub test2() Debug.Print DatePart("m", Date) End Sub 二つを実行すると、DatePartの場合は 戻り値の前にスペースが入ります。 「12」 「 12」 という結果になります。 なぜなのでしょうか?

  • アプリケーションの横幅の値を取得したい vba

    アクセスのアプリケーションの横幅の値をvbaで取得する事は可能でしょうか? Sub サンプル() Debug.Print Application.Width End Sub はエラーになっちゃいました。

  • NowとNow()とどちらを使った方が良いですか?

    どちらも結果は同じでした。 Sub test1() Debug.Print Now End Sub Sub test2() Debug.Print Now() End Sub TechNet

  • AddressとAddressLocal 違い

    エクセルvbaなのですが Sub test01() Debug.Print Range("a1").Address Debug.Print Range("a1").AddressLocal End Sub この二つの違いは何ですか? どちらも$A$1が返るのですが。 アドレスを取得したい場合、どちらを使った方がよろしいでしょうか?

  • Phonetic[型が一致しません]になる理由

    Sub サンプル1() Debug.Print Application.WorksheetFunction.Phonetic(Range("A1")) End Sub はうまくいくのに、 Sub サンプル1() Debug.Print Application.WorksheetFunction.Phonetic("日本") End Sub ********************************************************* は、[型が一致しません]になるのはなぜでしょうか? オブジェクトブラウザを見ると、 Function Phonetic(Arg1 As Range) As String になってることから、rangeを指定しなくていけないからですか?

  • アクセスでApplication.Caption

    アクセスでApplication.Captionに代わるコードはありますか? エクセルでなら Sub test01() Debug.Print Application.Caption End Sub は動きますが、アクセスだとコンパイルエラーになります。 CaptionがApplicationのメンバにないからだと思います。 いくつかのアプリケーションを跨いでVBAを動かしているのですが、 アクセスで自身のアプリケーション名、もしくはファイル名を取得するコードはありますか? ご回答よろしくお願いします。

  • アクセス DCount Between and

    テーブルの5月分の件数をvbaで取得するにはどうすればいいでしょうか? Sub test() Debug.Print DCount("[取引日]", "T取引先", "[取引日] = Between #5/1/2013# And #5/31/2013#") End Sub これだと、実行時エラー3075「クエリ式の構文エラー:演算子がありません。」が返ります。 多分、クライテリアの士気が間違ってるんだと思います。 Sub test() Debug.Print DCount("[取引日]", "T取引先", "[取引日] = #5/1/2013#") End Sub これなら取得できました。 Sub test() Debug.Print DCount("[取引日]", "T取引先", "[取引日] = #5/*/2013#") End Sub ワイルドカードは使えないようで、これもエラーになりました。 5月分の件数を取得する方法はありますか? よろしくお願いします。

  • computerNameを取得したい

    UserNameではなく、computerNameを取得したい エクセルで複数人でファイルを開いてる場合、 コンピューター名を取得したいのですが Sub test1() Dim v As Variant v = ActiveWorkbook.UserStatus Debug.Print v(1, 1) End Sub これをやると、UserNameが取得されます。 UserStatusの中には、computerNameは格納されないのでしょうか? Sub test() Debug.Print Environ("computerName") End Sub で、自身のコンピューター名は取得できるのですが 複数ファイルを開いているときのみんなのコンピューター名を取得する方法を教えてください。

  • 検索文字が右から何文字目にあるか文字位置を取得

    検索文字が右から何文字目にあるか文字位置を取得したいのですが 2文字指定できないのでしょうか? Sub test01() Debug.Print InStr(1, StrReverse("abcde"), "cd") End Sub だと、0が返りますが、 Sub test02() Debug.Print InStr(1, StrReverse("abcde"), "c") End Sub だと3が返ります。 複数の文字の検索文字が右から何文字目にあるか文字位置をする方法を ご教授ください。

  • 変数を続けて宣言した場合はEmpty型になる?

    Sub test1() Dim Int1, Int2 As Long Debug.Print "---------- test1の実行結果 ----------" Debug.Print TypeName(Int1) Debug.Print TypeName(Int2) End Sub Sub test2() Dim Int1 As Long Dim Int2 As Long Debug.Print "---------- test2の実行結果 ----------" Debug.Print TypeName(Int1) Debug.Print TypeName(Int2) End Sub を実行すると、 ---------- test1の実行結果 ---------- Empty Long ---------- test2の実行結果 ---------- Long Long の結果が得られます。 test1のInt1がEmpty型になりますが、変数の型にEmptyはないですよね? どういうことなのでしょう???

専門家に質問してみよう