Excel VBA質問箱 IV

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

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


954 / 13645 ツリー ←次へ | 前へ→

【77301】AutoFilter について ぴょん 15/7/4(土) 17:07 質問[未読]
【77302】Re:AutoFilter について β 15/7/4(土) 17:44 発言[未読]
【77303】Re:AutoFilter について β 15/7/4(土) 17:46 発言[未読]
【77304】Re:AutoFilter について ぴょん 15/7/4(土) 19:16 発言[未読]
【77305】Re:AutoFilter について ぴょん 15/7/4(土) 19:25 発言[未読]
【77306】Re:AutoFilter について β 15/7/4(土) 21:07 発言[未読]
【77307】Re:AutoFilter について ぴょん 15/7/4(土) 22:11 お礼[未読]
【77308】Re:AutoFilter について ぴょん 15/7/4(土) 22:32 発言[未読]
【77309】Re:AutoFilter について β 15/7/4(土) 23:04 発言[未読]
【77311】Re:AutoFilter について ぴょん 15/7/4(土) 23:47 発言[未読]
【77312】Re:AutoFilter について ぴょん 15/7/5(日) 0:04 発言[未読]
【77313】Re:AutoFilter について β 15/7/5(日) 1:21 発言[未読]
【77315】Re:AutoFilter について ぴょん 15/7/5(日) 9:04 お礼[未読]

【77301】AutoFilter について
質問  ぴょん  - 15/7/4(土) 17:07 -

引用なし
パスワード
   AutoFilter について、2点質問させてください。

■質問1

下表のデータで、

  A  B     C
1        
2    住所     優先順位
3    東京都      1
4    東京都      1
5    神奈川県      2
6    静岡県      3
7    静岡県      3
8    最終行    


下記ソースを実行(Tagetに全て設定)すると、表の一番したの最終行が非表示になってしまいます。
(ちなみに、Tagetに全て設定しないパターンは、どの組み合わせも非表示になるものは非表示になり、最終行も表示されます)
デバッグでも原因が掴めなかったため、ご教授ください。

Sub 質問()
  Dim Target(2) As String
  
  Target(0) = 1
  Target(1) = 2
  Target(2) = 3

  Range(Cells(2, 2), Cells(7, 3)).AutoFilter Field:=2, _
    Criteria1:=Target, _
    Operator:=xlFilterValues, VisibleDropDown:=False

End Sub


■質問2
 当初VisibleDropDown:=Falseで矢印が非表示になっていたのですが、何かをきっかけに非表示にならなくなってしまいました。
 何がいけないのでしょうか?


以上、よろしくお願いします。

【77302】Re:AutoFilter について
発言  β  - 15/7/4(土) 17:44 -

引用なし
パスワード
   ▼ぴょん さん:
>■質問1

フィルタリングされた状態で、以下を実行してください。
オートフィルターが認識しているリスト領域のアドレスを表示します。
つまり、8行目もリスト領域になっていて、2列目が指定の1,2,3ではないので
非表示になるということです。
Target配列のどこかに設定がないということは "" が抽出条件として指定されたということで
2列目が空白の最終行が抽出されたということです。

オートフィルターの設定は、指定の領域を基準に【連続した領域すべて】をリスト領域にします。
これは仕様です。

極端な話、フィルターがかかっていない状態で

  Range("B2").AutoFilter Field:=2, _
    Criteria1:=Target, _
    Operator:=xlFilterValues, VisibleDropDown:=False

このように B2 のみを指定しても、連続した領域がフィルター対象になりますよね。

>■質問2
>何かをきっかけに非表示にならなくなってしまいました。
>何がいけないのでしょうか?

う〜ん・・・・
その何かをきっかけに・・という何かを、いろいろ試行してつきとめてみられてはいかがですか。
何か がわかれば回答もできると思うのですが。

【77303】Re:AutoFilter について
発言  β  - 15/7/4(土) 17:46 -

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

ごめんなさい。
「以下を実行してください」の、「以下」のコードがぬけていました。

Sub 確認()
  MsgBox ActiveSheet.AutoFilter.Range.Address
End Sub

【77304】Re:AutoFilter について
発言  ぴょん  - 15/7/4(土) 19:16 -

引用なし
パスワード
   ▼β さん:
いつもありがとうございます。
MsgBoxで確認してみました。
βさんの言われた通りB2:C8と認識されていました。
そこで、8行目に空行を追加し9行目に”最終行”としたところ、B2:C9と認識されました。
空行でも、連続域として認識されてしまうのですね?
どうすれば、連続域として認識されないようになるのでしょうか?

ちなみに、質問2については色々考えてみます。

【77305】Re:AutoFilter について
発言  ぴょん  - 15/7/4(土) 19:25 -

引用なし
パスワード
   ▼ぴょん さん:
>▼β さん:
あれ?もう一回やったら、B2:C7と認識されました。
B2:C9も、MsgBoxで確認したんですけど、なんだったのか(^^;

【77306】Re:AutoFilter について
発言  β  - 15/7/4(土) 21:07 -

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

>あれ?もう一回やったら、B2:C7と認識されました。
>B2:C9も、MsgBoxで確認したんですけど、なんだったのか(^^;

推測ですけど、挿入した8行目が【本当の空白行】ではなく
挿入の際に【指が触れて】スペースがはいってしまったとか?

【77307】Re:AutoFilter について
お礼  ぴょん  - 15/7/4(土) 22:11 -

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

そうかもしれません。

下記■質問2ですが、ワークシートのプロパティに、AutoFilterModeプロパティでした。
VisibleDropDown:=Falseはちゃんと非表示でした。
お騒がせしました。
いつもご親切な回答ありがとうございます。

>■質問2
>  当初VisibleDropDown:=Falseで矢印が非表示になっていたのですが、何かをきっかけに非表示にならなくなってしまいました。
>  何がいけないのでしょうか?

【77308】Re:AutoFilter について
発言  ぴょん  - 15/7/4(土) 22:32 -

引用なし
パスワード
   ▼ぴょん さん:
>▼β さん:

たびたびすいません。やっぱダメでした。
ドロップダウン矢印は消えたのですが、AutoFilterの実行結果が、AutoFilter実行前に戻ってしまいました。
AutoFilterの実行結果はそのままに、ドロップダウン矢印を消す方法はない?

【77309】Re:AutoFilter について
発言  β  - 15/7/4(土) 23:04 -

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

>ドロップダウン矢印は消えたのですが、AutoFilterの実行結果が、AutoFilter実行前に戻ってしまいました。
>AutoFilterの実行結果はそのままに、ドロップダウン矢印を消す方法はない?

よくわからないのですが、現在の設定は(なぜか)B列が▼あり、C列が▼なしですよね。
で、やりやいことは、▼を消す? つまり、B列の▼を消したいということですか?
それなら、最初から消しておけばいいのでは?
いったんB列は▼を表示しておいて、別のタイミングで、あとから非表示にしたいのですか?

いずれにしても以下は、抽出結果はそのままで、B列の▼を非表示にします。

Sub test()
  ActiveSheet.AutoFilter.Range.AutoFilter Field:=1, VisibleDropDown:=False
End Sub




【77311】Re:AutoFilter について
発言  ぴょん  - 15/7/4(土) 23:47 -

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

ありがとうございます。B列は非表示になりました。
実際はN列まであるのですが、Fieldの指定はどうなるのでしょう?

【77312】Re:AutoFilter について
発言  ぴょん  - 15/7/5(日) 0:04 -

引用なし
パスワード
   ▼ぴょん さん:
>▼β さん:
>

以下みたいに、ベタな方法しか思いつかなです。
もう少し、スマートな方法があればと思ったのですが。

  LoopIndex = 1
  
  Do While LoopIndex <= 4  'とりあえず4
    
      
    ActiveSheet.AutoFilter.Range.AutoFilter Field:=LoopIndex, VisibleDropDown:=False
    LoopIndex = LoopIndex + 1
  
  Loop

【77313】Re:AutoFilter について
発言  β  - 15/7/5(日) 1:21 -

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

以下のようにかくこともできますよ。

Sub HideDropDown()
  Dim x As Long
  
  For x = 1 To ActiveSheet.AutoFilter.Filters.Count
    ActiveSheet.AutoFilter.Range.AutoFilter Field:=x, VisibleDropDown:=False
  Next
  
End Sub

【77315】Re:AutoFilter について
お礼  ぴょん  - 15/7/5(日) 9:04 -

引用なし
パスワード
   ▼β さん:
さすが、かっこいいですね。
大変ありがとうございました。

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