プロが教えるわが家の防犯対策術!

Filter関数を用いた結果、何も検索されなかった場合

以下のプログラムを実行したところ、セルはまっさらのまま。
  Sub Macro3()
    Dim a As Variant
    a = Array(1, 2, 3, 4, 5)
    ActiveCell.Value = Filter(a, 8)
  End Sub

そこで
  If Filter(A,8) = "" Then ・・・(1)
    ActiveCell.Offset(1, 0).value = False
  Else表示
    ActiveCell.Offset(1, 0).value = True
  endif
を書き加えてみましたところ、
  実行時エラー'13':
  型が一致しません
とのエラーが出ます。

(1)を
  If ActiveCell.value = "" Then
と書く分には問題ないのですが、だからと言って、Filter(A,8)の値は""で表せないのですね。

とりあえずこの五行はエラーが出ているので削除しました。

次に
  ActiveCell.Offset(1, 0).Value = IsEmpty(Filter(A, 8))
を書き加えると、アクティブセルの一つ下は「False」となります。Filter(A,8)では何も抽出されないのですから、空か否かを問われたら「True」のはずなのですが・・・やはり何か戻り値があるのですね・・・

ではエラー値が戻っているのかと
  ActiveCell.Offset(2, 0).Value = IsError(Filter(A, 8))
を書き加えると、「False」ですからエラー値ではありません。

  If Filter(A,8) = Null Then ・・・(2)
    ActiveCell.Offset(3, 0).value = False
  Else表示
    ActiveCell.Offset(3, 0).value = True
  endif
を書き加えたところ、またも
  実行時エラー'13':
  型が一致しません
とのエラーが出ます。

(2)を
  If Filter(A,8) = Error Then
と書き換えてみても同じです。

試しに(2)を
  If Cvar(Filter(A,8)) = Null Then
としてみたり
  If Filter(A,8) = Cvar(Null) Then
としてみたり
  If Cvar(Filter(A,8)) = Cvar(Null) Then
としてみたりしましたが、同じエラーが出ます。

Ubound(Filter(A,8)の値は-1です。これをもってこの場合の戻り値とするしかないのでしょうか。filter関数の戻り値が分からないからUbound関数を使っていることがモロばれで、嫌なんです。

  If Filter(A,8) = なんとか Then
のなんとかに入る戻り値をどなたか教えてください。

A 回答 (1件)

Filterの結果がどうなるのか理解できていないと思います。



Filterの結果は複数件数の可能性がありますので配列(Array)で結果が返ります。
よって該当データがなくてもエラーになりません。

該当データがあったのか、無かったのかの判断は配列が何件あるかを調べれば良いです。
該当件数を調べるのは「UBound」を使用してください。
makojiさんのデータを例にすると
  UBound(Filter(a, 8)) … -1
  UBound(Filter(a, 3)) … 0
になります。

プログラム的には
 If UBound(Filter(a, 8)) = -1 Then
   ActiveCell.Offset(1, 0).Value = False
 Else
   ActiveCell.Offset(1, 0).Value = True
 End If
    • good
    • 0
この回答へのお礼

ありがとうございます。

私は何か勘違いをしていたようで、検索結果が1個の場合、
  If Filter(a,3)=23 then
のようなコード、つまりaという配列から3を含む要素を抽出したところ1個だけで、しかもその値が23である場合には、Filter関数の戻り値が配列であることを忘れて、普通の変数のように扱って良いと思っておりました。

ところが今上記のコードを試してみると、
  コンパイルエラー
  型が一致しません。
とのエラーが出ます。

これと同じく、検索結果が0個の場合も、要素数0個の配列を返すだけで、何かのエラーメッセージを返したりはしないということですね。

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

お礼日時:2010/09/26 19:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A