
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) エクセルでの左のセルのコピー 3 2022/07/25 12:31
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAのオートフィルターで該当行がない場合に処理を止めたい
Excel(エクセル)
-
「Columns(A:C")」の列文字を数字にして表記したい"
Excel(エクセル)
-
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
-
4
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
5
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
6
Excelのセルの色指定をVBAから配列を用いて効率的に行う方法はあり
Visual Basic(VBA)
-
7
array関数で格納した配列の型を変更する
Visual Basic(VBA)
-
8
動的配列が存在(要素が有る)か否かを判定できますか?
Visual Basic(VBA)
-
9
On ErrorでエラーNoが0
Visual Basic(VBA)
-
10
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
11
ExcelのVBA。public変数の値が消える
Visual Basic(VBA)
-
12
配列をEraseしてもメモリが開放されていない?
Visual Basic(VBA)
-
13
コマンドプロンプトのエラーについて
その他(パソコン・周辺機器)
-
14
表にフィルターをかけ、絞ったデータ(可視化セルのみ)を一次元配列として変数に入れるという動作を書きた
Visual Basic(VBA)
-
15
Access VBAで行ラベルが定義されていないというエラーが出ます
Access(アクセス)
-
16
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
17
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
18
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
19
Excelの入力規則で2列表示したい
Excel(エクセル)
-
20
VBAのリストボックスで、横スクロールバーを表示するには?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
お助けください!VBAのファイル...
-
UserForm1.Showでエラーになり...
-
【VBA】ワークブックを開く時に...
-
VBAでfunctionを利用しようとし...
-
マクロで"#N/A"のエラー行を削...
-
String""から型'Double'への変...
-
【VBAエラー】Nextに対するFor...
-
「実行時エラー '3167' レコー...
-
Excel vbaについての質問
-
インポート時のエラー「データ...
-
VB.net 重複チェックがしたいです
-
実行時エラー 438 の解決策をお...
-
ApplicationとWorksheetFunctio...
-
Nullの使い方が不正ですのエラ...
-
エクセル 足し算引き算で 空...
-
オブジェクト型の変数にフォー...
-
VBA Find でオートメーションエ...
-
マクロOn Error GoTo ErrLabel...
-
VBA データ(特定値)のある最...
-
助けてください
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
お助けください!VBAのファイル...
-
VBAでfunctionを利用しようとし...
-
String""から型'Double'への変...
-
【VBA】ワークブックを開く時に...
-
文字列内で括弧を使うには
-
マクロで"#N/A"のエラー行を削...
-
Excel vbaについての質問
-
VBA データ(特定値)のある最...
-
On ErrorでエラーNoが0
-
ApplicationとWorksheetFunctio...
-
【Access】Excelインポート時に...
-
インポート時のエラー「データ...
-
実行時エラー 438 の解決策をお...
-
オブジェクト型の変数にフォー...
-
.VBSだとADODBのプロバイダが見...
-
実行時エラー'-2147467259(8000...
-
【VB.NET】 パワポ操作を非表示で
-
フランスの生年月日(jj/mm/aaaa)
-
【VBAエラー】Nextに対するFor...
おすすめ情報