Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : 指定なし)
オートフィルタをセルの値で。
投稿日時: 18/05/13 22:16:28
投稿者: macroはじめたばかり

教えていただければ助かります。
  
下記のように3種類の日付が入ったデータがあります。
  
記入日  登録日  登録解除日  担当者  役職  その他項目多々…
  
下記のデータを使い色んなバージョンのオートフィルタを設定しなければ
いけません。
日付は月/日で入力されていますが、月ごとにフィルタをしたいです。
※検索元のデータは書き換えは出来ませんので、日付から月を取り出す数式を入れた列を
加えるなどはできません。
  
マクロの記録で作成しておりますが、マクロだとthismonthやlastmonthで
それ以前の月ごとの集計が難しいです。
  
なので、検索するためのセルH5を作り、そこに5月を検索したければ5/1などと
記入しコードを修正してみました。
でも、エラーがかかってできません。
  
(マクロの記録で「5月」でフィルタしたコードArray(1, "H5/1/2018")をセルに変えてみました)
  
ActiveSheet.Range("$A$5:$AA$1590").AutoFilter Field:=1, Operator:= _
xlFilterValues, Criteria2:=Array(1, range("H5")).Value
  
初心者でまるっきりやり方が間違えていたら申し訳ございません。。。
あと、オートフィルタはすでにかかっている状態で、また行が増減するのですが、
ActiveSheet.Range("$A$5:$AA$1590")と指定しなければいけないでしょうか?
  
宜しくお願いいたします。

回答
投稿日時: 18/05/13 23:08:38
投稿者: simple

日付フィルターの「指定の範囲内」を使ってみてはどうですか?
マクロ記録をとって、それをH5セルの日付(とその翌月)を使って、
修正していってはどうですか?

回答
投稿日時: 18/05/14 07:10:58
投稿者: simple

>(マクロの記録で「5月」でフィルタしたコードArray(1, "H5/1/2018")をセルに変えてみました)
"H5/1/2018"を "5/1/2018"または"2018/5/1"に変えてみては?
 
>でも、エラーがかかってできません。
エラーメッセージはどういうものですか?正確に。
 
>ActiveSheet.Range("$A$5:$AA$1590")と指定しなければいけないでしょうか?
ActiveSheet.Range("$A$5")としてみては?
 
そもそもですが、月ごとの集計が目的なら、ピボットテーブルを使えば一発です。
検討してみてください。

投稿日時: 18/05/14 08:48:22
投稿者: macroはじめたばかり

申し訳ございません。
集計ではなく…集計のチェック用として作成してます。
 
また、日付列ににハイフンがはいる場合もあるのでピボットが使えず…
 
 
 
会社のデータが持ち出せないので、下記の仮のでーたで作ってますが、
 
H5に2018/5/1 H6に2018/5/31
 
日付        顧客        品目          単価    数量    金額
2018/4/9    〇電機        VVFケーブル        \2,000    10    \20,000
2018/4/10    K◇電工       静電気チェッカー        \43,000 5    \215,000
2018/4/10    △金属       フライス盤        \95,000     4    \380,000
2018/4/11    ×精密       実体顕微鏡        \82,300 2    \164,600
2018/4/11    △金属       デスクドリル        \96,000     3    \288,000
2018/5/13    K◇電工       デジタル温度計        \25,000    3    \75,000
2018/5/13    ×精密    ズームレンズ        \90,000    4    \360,000
2018/5/13    △金属    カッター          \5,500    1    \5,500
2018/5/16    〇電機       VVFケーブル       \2,000    8    \16,000
 
(表ががたがたですみません。入力画面ではこんなにがたがたじゃないのですが…汗)
 
Sub テストマクロ1()
    ActiveSheet.Range("$A$5:$F$59").AutoFilter Field:=1, Criteria1:= _
       Range("h5"), Operator:=xlAnd, Criteria2:=Range("H6")
End Sub
 
こちらだと、フィルター作動しますが、件数0になります。。。
 
 
 
 
Sub テストマクロ2()
ActiveSheet.Range("$A$5:$F$59").AutoFilter Field:=1, Operator:= _
xlFilterValues, Criteria2:=Array(1, Range("H5")).Value
   
End Sub
 
こちらは実行時エラー424 オブジェクトが必要です。
となります。
 
 
宜しくお願いいたします。

回答
投稿日時: 18/05/14 11:20:57
投稿者: Suzu

simpleさんの回答内は、容実行確認されましたでしょうか?
 
 

引用:
Sub テストマクロ1()
    ActiveSheet.Range("$A$5:$F$59").AutoFilter Field:=1, Criteria1:= _
       Range("h5"), Operator:=xlAnd, Criteria2:=Range("H6")
End Sub
  
こちらだと、フィルター作動しますが、件数0になります。。。

 
条件式変わってますけど。。
 
 
引用:
Sub テストマクロ2()
ActiveSheet.Range("$A$5:$F$59").AutoFilter Field:=1, Operator:= _
xlFilterValues, Criteria2:=Array(1, Range("H5")).Value
End Sub

 
Array(1, Range("H5")).Value → Array(1, Range("H5").Value)
 
 
 
引用:
集計ではなく…集計のチェック用

 
引用:
日付列ににハイフンがはいる場合もあるのでピボットが使えず…

 
・フィルターだと、抽出対象になるのでしょうか?
 日付と認識されていないなら、オートフィルターだろうとフィルターだろうと
  抽出対象条件としては、変わらないと考えます。
 
・集計と集計のチェック用。。。何が違うのでしょうか?

投稿日時: 18/05/14 12:45:41
投稿者: macroはじめたばかり

申し訳ございませんでした。
  
マクロの記録をやり直して修正したつもりですが、
コードが変わってますね。
アドバイスいただいているのに、
焦ってしまって確認がおろそかでした。
  
今パソコンがなく確認が出来ないので
後程、もう一度しっかり内容を確認致します。
  
(集計と集計チェックの違い←そうですよね汗
Sumprodectで件数集計してますが、その集計表と
オートフィルタしたものを見合わせて確認したいそうです。)
 
 

回答
投稿日時: 18/05/14 16:46:43
投稿者: WinArrow
投稿者のウェブサイトに移動

>日付は月/日で入力されていますが
 
日付をyyyy/mm/dd形式で入力すると
普通のオートフィルタで、「月」で選択できると思いますが・・・

投稿日時: 18/05/14 21:58:02
投稿者: macroはじめたばかり

simple さん、ありがとうございます。
 
 

引用:
[quote="simple"]>(マクロの記録で「5月」でフィルタしたコードArray(1, "H5/1/2018")をセルに変えてみました)
"H5/1/2018"を "5/1/2018"または"2018/5/1"に変えてみては?

 
私の書き方が悪く申し訳ございません。
マクロの記録で作成されたArray(1, "5/1/2018")を
ActiveSheet.Range("$A$5:$AA$1590").AutoFilter Field:=1, Operator:= _
xlFilterValues, Criteria2:=Array(1, range("H5")).Value
に修正したという意味で書いたつもりでした。
※"H5/1/2018"のHは誤記だと思います。申し訳ございません。
 
 
引用:
>ActiveSheet.Range("$A$5:$AA$1590")と指定しなければいけないでしょうか?
ActiveSheet.Range("$A$5")としてみては?

 
Range("$A$5")でできました!ありがとうございます。
 
引用:
そもそもですが、月ごとの集計が目的なら、ピボットテーブルを使えば一発です。
検討してみてください。

 
集計は数式でしており、それをもとのリストをオートフィルタして
確認してほしいといわれ、あえての元データをオートフィルタしたいです。
 
 

投稿日時: 18/05/14 22:19:58
投稿者: macroはじめたばかり

ご回答いただいた皆さん本当にありがとうございました。
投稿の仕方が悪くご迷惑おかけして申し訳ございませんでした。
一旦閉めてアドバイスいただいた方法で色々試し一度整理してみようと思います。
また、投稿するかと思いますのでよろしくお願いいたします。