Excel でフィルターされた列内の範囲を定義する

Excel でフィルターされた列内の範囲を定義する

列のフィルターされた範囲内のすべての値を自動的に選択するために使用できるマクロを作成しようとしています。理想的には、これを 10 個のフィルター条件 (1 ~ 10) で動作させようとしていますが、これらの条件に対して返される値の数は異なる場合があります。

列がどのように表示されるかを示すサンプル データのごく一部を添付しました。2 番目の列「LinSpatialBin」でフィルタリングしています。フィルタリングされた各条件について、最後の列 (LIN イベント/トラック長) の値の平均を取得しようとしています (たとえば、spatialbin 1 に 2 つの値が返された場合、右側の列の最初のセルにそれらの平均を表示します)。異なるシートの複数の列範囲で動作する必要があるため、相対参照を使用する必要があると考えました。

さらに詳しい情報や明確にすべき点があればお知らせください。以下はスクリプトで、その下にはサンプル データがあります。

脚本

Sub test() ' ' test Macro ' test ' ' Keyboard Shortcut: Ctrl+q ' ActiveCell.Columns("A:E").EntireColumn.Select Selection.AutoFilter ActiveSheet.Range("$A$1:$E$1142").AutoFilter Field:=2, Criteria1:="1" ActiveCell.Offset(2, 5).Range("A1").Select ActiveCell.FormulaR1C1 = "=AVERAGE(RC[-1]:R[27]C[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Range("$A$1:$E$1142").AutoFilter Field:=2, Criteria1:="2" ActiveCell.Offset(27, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=AVERAGE(RC[-1]:R[27]C[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Range("$A$1:$E$1142").AutoFilter Field:=2, Criteria1:="3" ActiveCell.Offset(27, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=AVERAGE(RC[-1]:R[27]C[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Range("$A$1:$E$1142").AutoFilter Field:=2, Criteria1:="4" ActiveCell.Offset(27, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=AVERAGE(RC[-1]:R[27]C[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Range("$A$1:$E$1142").AutoFilter Field:=2, Criteria1:="5" ActiveCell.Offset(27, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=AVERAGE(RC[-1]:R[27]C[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Range("$A$1:$E$1142").AutoFilter Field:=2, Criteria1:="6" ActiveCell.Offset(27, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=AVERAGE(RC[-1]:R[27]C[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Range("$A$1:$E$1142").AutoFilter Field:=2, Criteria1:="7" ActiveCell.Offset(27, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=AVERAGE(RC[-1]:R[27]C[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Range("$A$1:$E$1142").AutoFilter Field:=2, Criteria1:="8" ActiveCell.Offset(27, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=AVERAGE(RC[-1]:R[27]C[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Range("$A$1:$E$1142").AutoFilter Field:=2, Criteria1:="9" ActiveCell.Offset(27, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=AVERAGE(RC[-1]:R[27]C[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Range("$A$1:$E$1142").AutoFilter Field:=2, Criteria1:="10" ActiveCell.Offset(27, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=AVERAGE(RC[-1]:R[27]C[-1])" ActiveCell.Offset(1, 0).Range("A1").Select Selection.AutoFilter ActiveWindow.SmallScroll Down:=-24 End Sub

サンプルデータ

右_8.1.2017_CTRL_LIN_MTX_2_1_1200FR
LINTrackLINSpatiLIN Beha LIN TraLIN イベント/トラック長
       1 1 0 0
       2 1 0 0
       3 1 0 0
       4 1 0 0
       5 1 0 0
       6 1 0 0
       7 1 0 0
       8 1 0 0
       9 1 0 0
       1 2 0 0
       2 2 0 0
       3 2 0 0
       4 2 0 0
       5 2 0 5 0.00
       6 2 0 0
       7 2 0 0
       8 2 0 1 0.00
       9 2 0 0
       1 3 0 0
       2 3 0 0
       3 3 0 0
       4 3 0 0
       5 3 22 92 0.24
       6 3 0 0
       7 3 0 6 0.00
       8 3 5 20 0.25
       9 3 0 0
       1 4 0 0
       2 4 0 4 0.00
       3 4 0 0
       4 4 0 0
       5 4 9 58 0.16
       6 4 0 0
       7 4 2 17 0.12
       8 4 0 0
       9 4 1 1 1.00
       1 5 0 0
       2 5 7 53 0.13
       3 5 1 7 0.14
       4 5 0 0
       5 5 0 0
       6 5 1 9 0.11
       7 5 1 5 0.20
       8 5 0 0
       9 5 3 11 0.27
       1 6 0 0
       2 6 1 23 0.04
       3 6 4 16 0.25
       4 6 0 0
       5 6 0 0
       6 6 2 15 0.13
       7 6 0 0
       8 6 0 0
       9 6 0 0
       1 7 3 4 0.75
       2 7 6 29 0.21
       3 7 0 0
       4 7 5 20 0.25
       5 7 0 0
       6 7 0 0
       7 7 0 0
       8 7 0 0
       9 7 0 0
       1 8 2 10 0.20
       2 8 1 5 0.20
       3 8 0 0
       4 8 14 66 0.21
       5 8 0 0
       6 8 0 0
       7 8 0 0
       8 8 0 0
       9 8 0 0
       1 9 1 4 0.25
       2 9 1 7 0.14
       3 9 0 0
       4 9 10 47 0.21
       5 9 0 0
       6 9 0 0
       7 9 0 0
       8 9 0 0
       9 9 0 0
       1 10 1 3 0.33
       2 10 3 10 0.30
       3 10 0 0
       4 10 15 77 0.19
       5 10 0 0
       6 10 0 0
       7 10 0 0
       8 10 0 0
       9 10 0 0

答え1

表示されているセルを選択するには...

ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible).Select

しかし、細胞を使って本当は何をしたいのかという疑問が湧きます。

関連情報