Excel VBA質問箱 IV

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

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


26157 / 76738 ←次へ | 前へ→

【55914】Re:リストの選択
発言  kanabun  - 08/5/23(金) 13:31 -

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

【55913】リストの選択 バートン 08/5/23(金) 12:28 質問
【55914】Re:リストの選択 kanabun 08/5/23(金) 13:31 発言
【55917】Re:リストの選択 バートン 08/5/23(金) 14:26 お礼

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