| 
    
     |  | こんにちは。 大元の考え方そのものを変えたら・・・という
 件に関しては、他の方にお任せします。
 (お聞きした内容からではまだ判断が出来ないので・・
 もっとも、数式の中に固有名詞を入れるようなことは、私はまずしませんが・・)。
 
 
 私が興味深いと感じたのは、
 >ほんとうですね。
 これです。
 
 Excel2003で確認して頂き感謝します。
 
 1.ユーザー定義関数が連動しない例
 
 >>koshimizu さんが提示されたコードを新規ブックの標準モジュール
 >>に
 
 >>Function GetPhone(Rng As Range) As String
 >>  GetPhone = Application.GetPhonetic(Rng.Text)
 >>End Function
 
 
 >>と記述しますよね?
 >>
 >>適当なシートの
 >>
 >>セルA1に 「山梨市」と入力します。
 >>
 >>セルB1には、「=a1」と指定します。山梨市と表示されます。
 >>
 >>セルC1に、「=GetPhone(b1)」と指定します。
 >>「ヤマナシシ」と表示されます。
 >>
 >>ここで
 >>
 >>セルA1を「大月市」に変更します。
 >>
 >>セルB1は「大月市」と変化しますが、
 >>セルC1は「ヤマナシシ」のまま変化しません。
 
 これを以下のような手順で数式を準備すると正常に作動します。
 
 2.ユーザー定義関数が連動する例
 
 コードを新規ブックの標準モジュールに
 
 「1.」と同様にGetPhone関数を記述します。
 
 >>セルA1に 「山梨市」と入力します。
 
 >>セルC1に、「=GetPhone(b1)」と指定します。
 
 >>セルB1には、「=a1」と指定します。山梨市と表示されます。
 
 この時点でC1は、「ヤマナシシ」表示されます。
 
 A1を「大月市」に変更すると
 B1だけでなく、C1も「オオツキシ」と変更されます。
 
 つまり、数式の設定順序によって、ユーザー定義関数が
 連動したり、しなかったりしています。
 
 このように指定順序によって、結果が変わるような関数の仕様そのもの
 に問題あり・・・、このような仕様の関数は定義してはいけない
 
 という結論で投稿しようと思っていました。
 
 ところが、
 
 3. TextプロパティをValueプロパティに変更する
 
 GetPhone関数を以下のように
 
 
 Function GetPhone(Rng As Range) As String
 GetPhone = Application.GetPhonetic(Rng.value)
 End Function
 
 RangeオブジェクトのTextをValueに変更すると、
 数式の設定順序に関係なく、正常に作動します。
 
 >>セルA1に 「山梨市」と入力します。
 >>
 >>セルB1には、「=a1」と指定します。山梨市と表示されます。
 >>
 >>セルC1に、「=GetPhone(b1)」と指定します。
 >>「ヤマナシシ」と表示されます。
 >>
 >>ここで
 >>
 >>セルA1を「大月市」に変更します。
 >>
 セルB1は「大月市」と変化し、
 C1は「オオツキシ」と変化します。
 
 更に
 
 4.Valueプロパティを参照するだけ
 
 Getphone関数コード内で以下のようにValueプロパティを参照するだけで
 連動表示してくれることがわかりました。
 
 Function GetPhone(Rng As Range) As String
 Dim wk As Variant
 wk = Rng.Value
 GetPhone = Application.GetPhonetic(Rng.Text)
 End Function
 
 Valueプロパティ内でTextプロパティの設定を行ってくれているのでしょうかねえ??
 
 
 私は、このような時にはシートのChangeイベントで対応することが多かったので
 
 上記のことは不思議な現象でした。
 
 
 皆さんも確認してみてください。
 
 
 |  |