目安箱 IV

目安箱投稿のルールはこちらをごらんください。
ご意見は電子メールで承っています。
「目安箱」は質問禁止です。技術的な質問はそれぞれの質問箱へどうぞ。

迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。

  新規投稿 ┃ツリー表示 ┃一覧表示 ┃トピック表示 ┃検索 ┃設定 ┃ホーム  
203 / 277 ←次へ | 前へ→

【84】オートフィルタの絞込み
Excel  Jaka  - 04/12/6(月) 9:24 -

引用なし
パスワード
   下記のような住所データを
都道府県 → 市町村名 → 名前 と絞り込んでいくとすると

フォーム上にリストボックスが3個
リストボックス1 = 都道府県
リストボックス2 = 市町村名
リストボックス3 = 名前     として。

一応フィルタしっぱなしと後片付けするもの2つ。
内容はほとんど同じです。たぶん。
(3ヶ月ぐらい前にここの載せようとして、書いたんだけど覚えてません。)


Sheet1のデータ

A  B         C     D    E
No, 氏名         県    市町村  番地 ← ここ1行目。
1  谷 亮子       東京都  渋谷区   1549
2  北島康介      愛知県  名古屋市  1276
3  釜飯豊       愛知県  名古屋市  1277
4  どんぐりコロ    愛知県  春日井市  5495
5  ガイアボッタ    千葉県  鴨川市   1586
6  栗原 恵       長野県  松本市   156987
7  大山加奈      愛知県  春日井市  5496
8  青木とめ      秋田県  秋田市   145000
9  木村舞       長野県  松本市   156
10  観月ありさ     東京都  千代田区  1567
11  阿部美里      長野県  諏訪市   123
12  漫画太郎      東京都  中央区   22
13  のびた       東京都  中央区   23
14  改造ドパ      東京都  墨田区   999
15  伊藤ため      秋田県  秋田市   788
16  ケイン小杉     長野県  八千穂   555
17  もたいまさこ    長野県  八千穂   322
18  猫が好き      長野県  八千穂   89
19  敬老の日      東京都  品川区   124
20  ウォーターボーイズ 秋田県  面倒市   47
21  横山めぐみ     大阪府  中央区   88888
22  ミルマスカラス   秋田県  八郎潟   7777
23  Q太郎       東京都  中央区   24
24  遠隔ピーズ     東京都  墨田区   998
25  インディオ     長野県  松川村   3345


1、シート上のフィルタを戻す。
  これ使えないので、消しました。
  すみません。


2、シート上フィルタしたまま

標準モジュール

Public CE As Long  'これ忘れないでね。

Sub 絞込み2()
  Dim Ctl As Range, LbTb() As String, Cnt As Long
  ActiveSheet.AutoFilterMode = False
  CE = ActiveSheet.Range("C65536").End(xlUp).Row
  ActiveSheet.Range("C1:C" & CE).AdvancedFilter Action:=xlFilterInPlace, Unique:=True
  CAE = Range("C2").End(xlDown).Row
  Set Ctl = ActiveSheet.Range("C2:C" & CAE).SpecialCells(xlCellTypeVisible)
  ActiveSheet.AutoFilterMode = False
  ActiveSheet.ShowAllData
  DoEvents
  Cnt = 0
  For Each ccc In Ctl
    Cnt = Cnt + 1
    ReDim Preserve LbTb(1 To Cnt)
    LbTb(Cnt) = ccc
  Next
  UserForm2.ListBox1.List = LbTb
  Set Ctl = Nothing
  Erase LbTb
  Application.ScreenUpdating = True
  UserForm2.Show
End Sub

フォームモジュール

Private Sub ListBox1_Click()
   Dim CT2 As Range, Cel As Range, LB2tb() As String
   Application.ScreenUpdating = False
   ListBox2.Clear
   ListBox3.Clear
   If ActiveSheet.AutoFilterMode Then
    ActiveSheet.AutoFilterMode = False
   End If
   LtW = ListBox1.List(ListBox1.ListIndex)
   Range("A1").AutoFilter field:=3, Criteria1:=LtW
   Set CT2 = Range("D2:D" & CE).SpecialCells(xlCellTypeVisible)
   ListBox2.Clear
   Cnt = 0
   For Each Cel In CT2
     On Error Resume Next
     mt = Application.Match(Cel, ListBox2.List, 0)
     If IsError(mt) Or mt = Empty Then
      Cnt = Cnt + 1
      ReDim Preserve LB2tb(1 To Cnt)
      LB2tb(Cnt) = Cel
     End If
     ListBox2.List = LB2tb
     Err.Clear
     On Error GoTo 0
   Next
   Set CT2 = Nothing
   Erase LB2tb
   Application.ScreenUpdating = True
End Sub

Private Sub ListBox2_Click()
   Dim CT3 As Range, Cel As Range, LB3tb() As String, mt As Variant
   Application.ScreenUpdating = False
   ListBox3.Clear
   LtW = ListBox2.List(ListBox2.ListIndex)
   Range("A1").AutoFilter field:=4, Criteria1:=LtW
   Set CT3 = Range("B2:B" & CE).SpecialCells(xlCellTypeVisible)
   ListBox3.Clear
   Cnt = 0
   For Each Cel In CT3
     On Error Resume Next
     mt = Application.Match(Cel, ListBox3.List, 0)
     If IsError(mt) Or mt = Empty Then
      Cnt = Cnt + 1
      ReDim Preserve LB3tb(1 To Cnt)
      LB3tb(Cnt) = Cel
     End If
     ListBox3.List = LB3tb
     Err.Clear
     On Error GoTo 0
   Next
   Set CT3 = Nothing
   Erase LB3tb
   Application.ScreenUpdating = True
End Sub

Private Sub ListBox3_Click()
  MsgBox ListBox3.List(ListBox3.ListIndex)
End Sub

Private Sub CommandButton1_Click()
  ActiveSheet.AutoFilterMode = False
  Unload Me
End Sub

4,048 hits

【84】オートフィルタの絞込み Jaka 04/12/6(月) 9:24 Excel[未読]

  新規投稿 ┃ツリー表示 ┃一覧表示 ┃トピック表示 ┃検索 ┃設定 ┃ホーム  
203 / 277 ←次へ | 前へ→
ページ:  ┃  記事番号:   
0
(SS)C-BOARD v3.8 is Free