![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列数式の解除
-
VB6 配列を初期化したい
-
Excel-VBAの配列「Public Const...
-
Dim は何の略ですか?
-
VBのコントロール配列を二次元...
-
2つ以上の変数を比較して最大数...
-
VBA 1次元配列を2次元に追加する
-
《エクセル2000》A列・B列の商...
-
特定のセル範囲で4文字以上入力...
-
配列に同じ値を入れる方法
-
for each の現在の配列ポインタ...
-
エクセルで最小値から0を除く方法
-
Excel VBA配列をFunctionに渡す
-
ArrayListの初期値に二次元配列...
-
ListViewで、非表示列って作れ...
-
配列内の内容を全て表示する方法
-
20万を 超える、連番の 生成。
-
配列を任意の数値で埋める方法
-
サイコロを二つ振って出た数a,b...
-
2次元動的配列の第一引数のみを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列数式の解除
-
2つ以上の変数を比較して最大数...
-
VBA 1次元配列を2次元に追加する
-
特定のセル範囲で4文字以上入力...
-
ListViewで、非表示列って作れ...
-
for each の現在の配列ポインタ...
-
配列変数の添字が範囲外ですと...
-
subの配列引数をoptionalで使う...
-
VB6 配列を初期化したい
-
配列を任意の数値で埋める方法
-
2次元動的配列の第一引数のみを...
-
Dim は何の略ですか?
-
VBのFunctionで、配列を引数...
-
Excel-VBAの配列「Public Const...
-
Excel VBA配列をFunctionに渡す
-
エクセルで最小値から0を除く方法
-
Array配列の末尾に追加したい。
-
《エクセル2000》A列・B列の商...
-
配列内の内容を全て表示する方法
-
VBAで多次元配列のインデックス...
おすすめ情報
もしやwb.Sheets(1).Range("C1").AutoFilterにHairetu_Listの値がなければまずかったりするのでしょうか。
Hairetu_Listは余計な文字列がたくさん入っているので
ちなみに非表示になるHairetu_Listは15,16,17の部分でした。
18から30までは普通に表示されました。