web-dev-qa-db-ja.com

カスタム関数が何も返さないようにする-0ではなく、空白の文字列ではなく、何も返さない

スプレッドシートのセル内から呼び出されるカスタム関数があり、場合によっては何も返さないようにします。つまり、関数を含むセルを空のセルとまったく同じように処理する必要があります(関数が値を返さない場合)。

これを行うのに最も近いのは、空の文字列""を返すことです。残念ながら、長さがゼロの文字列を持つセルは、COUNTAまたはCOUNTBLANKによって空として扱われず、数式(1 + "" = #VALUEなど)を壊します。

何も返さないようにしようとすると、ほとんどの場合0が返されますが、これはユーザーによってまったく異なる方法で解釈されます。

私は何をすべきか?

これまでに試しました:

Returns 0:
    result = null
    result = VbEmpty
    result = Range("SomeCellKnownToBeEmpty")

Returns error:
    result = Nothing

回答:これは不可能であると合理的に確信しています。実行できる最善の方法は、これを回避することです。

オプションの回避策:

  • 文字列"-blank-"を返し、VBAマクロで"-blank-"のセルの内容を削除します。奇妙なアプローチですが、私のニーズに合っています。これは、ワークブックを公開する準備をする手順の1つとして行っています。
  • 空の文字列を返し、シート内の他の数式を明示的に取得して、""を空白として扱います。
  • 0を返し表示:0を返し、カスタムフォーマットを使用して0を非表示にします。
7
WoodenKitty

あなたが抱えている問題は、UDFが常に値を提供することです。そのため、数式を含むセルがある場合、それを空白にすることはできません。またはあなたが望むものである空。

他の数式でゼロまたは空の文字列を処理するか、より大きなプロセスを完全にVBAに変換する必要があると思います。

詳細については、以下を参照してください。 http://Excel.tips.net/T002814_Returning_a_Blank_Value.html

編集:重複の可能性: Excelの数式から空のセルを返す

5
CuberChase

私が得ることができる最も近いものは、戻り値をVariantに設定し、nullを返すことです。

Function Blah() As Variant
    Blah = Null

End Function

Sub Test()
    Range("A1").Value = Blah()
End Sub

個人的には、これに反対することをお勧めします。これは非常に珍しいことであり、さらに問題を引き起こす可能性があります。

2
Andy G

COUNT…関数ではありませんが、グラフ/グラフ/プロットのExcelで「ペンを持ち上げる」には、UDFがCVErr(xlErrNull)を返すようにします。

セル式NA()を返すと、Excelが「ペンを持ち上げる」ので、これはかなり奇妙です。ただし、CVErr(xlErrNA)を返すUDFは、同じことを行いません。幸い、CVErr(xlErrNull)は機能します。

1
Rocky Scott

私も同じ問題を抱えていました。だから私がしたのは、ダミー変数を作成し、それを関数と等しく設定することでした。

いくつかの変数を取得してメッセージボックスに表示した関数で、値を返したくなかったので、次のようにしました。

x = myfunction(a、b)

それは完璧に機能しました。

0
user2719206

次のようなエラーを返す必要があります。

Function retError()
    ' This function returns an error. 
    retError = CVErr(vbValue)
End Function

セル内では、#VALUE!として表示されます。これには、スプレッドシート内の数式を伝播するという利点があります(ユーザーがエラーがあることを確認してください)が、COUNTなどの一部の関数ではカウントされません。 COUNTAは引き続きこれらのセルをカウントすることに注意してください。

0
Ronan Paixão