|
こんにちは。
大元の考え方そのものを変えたら・・・という
件に関しては、他の方にお任せします。
(お聞きした内容からではまだ判断が出来ないので・・
もっとも、数式の中に固有名詞を入れるようなことは、私はまずしませんが・・)。
私が興味深いと感じたのは、
>ほんとうですね。
これです。
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イベントで対応することが多かったので
上記のことは不思議な現象でした。
皆さんも確認してみてください。
|
|