| 
    
     |  | ▼バートン さん: >フィルターのかかったリストの項目行を除いた2行目から、comboboxで選択された件数分のリストを選択する方法を教えてください。
 
 フィルタというのが AutoFilterのことと仮定して、
 2例ほど。
 
 
 フィルタ範囲から1行目の見出し行を除くには
 (1) フィルタ範囲を1行下に移動して (全行数 - 1) に行数を RESIZE する。
 (2) フィルタ範囲自身とフィルタ範囲を1行下にズラした範囲とが重なる範囲を
 抽出すればいいです。
 (2)の方法で、範囲を「Comboboxで指定された件数」分 別のシートにCopyすると
 きは ↓な感じです。
 
 Sub Try1()
 Dim AfRange As Range
 Dim n As Long, x As Long
 Dim Comboboxで指定された件数 As Long
 
 Comboboxで指定された件数 = 10
 
 With Worksheets("Sheet1")
 If .AutoFilterMode = False Then _
 MsgBox "フィルタがかかっていません": Exit Sub
 Set AfRange = .AutoFilter.Range
 x = AfRange.Columns.Count
 MsgBox AfRange.Address(0, 0)
 n = AfRange.Columns(1).SpecialCells(xlVisible).Count
 Select Case n
 Case 1: MsgBox "抽出行がありません": Exit Sub
 Case Else
 If n > Comboboxで指定された件数 Then n = Comboboxで指定された件数
 Application.Intersect(AfRange, _
 AfRange.Offset(1)).SpecialCells(xlVisible).Copy _
 Worksheets("Sheet2").Range("A1").Resize(n, x)
 End Select
 End With
 End Sub
 
 '上のサンプルでは すでにオートフィルタがかかった状態で、
 フィルタ範囲AutoFilter.Rangeを あとから取得して、この範囲の内の
 可視行を SpecialCells(xlVisible) で特定してCOPYしてますが、
 
 '範囲を指定してオートフィルタをかける処理もマクロのなかで
 やってしまうと、SpecialCells(xlVisible) を指定しなくても
 フィルタ範囲を指定するだけで、自動で可視行だけCOPYすることが
 できます。
 
 Sub Try2() 'AutoFilterをかける部分もマクロで処理
 Dim r As Range
 Dim n As Long, x As Long
 Dim Comboboxで指定された件数 As Long
 
 Comboboxで指定された件数 = 10
 
 With Worksheets("Sheet1")
 Set r = .Range("A1").CurrentRegion
 x = r.Columns.Count
 r.AutoFilter
 r.AutoFilter 2, "B"
 n = r.Columns(1).SpecialCells(xlVisible).Count
 Select Case n
 Case 1: MsgBox "抽出行がありません": Exit Sub
 Case Else
 If n > Comboboxで指定された件数 Then n = Comboboxで指定された件数
 Application.Intersect(r, r.Offset(1)).Copy _
 Worksheets("Sheet2").Range("A1").Resize(n, x)
 End Select
 r.AutoFilter
 End With
 End Sub
 
 どちらも、コピー先範囲を「Comboboxで指定された件数」分に Resize して
 貼り付けています。
 
 |  |