|
▼バートン さん:
>フィルターのかかったリストの項目行を除いた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 して
貼り付けています。
|
|