• 締切済み

Access フリガナ変換について

お世話になります。 Access2010 以前Access2003で作成したmdbがあります。 そのmdbの情報入力フォームには、いくつかのテキストボックスがあり、 「案件名」テキストボックスに入力すると、その下の「案件名フリガナ」 テキストボックスに自動的にフリガナが入力されるようにしてます。 フリガナの自動入力については、「案件名」テキストボックスの更新後処理の イベントで、 **************************** Private Sub 案件名_AfterUpdate() If IsNull(Forms![情報入力]![案件名]) = False Or Len(Forms![情報入力]![案件名]) > 0 Then Forms![情報入力]![案件名フリガナ] = StrConv((usGetPhonetic(Forms![情報入力]![案件名])), vbNarrow) Else '案件名が入力されてなければ何もしない End If End Sub **************************** Function usGetPhonetic(moji As String) As String Dim ExlObj As Object Set ExlObj = CreateObject("Excel.Application") usGetPhonetic = ExlObj.GetPhonetic(moji) End Function **************************** としております。 Excelを呼び出してPhonetic関数でフリガナに変換し、全角を半角に 変換した上で「案件名フリガナ」に入れてます。 ここで質問ですが、「案件名」にあるキーワードを貼り付けると 「案件名フリガナ」に全然関係のないフリガナが入力される場合が あるようです(←実際に自分で確認した訳ではないですが、たまに 現象が発生するとのこと)。 例えば、 案件名が「あああ向け 2016年度サービス」だった場合、「あああ」 の箇所に「いいい」を貼り付けると、本来であればフリガナには 「イイイムケ 2016ネンドサービス」と表示されますが、「いいい」を貼り付けた にも関わらず「マママムケ 2016ネンドサービス」と表示されるらしく。 ※実際はカタカナは半角になります。 案件名の箇所にはちゃんと「いいい向け」と入力されているので、 間違って「ままま」を貼り付けた訳ではありません。 どういうことが考えられますでしょうか。 例えば以前にExcelのふりがなの編集で「いいい」のふりがなとして 「マママ」としたことがあったとして、その情報が記憶されていて それがAccess上で表示されてしまうとか。。と思って実際に 試してみましたが、そういう訳でもなさそうです。 気になるのが、同じキーワードを貼り付けたとしても必ず発生する訳 ではなく、たまーに発生するということです(年に数回程度)。 あと「全然関係のないフリガナが入力される場合がある」と書きましたが 確かに関係はないのですが、社内にいるユーザー名に変換?されて 貼りつくそうです。 ご教示の程、宜しくお願い致します。

みんなの回答

回答No.3

追記。 Excel.ApplicationのGetPhonetic()は 1.初回の呼び出しで、引数に文字列を指定する⇒最初のフリガナ候補が返される 2.次の呼び出しで、引数を指定しないか、空文字を指定して呼び出す⇒次のフリガナ候補が返される。次候補が無ければ空文字が返される という仕様になっています。 例1 Yomi1 = ExlObj.GetPhonetic("漢字") Yomi2 = ExlObj.GetPhonetic() Yomi1は「カンジ」になり、次候補が無いのでYomi2は「空文字」になります。 例2 Yomi1 = ExlObj.GetPhonetic("亮") Yomi2 = ExlObj.GetPhonetic() Yomi3 = ExlObj.GetPhonetic() Yomi1は「リョウ」、Yomi2は「トオル」、Yomi3は「アキラ」になります(4つ以上の候補があるので、続ければもっと出ます) 例3 Yomi1 = ExlObj.GetPhonetic("亮") Yomi2 = ExlObj.GetPhonetic("") Yomi3 = ExlObj.GetPhonetic("") Yomi1は「リョウ」、Yomi2は「トオル」、Yomi3は「アキラ」になります(4つ以上の候補があるので、続ければもっと出ます) この事から「GetPhoneticは、どこかに『前回、どのように呼ばれたか』を、保持している」と思われます。 なので「使い終わったらきちんと開放する。開放を忘れると、何が起こるか判らないかも知れない」です。 「年に1回、たま~におかしくなる」というのも、それで説明が付きます。

naoto0216
質問者

お礼

chie65535さま 度々のご回答ありがとうございます。 毎日Accessは使用しておりますが、日々PCは落として 退社してます(=Accessも落ちる=開放される)。 例に書かれている「亮」ですが、この漢字は確かに 複数の読み方がありますが、今回は全く関係のないものに 変わってしまうのです。 例えば、「東京都」と貼り付けたら、フリガナの箇所に 「ヤマダタロウ」って表示されてしまうのです。 ちなみに貼り付けた「東京都」と表示される「ヤマダタロウ」 は毎回同じです。「東京都」と貼り付けて「ヤマダハナコ」 になることはありません。

回答No.2

直接的な回答ではないのですが テーブルデザインで「ふりがな」設定するのはダメなのでしょうか? Excelのワークシート関数Phoneticなら漢字変換時のかなをシート内に記憶しているのですが GetPhonetic関数だと最も一般的?(IMEの学習に依存)な読み仮名が得られます。 たとえば人名で 一(ハジメ) → イチ 一二三(カズフミ) → ヒフミ 漢字変換時の入力(かな)を返すわけではありません。

naoto0216
質問者

お礼

NotFound404さま ご回答ありがとうございます。 テーブルの「ふりがな」は今まで使ったことないのですが、 検証してみたいと思います。

回答No.1

プログラムは特に問題は無さそうに見えます。 強いて言えば、関数内で作成したアプリケーションオブジェクトを開放しないで関数を終了している部分に「問題あり」と思えますが、開放を忘れてもAccessそのものが終了してしまえば問題は起きない筈です。 Forms![情報入力]![案件名フリガナ] = StrConv((usGetPhonetic(Forms![情報入力]![案件名])), vbNarrow) を Forms![情報入力]![案件名フリガナ] = StrConv((usGetPhonetic(Forms![情報入力]![案件名])), vbNarrow + vbKatakana, 1041) に変更し usGetPhonetic = ExlObj.GetPhonetic(moji) End Function の2行に1行追加して usGetPhonetic = ExlObj.GetPhonetic(moji) Set ExlObj = Nothing '不要になったオブジェクトを開放 End Function の3行に変更して、様子を見てみて下さい。 なお、別の場所にも「作成したオブジェクトの開放を忘れている箇所」があるなら、上記のように、開放する処理を足してください。

naoto0216
質問者

お礼

chie65535さま ご回答ありがとうございます。 まずは教えて頂いた内容で修正してみてどうか 様子を見たいと思います。 ありがとうございました。

関連するQ&A