Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3144 / 13646 ツリー ←次へ | 前へ→

【63951】ListObject上のAutoFilter UO3 10/1/3(日) 12:16 質問[未読]
【63952】Re:ListObject上のAutoFilter kanabun 10/1/3(日) 13:02 発言[未読]
【63953】Re:ListObject上のAutoFilter UO3 10/1/3(日) 14:17 発言[未読]
【63954】Re:ListObject上のAutoFilter kanabun 10/1/3(日) 14:51 発言[未読]
【63955】【成功しました!】ListObject上のAutoFil... UO3 10/1/3(日) 16:42 お礼[未読]

【63951】ListObject上のAutoFilter
質問  UO3  - 10/1/3(日) 12:16 -

引用なし
パスワード
   ListObject上のAutoFilterの利用についての質問です。
(環境は2003です。2007ではLisObjectの機能が拡充されていると聞いていますが会社の環境は当分2003なので)

質問は2つあります。

(質問1)

 せっかくListObjectを使うわけですのでListObjectとしてのAutoFilter機能の利用のコード、ご存じでしたらご教示願います。いろいろ探したり、試行錯誤をしたりしていますが発見できません。

(質問2)

 とりあえずは、ListObjectがあるシートに対する通常のAutoFilter機能でまかなっていますが、以下の現象がでています。

 シート.Range("A1").Select
 Selection.AutoFilter ......   これは正常にフィルタリングされます。

 シート.Range("A1").AutoFilter ..... この場合フィルタリングされません。

 後者の場合、【なにがしかの作用】は働いているようで、続けてシート上でマニュアルでフィルタリングをかけてもかわらない状態になります。

 ListObjectではない、通常のオートフィルターであれば後者のコードでフィルタリングされるんですが。

 アドバイスお待ちします。

【63952】Re:ListObject上のAutoFilter
発言  kanabun  - 10/1/3(日) 13:02 -

引用なし
パスワード
   ▼UO3 さん:
>
> ListObjectではない、通常のオートフィルターであれば後者のコードでフィルタリングされるんですが。

ふだんListObject使った作業は皆無に等しい自分なのですが、
試しにこうしてみたら、オートフィルタできました。

Sub Try1()
 Dim myRange As Range
 Dim oList As ListObject
 
 Set myRange = ActiveSheet.Range("A1").CurrentRegion
 Set oList = ActiveSheet.ListObjects.Add(xlSrcRange, myRange, , xlYes)
 With oList
   .Name = "List1"
   .ShowAutoFilter = True  'マクロのほうで▼を明示する
   .DataBodyRange.AutoFilter 2, Criteria1:="B" 'B列に フィルタをかける
 
   MsgBox "ok?"
 
   .DataBodyRange.AutoFilter
   .Unlist
 End With
 Set oList = Nothing
End Sub

【63953】Re:ListObject上のAutoFilter
発言  UO3  - 10/1/3(日) 14:17 -

引用なし
パスワード
   ▼kanabun さん:

三が日の貴重なお時間で試行いただき深謝申し上げます。
結論から申し上げますと、B列にA,B,C,D・・と記入したシートをもとに
ご呈示いただきましたコードで実行しましたが、やはりフィルタリングされないで
全行表示のままでした。kanabunさんは成功されたわけですから小生の環境に【何かが】足りないのかもしれませんね。あるいはオフィスのパッチがあるのかも?

ただ、1点、kanabunさんのコード例のなかのDetaBodyRange、今までは
HeaderRowRangeとしていました。これはありがたいアドバイスでした。

もし環境面でアドバイスあれば引き続きよろしくお願いします。

【63954】Re:ListObject上のAutoFilter
発言  kanabun  - 10/1/3(日) 14:51 -

引用なし
パスワード
   ▼UO3 さん:

>ただ、1点、kanabunさんのコード例のなかのDetaBodyRange、今までは
>HeaderRowRangeとしていました。これはありがたいアドバイスでした。

UO3 さん、ごめんなさい。
> DataBodyRange
こちらの勘違いだったかもしれません。
(Excel2007 なので環境はちがいますが、こんなスレッドありました。
 ht tp://www.moug.net/faq/viewtopic.php?t=43468  )

これをみていて思い出しました。。。

>   .DataBodyRange.AutoFilter 2, Criteria1:="B" 'フィルタをかける

   .Range.AutoFilter 2, "B"
としてみてください。

おなじく、
>   .DataBodyRange.AutoFilter

    .Range.AutoFilter
としてみてください。

いずれにしても、ふつうのAutoFilterをかけるときも
Range("A1").AutoFilter とすると、Excelにフィルタ範囲の自動拡張を
解釈させることになり、時に正しく範囲がセットされないことになるので
フィルタリングするときは、その範囲をコードのほうから明示的に
指定するようにしたほうがよいと思います
(Excel2007 の SPなし のときは このExcelの自動範囲拡張機能が動作
しなかったため、何度か掲示板に質問がありました)

【63955】【成功しました!】ListObject上のAutoF...
お礼  UO3  - 10/1/3(日) 16:42 -

引用なし
パスワード
   kanbanさん

 おそらくメモリーの問題だったようです。
 その後、スタートからすべてのプログラムを選んだのですがでてきた一覧から
 プログラムが選べず、いわゆる固まった状態。思い返すと年末年始、ずっと
 PC上で様々な処理を稼働させ続けていましたので、PCを再立ち上げして
 ご教示いただいたコードを実行sたと頃、ちゃんとフィルタリングされました。


 ありがとうございました!
 今回、アドバイスただいた情報についても勉強してみます。
 今後ともご指導よろしくお願いいたします。

3144 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free