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も見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
配列でデータが入っている要素を求める方法
Visual Basic(VBA)
-
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
-
4
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
5
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
6
VBA 1次元配列を2次元に追加する
Visual Basic(VBA)
-
7
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
8
Excelのセルの色指定をVBAから配列を用いて効率的に行う方法はあり
Visual Basic(VBA)
-
9
VBA アクティブでないシートのセルを選択したり、クリアしたり
Excel(エクセル)
-
10
UserForm1.Showでエラーになります。
工学
-
11
array関数で格納した配列の型を変更する
Visual Basic(VBA)
-
12
VBAでワークシートを引数としてサンプル関数に渡したい
Visual Basic(VBA)
-
13
動的配列が存在(要素が有る)か否かを判定できますか?
Visual Basic(VBA)
-
14
ユーザーフォームをホイールでスクロールする方法(Excel2000VBA)
Excel(エクセル)
-
15
エクセルへのデータの貼付時に書式が反映されない!
Visual Basic(VBA)
-
16
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
17
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
18
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
19
VBA プロシージャの名前の取得
その他(Microsoft Office)
-
20
【VBA】テキストファイルを指定行数からの読み込み
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
VBAでfunctionを利用しようとし...
-
マクロで"#N/A"のエラー行を削...
-
Excel vbaについての質問
-
実行時エラー 438 の解決策をお...
-
お助けください!VBAのファイル...
-
【VB.NET】 パワポ操作を非表示で
-
バッチファイルで、あるスクリ...
-
文字列内で括弧を使うには
-
インポート時のエラー「データ...
-
String""から型'Double'への変...
-
ApplicationとWorksheetFunctio...
-
VB.NETでMessageBoxが表示され...
-
VBAでのファイル読込エラー...
-
エクセルVBA 「On Error GoTo...
-
実行時エラー'-2147467259(8000...
-
実行したSQLの結果を返す方法
-
error C2664: 'LPCTSTR' に変換...
-
バッチファイルからVBA実行でエ...
-
VBAで時間(00:00形式)を積算...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
String""から型'Double'への変...
-
On ErrorでエラーNoが0
-
VBAでfunctionを利用しようとし...
-
マクロで"#N/A"のエラー行を削...
-
VBA データ(特定値)のある最...
-
実行時エラー 438 の解決策をお...
-
お助けください!VBAのファイル...
-
文字列内で括弧を使うには
-
エクセルVBA 「On Error GoTo...
-
【VBA】ワークブックを開く時に...
-
マクロの「SaveAs」でエラーが...
-
ACCESSで値を代入できないとは?
-
実行時エラー'-2147467259(8000...
-
インポート時のエラー「データ...
-
【VB.NET】 パワポ操作を非表示で
-
Filter関数を用いた結果、何も...
-
UBoundに配列がありませんとエ...
-
Excel vbaについての質問
-
メールの件名のセットでエラー...
おすすめ情報