みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel:自作のセル関数でエラーが発生

Win2K、Excel97-2000-2002を使用しております。


以下のような関数を作成しました。


Public Function sss() As Boolean
 On Error GoTo aaa
  Range("A1").Value = "TEST"
 sss = True
Exit Function
aaa:
 MsgBox Err.Description
 sss = False
End Function

これをSheet1のB1セルで呼びましたところ、
Rangeへのセットのところで以下のようなエラーが発生します。
「アプリケーション定義またはオブジェクト定義のエラーです。」

同関数をイミディエイトウインドウで実行しましたところ、正常に動きます。


セルの内容を変更するようなメソッドをセル関数として呼ぶことはしてはいけないのでしょうか。

御教授、御鞭撻の程、よろしくお願いいたします。

投稿日時 - 2004-06-23 15:45:44

QNo.902272

暇なときに回答ください

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

エクセルのユーザー関数は、値を返すだけにしないといけません。その関数を使うセルは別として、他のセルの値や
プロパティ(値もプロパテイですが)を設定することは許しません。Subプロセジュアとの住み分けを厳密に規定しているようです。メソッドに当たるものも、だめでしょう。
Range以外の他のオブジェクトのプロパティに関する設定も
だめでしょう。
Range("A1").Value = "TEST"の部分はエラーの素です。

投稿日時 - 2004-06-23 19:33:17

お礼

ご教授くださいまして。ありがとうございます。

そういった関連のドキュメントがどこにも見つけられなくて
質問してめみました。

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

投稿日時 - 2004-06-24 11:51:17

ANo.1

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

こんにちは。maruru01です。

ユーザー定義関数で、他のセルにデータを入力する方法です。
ちょっとイレギュラーな方法ですが。
いったん目的のセルにハイパーリンクを設定して(ここで表示文字列を設定)、その後でハイパーリンクを削除します。


Function DispData(rg As Range, str As String) As Long

  ActiveSheet.Hyperlinks.Add Anchor:=rg, Address:="", TextToDisplay:=str
  rg.Hyperlinks.Delete

End Function


これで、どこかのセル(A1以外)に、

=dispdata(A1,"TEST")

と入力すると、A1に「TEST」という文字列が入ります。

投稿日時 - 2004-06-24 14:50:15

お礼

ご回答いただきまして、ありがとうございます。

ご提示頂いた例、今後の参考にさせていただきます。

投稿日時 - 2004-07-06 16:58:07

あなたにオススメの質問