2017-06-23 5 views
2

私はExcelで、パラメータとして渡される日付を操作するカスタム関数を持っています。通常正常に動作しますが、パラメータとしてNOW()を直接渡すと、#VALUEになります。エラー。しかし、私がNOW()をセルに入れ、そのセルをパラメータとして渡すと、そのセルは動作します。私はExcel 2007とExcel 2016の両方でこれを試しましたが、どちらも同じ結果になります。Excelのカスタム関数でNOW()をパラメータとして渡すと、#VALUE!エラー?

私は(代わりに私の元の関数の)これを強調するために簡単な関数を作っ:

#VALUE! error

何さらに混乱だが、私は、それをコードし、ステップで値をストップを置くかのことですNOW()からが実際に渡され、関数が正しく実行されました。しかしスプレッドシートでは#VALUEとして表示されます!エラー。

Value passed in

ことが起こって、それを動作させるための方法ですなぜ誰でも知っていますか?私が言ったように、私は= NOW()で列を追加でき、そのセルをパラメータとして使うことができますが、余分なステップを踏まなければできないようにしたいと思います。

+1

コードを画像に入れないでください。コピー&ペーストとテストができるように[編集]を使ってコードをオリジナル投稿に直接入れてください。 –

+2

VB.NETとは異なり、すべてがVBAの 'Object'ではありません。非オブジェクトも渡すつもりなら、あなたのパラメータを 'Object'として宣言しないでください。それには「バリアント」があります。しかし、あなたが実際に異なる*意味*の値を渡したいのでなければ、 'ByVal inputThing As Date'はうまくいくでしょう。 – GSerg

+0

TODAY()の代わりにNOW()を使用している理由はありますか?今は時間があり、TODAYはちょうど日付です。 @ Scott、理解された – Clouse24

答えて

1

範囲アドレスを渡すと、パラメータは範囲として渡され、関数内で正常に評価されます。しかし、実際にDateを渡すと、渡されたパラメータはVBAのオブジェクトではないため、呼び出しは失敗します。あなたの関数のプロトタイプは、このに変更した場合

すべてが正常になります:VBAでの

Function doStuff(inputThing as Variant) 

Variantパラメータが定義によってを一致させることができますものですので、あなたはそれを渡すことができレンジオブジェクトだけでなく、生の価値。

+0

「日付として」も機能します。他のプロパティのために 'Range'オブジェクトに実際にアクセスしたいのでない限り、それが好ましいと思います。 – GSerg

+0

@GSerg私はそれを追加しようとしていましたが、それを変種として保つことは、より柔軟性を提供し、答えを短くするかもしれないと思った。 –

+1

@ A.S.H、それは助けてくれてありがとう!いずれかの日付またはテキストとしてフォーマットされたセルを入力する方法を調べるとき、私は解決策としてオブジェクトを使用することを見た。私は異形について完全に忘れていた。 – TobyMuerto

関連する問題