
3つ以上の条件は配列を使いたいです。
Dim Hairetu_List(30) As Variant
Hairetu_Listは0~30まで文字列が入っている
以下のようにすると全ての行が引っ込んでしまいます。どうすればうまくいくでしょうか。
wb.Sheets(1).Range("A1:G1").AutoFilter '全体にフィルターをかける
wb.Sheets(1).Range("C1").AutoFilter Field:=3, _
Criteria1:=Hairetu_List, _
Operator:=xlFilterValues
No.5ベストアンサー
- 回答日時:
No4です
>その通りだと思います。
…というわけでもなさそうです。
No4に示したようなセル範囲の値をまとめて変数に代入する方法をとると二次元配列になりますが、ご提示のように、ループ内で各配列要素にひとづずつ代入してゆく方式なら、そのようなことはありません。
どうやら、よくわからない迷路に入ってしまったようです。(汗
>0~30まで1つずつ順に見てみましたが、ヒットした部分は行がでてきました。
う~~ん。配列になったら結果が変わるってことですよね?
配列のままでフィルターをかけることにして、0~30の要素数を順に変えて試してみると、どこからか全部非表示になり始めるところがあると思いますので、その近辺に何かあると想像できます。
現状の配列を作成した後で、
ReDim Preserve Hairetu_List(n)
とすると、配列の要素数をnに減ずることができます。
(再定義の為には、配列を動的配列にしておく必要があります)
このnを1から順に増加してみて(n=1ならヒット行が表示されると予想します)、30までのどこかで非表示に変わると思いますので、そのあたりに何かありそうだということになります。
なお、必ずヒットするように、あらかじめ先頭には合致する値を入れておいた方が良いでしょう。
No.4
- 回答日時:
No3です
ふと思いつきましたが、ひょっとするとHairetu_Listを定義するのに
Hairetu_List = Range("Z1:Z10").Value
のように、シートからまとめて読み込むようなことをしていませんか?
この場合は、結果の配列が二次元配列になるので、うまくいかない可能性が出てきます。
インデックス(1)の配列が代用されるようですので、その中の値でヒットしない場合には、全ての行が非表示になる可能性があります。(残りの要素に関しては無視されるようです)
その通りだと思います。以下の場合どこを修正したらいいのでしょうか。
'一旦シート2のA列にすべて書き出したものを重複削除する
wb.Sheets(2).Range("$A$1:$A$600").RemoveDuplicates Columns:=1, _
Header:=xlNo
For i = 0 To 600
If wb.Sheets(2).Range("A" & i + 1).Value = "" Then
Exit For
End If
Hairetu_List(i) = wb.Sheets(2).Range("A" & i + 1).Value
Next i
No.3
- 回答日時:
No2です
>余計な文字列がたくさん入っているので
簡単なデータ例で試してみましたが、余計な文字列があっても問題は無いようです。
該当するものだけきちんと残るようですね。
該当するものが全くなければ(当然ながら)、全部非表示になります。
ですので、一番怪しいのは(合致していると思っているけれど)実は、合致していないとか。
(異体文字とか。○と◯、〇など)
例えば、ループで、フィルタ解除後にNo1の様に配列要素ひとつだけでフィルタをかけ、Stopを入れておくと、一旦その状態が表示されますので、その要素にヒットする行があるか無いかがわかります。
F5キーで継続されて、次の配列要素にヒットするかが表示されますので、順に試してみることで、(本当に)全ての項目でヒットしていないのだということを確かめることもできるでしょう。
0~30まで1つずつ順に見てみましたが、ヒットした部分は行がでてきました。
しかし、以下のように戻すと2行目から300行がすべて非表示となり何の値もでてこないです。
wb.Sheets(1).Range("C1").AutoFilter Field:=3, _
Criteria1:=Hairetu_List, _
Operator:=xlFilterValues
No.2
- 回答日時:
No1です
勘違いしていました。大変失礼しました。
No1は無視してください。
>以下のようにすると全ての行が引っ込んでしまいます。
問題は、「合致するものが一つも存在しない」ってことなのでしょうか?
合致するものを含む配列で試してみても、全部非表示になるということでしょうか?
合致する値のどれかをインデックスで抜き出して、指定しても全部非表示になりますか?
配列にはきちんと予定の内容がセットされていることが確認できていますか?
回答ありがとうございます。Hairetu_Listの8割ぐらいはC列に存在します!
そこはMsgBoxなどで配列を順に見て確認済みです。
また、Criteria1:=Hairetu_List(1)とするとうまく絞り込めます。
No.1
- 回答日時:
こんにちは
うまくいかないことは説明されているけれど、何をしたいのかが書かれてないので、勝手に推測。
Criteria1:=Hairetu_List, _
↓ ↓ ↓
Criteria1:=Hairetu_List(1), _
とかでしょうか?
ありがとうございます。わかりにくくて申し訳ございません
C列をHairetu_List(0)~Hairetu_List(30)すべてで絞り込みたいです。
おそらく、wb.Sheets(1).Range("C1").AutoFilterの中に
Hairetu_List(0)~Hairetu_List(30)の文字列がない場合も結構あります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
- Visual Basic(VBA) Dateserialで データ抽出 2 2022/06/26 21:07
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) Sheet2の日付をキーにオートフィルターで2023年1月のデータを抽出し、Sheet3へ書き出すた 2 2023/03/06 23:57
- Visual Basic(VBA) Sheet1をフィルターで「りんご」を抽出し、Sheet2へ地域を貼り付ける下記マクロを変更して S 2 2022/12/11 03:01
- Visual Basic(VBA) VBA 配列を使ったコードに直していただけますか 4 2023/05/06 15:18
- Visual Basic(VBA) VBAのフィルター操作 5 2023/08/08 09:48
- Visual Basic(VBA) エクセルVBAコピー 2 2022/06/08 21:45
- Visual Basic(VBA) エクセル VBA 条件付き書式 簡略化したい 2 2022/06/02 17:46
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列数式の解除
-
配列変数の添字が範囲外ですと...
-
MATLABにて場合分け関数を定義...
-
《エクセル2000》A列・B列の商...
-
2つ以上の変数を比較して最大数...
-
Join関数 引数の配列変数
-
ListViewで、非表示列って作れ...
-
【excel VBA】 配列番地の検索
-
subの配列引数をoptionalで使う...
-
1-10をランダムに並べる
-
順列の作成
-
2次元動的配列の第一引数のみを...
-
AES暗号にて、AES_set_encrypt_...
-
配列に同じ値を入れる方法
-
テキストボックスの表示
-
【VBA】配列とWorksheetFunctio...
-
個数が1以上の行を個数分行コ...
-
ビンゴ
-
配列を任意の数値で埋める方法
-
配列の定義
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列数式の解除
-
2つ以上の変数を比較して最大数...
-
VBA 1次元配列を2次元に追加する
-
特定のセル範囲で4文字以上入力...
-
ListViewで、非表示列って作れ...
-
配列変数の添字が範囲外ですと...
-
VB6 配列を初期化したい
-
subの配列引数をoptionalで使う...
-
《エクセル2000》A列・B列の商...
-
2次元動的配列の第一引数のみを...
-
ビンゴ
-
for each の現在の配列ポインタ...
-
配列に同じ値を入れる方法
-
配列を任意の数値で埋める方法
-
配列内の内容を全て表示する方法
-
Excel-VBAの配列「Public Const...
-
エクセルVBAの配列二重ループ処...
-
Array配列の末尾に追加したい。
-
MATLABにて場合分け関数を定義...
-
エクセルで最小値から0を除く方法
おすすめ情報
もしやwb.Sheets(1).Range("C1").AutoFilterにHairetu_Listの値がなければまずかったりするのでしょうか。
Hairetu_Listは余計な文字列がたくさん入っているので
ちなみに非表示になるHairetu_Listは15,16,17の部分でした。
18から30までは普通に表示されました。