-PR-
解決済み

「~以上、~以下」のオートフィルタのVBAについて

  • 困ってます
  • 質問No.9374234
  • 閲覧数55
  • ありがとう数8
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 78% (26/33)

こんばんは、オートフィルタについて2つ質問させてください!
1つ目は、10列目に入っている値で、20170901以上かつ20170931以下の値をオートフィルタで抽出しようと以下のVBAを入力しましたが、該当するデータがあるにも関わらず抽出ができませんでした(T_T)何か間違っているのでしょうか…?!
Range("A1:K" & Cells(1).CurrentRegion.Rows.Count).AutoFilter Field:=10, Criteria1:=">=20170901" _
, Operator:=xlAnd, Criteria2:="<=20170931"

2つ目は、同様のデータでInputBoxを利用し、入力した数字をそのままオートフィルタの条件に反映しようとする以下のVBAを入力してみました。しかし、やはり記述の方法が違うのか該当するデータがあるにも関わらず抽出は成功しませんでした・・・。

Dim 日付 As Date
日付 = InputBox("処理月を入力して下さい(例:201709)")

Range("A1:K" & Cells(1).CurrentRegion.Rows.Count).AutoFilter Field:=10, Criteria1:=">= 日付 & 01" _
, Operator:=xlAnd, Criteria2:="<= 日付 & 31 "


どなたかご助力いただけるととても助かります、どうぞよろしくお願いいたします!m(_ _)m
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.4
レベル11

ベストアンサー率 45% (121/268)

Excel(エクセル) カテゴリマスター
お節介ついでに追記させていただきます。
連投すいません。

J列の「日付」が全行において文字列で入っているなら、
逆手に取るのも手段の一つかもしれません。
> 日付 = InputBox("処理月を入力して下さい(例:201709)")
として、年月(6桁)で入力させるのであれば、
  日付 = InputBox("")
  Range("A1").AutoFilter Field:=10, Criteria1:="=" & 日付 & "*"
のように、インプットボックスの結果にワイルドカード文字の「*」を追加、
それをもってフィルタをかけてしまおう、という事ですね。
ワイルドカード文字「*」は「何でも何文字でも」の意味ですから、
インプットボックスの結果として代入された文字列で始まる・・
例えば「201709」で始まる文字列をフィルタ条件として渡せるわけです。
フィルタの対象が文字列なのであれば、コレが多分有効です。

ただ、コレだと「数値」として入力されているモノは
当然のごとくフィルタから弾かれてしまいます。
どちらにしても、データの整理整頓は大切ですよ、というお話ですね。
お礼コメント
osashi

お礼率 78% (26/33)

ご教授いただいた通り、「*」を使用しましたら、指定のデータを含む場合でうまくいきました!また、日付をDateと定義していたのもよくなかったようで、文字列のStringにしたらうまくいきました!(≧▽≦)
投稿日時 - 2017-09-18 20:57:14

その他の回答 (全3件)

  • 回答No.1
レベル11

ベストアンサー率 44% (82/185)

私がやってみたら、抽出できました。
Field:=10 ならば、J列ですが、それで間違いないですが。
20170901だと、日付のようですが、本当に8桁の数字で入っていますか、日付の形式で入っていませんか。ご確認ください。

InputBoxの記述は間違い。""の中に変数は書けません。
Criteria1:=">=" & 日付 & "01"
Criteria2:="<=" & 日付 & "31"
にして下さい。
お礼コメント
osashi

お礼率 78% (26/33)

""の中に変数入力できないんですね…(T_T)今まで知らず、お恥ずかしい限りです…。ご回答いただいて本当にありがとうございます!とても勉強になりました!
投稿日時 - 2017-09-18 21:04:08


  • 回答No.2
レベル14

ベストアンサー率 28% (4383/15530)

下記は期間のBetweenのズバリの回答ではないが、参考にしてください。
エクセルのセルの日付は、「日付シリアル値」という整数です。
意味は知らなければ、WEBで調べること。プログラム言語での「リテラル」という用語に意味も。
ーー
<エクセル関数>(本質問とは関係ないですが)の場合の条件などのリテラルの日付
問題はある書式で、セルに見えている日付が、日付シリアル値でいくらなのかを判る方法ですがこれは面倒。
A2、A3セルに
2017/9/11
2017/9/15
B2、B3セルに関数
=IF(A2=DATEVALUE("2017/9/11"),"Y","N")
=IF(A3=DATEVALUE("2017/9/15"),"Y","N")
のように日付を” ”で囲む。
結果


関数の場合にはこういう方法でよい。
ーー
<VBA≫のフィルタの場合
フィルタでの日付指定は
(1)条件はセルに値を入れ、そのRangeを指定するのがエクセルの本筋
(2)日付リテラル値をコードの中で使う方法なら
http://officetanaka.net/excel/vba/tips/tips151.htm
をじっくり読んでみてください。本当にややこしい点のようです。
質問にはエクセルのバージョンが書いてないが、バージョンなどで複雑なようです。(質問に、使っているエクセルのバージョンも念のため書いておくべきです。)
他に、質問の解決には、条件を期間のFrom ToにするためにCriteria2も使い、OperatorはxlAndを使うのだと思います。いろいろ質問者で、試行してやってみてください。
お礼コメント
osashi

お礼率 78% (26/33)

日付のデータについて、参考のURLをご提供いただき、ありがとうございます!<m(__)m>バージョンによってオートフィルタの結果が異なるのですか…!目から鱗です!変数の宣言をDateからStringに直したらうまくいったので、文字列だったようです…!
投稿日時 - 2017-09-18 21:02:49
  • 回答No.3
レベル11

ベストアンサー率 45% (121/268)

Excel(エクセル) カテゴリマスター
オートフィルタ、ですね。

前半の質問について。
該当のJ列、文字列で入力されていませんか?
文字列だと「数字の比較」では抽出がややこしいので注意です。
とりあえず、文法は間違えていないように見えますので、
まず確認するのはそこかな?と思われます。

ところで・・オートフィルタを動かすときは、
表の行列に「空白」を挟んでいないなら、
全範囲を指定する必要は無かったりします。
つまり今回のだと
  Range("A1").AutoFilter Field:=10, _
              Criteria1:=">=20170901", _
              Operator:=xlAnd, _
              Criteria2:="<=20170931"
で充分いけたりします。
空白列・空白行を含むなら、全範囲を指定する必要がありますけどね。
スッキリ書きたいときにどうぞ。


後半の質問は文法の問題。
> Criteria1:=">= 日付 & 01"
コレだと「日付 & 1」という文字列と比較という命令だと受け取られます。
なのでちゃんと変数「日付」に代入されている値を引き出せるように
  Criteria1:=">=" & 日付 & "01"
と、ダブルクォーテーションから出してあげましょ。
理解しやすい(と思う)例として、ワークシートのセルに
  ="日付 & 01"
  ="日付"&"01"
と入力したらセルに表示される値はそれぞれどうなるでしょう?
まぁ、厳密には少し違ったりもしますが、感覚はそんな感じです。
ここは多分、これで解決できると思います。

が、前半同様、表の中の「日付」が文字列だったら
こちらも正しく抽出しないと思われます。
踏まえ、まずは対象セルの表示形式をご確認くださいませ。
なお添付図は、質問文中でご提示のコードを動かす前後の比較、
上が使用前、下が使用後です。
文字列で入力されている3行目と7行目
(セルの左上に警告の緑▼がついていますね)が
フィルタから弾かれているのを見取っていただければ幸い。
お礼コメント
osashi

お礼率 78% (26/33)

&の使用法についてご教授いただき、ありがとうございます!また、教えていただいた通り、該当の列は文字列で入力されていたようです!(>_<)左上に緑の▼が表示されているかどうかも文字列かどうかを見分ける方法の一つなのですね…!凄く勉強になりました!
投稿日時 - 2017-09-18 20:55:08
このQ&Aのテーマ
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-

特集


専門家があなたの悩みに回答!

ピックアップ

ページ先頭へ