
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
のなんとかに入る戻り値をどなたか教えてください。
No.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
ありがとうございます。
私は何か勘違いをしていたようで、検索結果が1個の場合、
If Filter(a,3)=23 then
のようなコード、つまりaという配列から3を含む要素を抽出したところ1個だけで、しかもその値が23である場合には、Filter関数の戻り値が配列であることを忘れて、普通の変数のように扱って良いと思っておりました。
ところが今上記のコードを試してみると、
コンパイルエラー
型が一致しません。
とのエラーが出ます。
これと同じく、検索結果が0個の場合も、要素数0個の配列を返すだけで、何かのエラーメッセージを返したりはしないということですね。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
【教えて!goo ウォッチ 人気記事】風水師直伝!住まいに幸運を呼び込む三つのポイント
記事を読む>>
-
array関数で格納した配列の型を変更する
Visual Basic(VBA)
-
配列の参照渡しで型が一致しません。
Visual Basic(VBA)
-
エクセルVBA 配列からセルに「関数式」を一気代入したい
Visual Basic(VBA)
-
4
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
5
Chr(13)とChr(10)の違いは?
PowerPoint(パワーポイント)
-
6
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
7
vba フィルター 複数条件 3つ以上 完全一致除外
Visual Basic(VBA)
-
8
もしセルが#N/A"なら~をする・・・には?"
Excel(エクセル)
-
9
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
10
配列で格納したものをmsgboxで表示する方法について
Access(アクセス)
-
11
配列の値を置換するにはどうすればいいでしょう?
Excel(エクセル)
-
12
レコードが存在しなかった場合
Microsoft ASP
-
13
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
14
アクセス VBAについて FROM句の構文エラー
Access(アクセス)
-
15
ユーザーフォームのコピー?
Excel(エクセル)
-
16
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
17
Accessのフィールド名に半角括弧を使ってしまった
Visual Basic(VBA)
-
18
Access サブフォームでの選択行の取得
その他(データベース)
-
19
String だと「 ByRef引数の型が一致しません 」というエラーが出ます。なぜ?
Visual Basic(VBA)
-
20
Excelで重複データの件数ではなく、何番目かを求める方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
LaTeXのエラーについて(コンパ...
-
5
String""から型'Double'への変...
-
6
エクセルVBA 「On Error GoTo...
-
7
VBA データ(特定値)のある最...
-
8
マクロで"#N/A"のエラー行を削...
-
9
ActiveCell.FormulaR1C1の変数
-
10
pythonのopenpyxlについて
-
11
.VBSだとADODBのプロバイダが見...
-
12
マクロの「SaveAs」でエラーが...
-
13
ACCESSで値を代入できないとは?
-
14
ApplicationとWorksheetFunctio...
-
15
DataTableに対するLINQについて
-
16
VBSでカンマ区切り
-
17
インポート時のエラー「データ...
-
18
Excel実行時エラー[80004005]に...
-
19
Filter関数を用いた結果、何も...
-
20
【VBA】ワークブックを開く時に...
おすすめ情報
公式facebook
公式twitter