• ベストアンサー

エクセルのsetphonetic関数

cj_moverの回答

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.6

#3-5、cjです。#5補足欄拝見しました。 まず、こちらで事前に動作確認していた内容ですが、詳細を記します。 今一度確かめてみましたが、同様の結果、期待した通りの動作、 を、こちらの環境では、繰り返し再現しているようです。 (ベンチ用プログラムで5つのコンディションを各1万回テスト) 以下、準備。 a) #3掲載の)[Re8768439c]を標準モジュールに貼り付け。 b) 未編集のセル(ここでは仮にA1)に、文字列値 "和家 利代" を設定。 c) 同じシート(仮にB1あたりに)にフォームコントロールのボタンを配置。 d) <手順c)>のボタン[マクロの登録][マクロ名]に[Re8768439c]<手順a)>を指定 。 e) セルA1を選択。 以上、準備。 <手順c)>のボタン を 押す度に 試行。 下記 0 - 27 のようにフリガナが変化。 27 の状態で試行すると、0 に戻る。 0   - Empty - 1   ワイエ トシヨ 2   ワイエ リヨ 3   ワケ トシヨ 4   ワケ リヨ 5   ワカ トシヨ 6   カズイエ トシヨ 7   カズヤ トシヨ 8   ワカ リヨ 9   カズイエ リヨ 10  カズヤ リヨ 11  ワウチ トシヨ 12  ワウチ リヨ 13  ワイエ リダイ 14  ワケ リダイ 15  ワヤ トシヨ 16  ワヤ リヨ 17  カズケ トシヨ 18  ワカ リダイ 19  カズイエ リダイ 20  カズケ リヨ 21  カズヤ リダイ 22  ワイエ ミノルヨ 23  ワイエ トシダイ 24  ワイエ ミノルダイ 25  ワケ ミノルヨ 26  ワケ トシダイ 27  ワケ ミノルダイ 0   - Empty - 1   ワイエ トシヨ ... ※ 上記、フリガナ候補のプライオリティーは、 | IMEによる[かな漢字変換]を契機とした学習機能によって | 変動します。また増減することもあります。 | 異なる環境での比較は元より同一環境でも、そこまでの再現性 | を担保するものではありません。 動作仕様と動作確認方法についての説明は以上です。 > 以下質問 > ' ' 次のフリガナ候補 を取得 >       sD = Application.GetPhonetic() ??? > ???の行はいらないのではないでしょうか。変数を調べたところ、これを実行する前と実行した後で変数の値が違っています。 /// 1■ GetPhonetic メソッドを 引数を指定しながら コール。   →フリガナ第一候補 を取得       sD = Application.GetPhonetic(.Value) 2■ GetPhonetic メソッドを 引数を指定せずに コール。   →第二,第三,,,のフリガナ候補を取得しながら、    現在のフリガナと一致したフリガナ候補に遭遇したら一旦ループを抜ける       Do Until sD = sS Or sD = ""         sD = Application.GetPhonetic() ' 次のフリガナ候補 を取得       Loop 3■ 現在のフリガナと一致したフリガナ候補    →その次のフリガナ候補を最終的なフリガナとして取得する       sD = Application.GetPhonetic() ??? /// うまく伝えられるかわかりませんが、 3■を実行しないければ、何度繰り返し実行しても、 いつまでも同じフリガナのままになってしまいます。 似たような記述が繰り返されていて見た目にスマートじゃない、 とお感じになったなら、その感覚はある意味正しいとは思いますが、 「ループで同値になるまで進めて」 「リストの次の値を採る」 という意図で書いていますから、意図を強調する意味でも、 下手に小細工するより、明示的に「もう一回実行」を表現する方が 良いという判断で、こういう書き方を選んでいます。 返答としては、「???の行は」必要なのです が、他の書き方で同じことを実現できるなら、お好みで編集してみてください。 > ???の行はいらないのではないでしょうか。変数を調べたところ、これを実行する前と実行した後で変数の値が違っています。 > この行をコメントアウトすると.Phonetic.Text = sDのところでsDの値が目標の値になりますが、実行するとさらに次の候補になってしまうようです。 「この行をコメントアウトすると」「sDの値が目標の値」のひとつ前、 つまり、元のフリガナと同値になってしまいます。 「実行するとさらに次の候補になってしまうようです。」というのは解りませんが、 是非コメントアウトしないで試してみて下さい。 > また >   Else ' フリガナ候補 が 空 でなければ >     .Phonetic.Text = sD ' フリガナ候補 を フリガナに設定 >   End If > を実行するとたしかにsDは目標の新しい振り仮名に設定されていて、.Phonetic.Textの値も新しいものに変わっています。 > ところが再度コードを実行すると > ' ' Application.GetPhonetic メソッドで フリガナ第一候補 を取得 >       ' ' セルの値(漢字?相当)を引数に >       sD = Application.GetPhonetic(.Value) > を実行した後のsDの値が変更する前の元の値にもどってしまっています。そのためsetPhonetic関数の結果も変化しません。 > どこに原因があるのか分かりましたらよろしくご教示ください。 「sDの値が変更する前の元の値にもどってしま」うのは「???の行」をコメントアウトした場合 ではないですか? 私が提示しているのは「setPhonetic関数の結果」を変化させるものではありません。 なので、この最後の一文が正確に現象を表しているなら、それは正常な(期待通りの)動作です。 察するに、#2さんのご回答で示唆された方法と、 私が提示した方法を同一視して混乱してしまっているのかも知れませんが、 そういう意味では、全くの別物です。 私がネタが被ったと書いたのは、GetPhonetic メソッド をテーマにする、 という共通点のことです。 私のは、指定したセル範囲のフリガナを実行する度に次の候補へ置き換えていく ものですから、逆にIMEに対して影響を与えませんから、 自ずと、「setPhonetic関数の結果」も変化しません。  ◆アクティブセルにフリガナが設定されていない場合は、   →SetPhonetic メソッドでフリガナを初期設定。  ◆アクティブセルでは既にフリガナを設定してある場合、且つ、   ◆GetPhonetic メソッドで参照するフリガナリストにあるフリガナ    が設定されている場合は、    →GetPhonetic メソッドで参照するフリガナリストの次にあるフリガナ   ◆同じく、GetPhonetic メソッドで参照するフリガナリストの最後にあるフリガナ    が設定されている場合は、    →フリガナを削除。(リストを一周したことを告知する意味)   ◆GetPhonetic メソッドで参照するフリガナリストに存在しないフリガナ    が設定されている場合は、    →一度めの実行でフリガナを削除。(リストに存在しないフリガナであることを告知する意味)    →二度め以降の実行GetPhonetic メソッドで参照するフリガナリストを順番に設定 念の為、アクティブセルが対象セルの位置にあるかどうかも確認しながらテストしてみてください。 #5のコード自体は、立て続けに繰り返しテスト実行して、 わざわざトレースしなくても、GetPhonetic メソッドの挙動を体感できるように、 テスト用に書いています。 実戦では、ActiveCellのような心許ない参照を使うことの無いように、 または一々不要なものをセルに書き出さないように、 より堅実に無駄なく仕上げていくことになるのだと思います。 挙動に誤解が無いよう参考に、"赤"という漢字で3例示します。 赤 0   - Empty - 1   アカ 0   - Empty - 1   アカ ... 赤道 0   - Empty - 1   セキドウ 2   アカミチ 3   アカドウ 0   - Empty - ... 赤口 0   - Empty - 1   シャッコウ 2   アカグチ 3   アカクチ 0   - Empty - ... "赤"をタイプする時はほぼ絶対的に"あか"ですよね。 だから、普通はフリガナ候補は"アカ"だけです。 赤一文字では"セキ"も"シャク"も"シャッ"も 普通はフリガナ候補ではありません。 でも、ひとたび、"しゃく"を[かな漢字変換]で赤を確定すれば、 次の瞬間から、上記のフリガナリストに"シャク"が仲間入りします。 ですので、#5で提示したマクロをテストしている合間に、 IME変換候補のプライオリティーに影響するような操作をすれば、 #5のマクロで誤作動を起こすことは可能です。 IME等のPC環境の中でも根本的な部分に変化を加えるようなことは、 普通はしませんし、人に勧めるものではありませんし、 そうしたことまで想定して萎縮したコーディングをする必要もない、 とは思っています。 以上です。

snorioo
質問者

お礼

詳しい説明ありがとうございます。ただ残念ながら私の知識と理解力を超えていて、すぐに理解することは出来ませんが。 おそらくおっしゃるように、もう1人の方の回答と同じと考えて混乱したのだと思います。 いずれにしろご協力感謝いたします。

関連するQ&A

  • Excelの漢字からカナを出力する「Phonetic関数」について

    テキストファイルに書き込まれた音楽の日本語タイトル(漢字・かな・カナ・英字の混ざるもの)を、Excelを使用し、自動的に半角カタカナに変換するマクロを使用しています。使用している関数は「SetPhonetic」を使用しています。 この関数で疑問があるのですが、変換する元のファイルはただのテキストファイルなのに、なぜ正しい読み方で変換されるのでしょうか? たとえば「小田和正」を「ショウダワショウ」と変換されても不思議はないのですが。。。 オンラインで入力された顧客名に自動的にふりがなをつけるシステムに応用したいと考えています。もしどなたかこの関数の仕組みをご存じの方がいらっしゃいましたら、教えてください!

  • エクセルのPHONETIC関数について

    100件の住所録がアクセスで作ってエクセルに落としたため、通常の並べ替えができません。 ですのでこの関数を使って漢字のふりがなを振るのですが、全件ひとつずつ同じ作業をするのがたいへんです。1件この関数を使ったらあとは、どういう手順をふんだらいっぺんにふりがなをふれるのか教えてください。

  • EXCEL 関数を文字として

    EXCELで関数で計算や現れた文字を、実際の文字として扱うには どうしたらいいのでしょうか? 具体的にいいますと、PHONETICという関数でフリガナを表示したのですが、 それをフリガナとして他のEXCELのファイルにコピーして使いたいのです。 ただコピペすると、関数のため、出てきません…。 EXCEL初心者です。どうか教えてください。 宜しくお願いします。

  • エクセルのふりがな関数について

    既に入力してあるデータのふりがなを出したいのですが、phonetic関数を使ってももとある漢字のデータしか表示されません。”書式”の”ふりがな”の”編集”をクリックするとふりがなが表示されるようにはなるのですが、セル1つ1つに対してその操作をしないとふりがなの表示ができません。なんとか一括でふりがなの表示ができる方法はないでしょうか?ご教示ください。

  • エクセル関数 PHONETICについて

    関数 PHONETICでふりがなをふるとき、カタカナではなくてひらがなにする方法を教えてください。 自分なりにも調べたんですが、元セルを選択→書式→ふりがな→設定→ふりがなタブで種類をひらがなに変更というやり方でできるということらしいですが、これってウィンドウズXPくらいまでのやりかたですよね? 私のPCはウィンドウズ7で、書式のところを選択しても「ふりがな」という項目がないんです。 あるのは「行の高さや列幅の変更、シートの整理、セルの保護や非表示」だけなのですが、どうやったらいいか、分かる方お願いします!

  • エクセル関数 PHONETICについて

    エクセル関数について教えてください。 セルAに入れた会社名に セルBにふりがなをつけたいので セルBに  =PHONETIC(A1) といれます。 これで ちゃんとふりがながうたれるのですが 株式会社 太郎商事  有限会社 花子興業 など 株式会社や有限会社には ふりがなをつけたくありません。 (並べ替えをしたい為) 何か良い方法はありますか?

  • エクセルの関数で複数条件での抽出

    エクセルの関数を教えて欲しいです。 会員番号順に並んだ名簿を、別のシートへフリガナの「ア行」「カ行」「サ行」・・・・と フリガナ順で抽出をしたいのです。 下の図が関数でやりたいイメージです。 私自身、VBAは全く分からなく、関数なら初心者程度に分かりますので関数で 教えて下さい。 宜しくお願いします。

  • Excel2007 ふりがな関数について

    Excel2007 ふりがな関数について Phonetic関数を設定してふりがなを表示させようとしても 文字全体にふりがなが振られないことがあると聞きました。 同じセル内の文字なのに ふりがなが付いた部分と無い部分ができるなんて 信じられませんが・・・・・ 私はそのような現象に会ったことがありませんが 理由を知りたいのと 対処法を教えてください。 宜しくお願いいたします。

  • エクセル

    エクセルの関数PHONETICをつかうと、ふりがなが、カタカナで表示されますが、 ふりがなには表示できないのでしょか?

  • INDEX関数とふりがな表示

    INDEX関数とふりがな表示 Office2007を利用してます。Excelで一枚目のシートに名簿があります。名簿の名前欄にはふりがなが表示されています。(フォネティック関数ではなく、書式のふりがなの表示/非表示です。) 二枚目のシートにインデックス関数を用いて名簿の名前を引張ってきた場合、ふりがなが表示されません。 これは別のセルにフォネティック関数で表示させるようにするしか方法はないのでしょうか?