Я пытаюсь создать макрос, который я могу использовать для автоматического выбора всех значений в отфильтрованном диапазоне столбца. В идеале я пытаюсь заставить это работать с 10 условиями фильтра (1-10), но количество возвращаемых значений для этих условий может варьироваться.
Я прикрепил очень небольшой набор образцов данных того, как будут выглядеть столбцы. Я фильтрую по второму столбцу "LinSpatialBin". Я пытаюсь получить среднее значение значений в последнем столбце (событие LIN/длина трека) для каждого отфильтрованного условия (например, если для spatialbin 1 возвращено два значения, я хочу получить их среднее значение в первой ячейке столбца справа). Я подумал, что мне следует использовать относительные ссылки, так как это должно работать с несколькими диапазонами столбцов на разных листах.
Пожалуйста, дайте мне знать, если я могу предоставить больше подробностей или что-то прояснить. Ниже приведен сценарий, а ниже — пример данных.
Сценарий
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
Но возникает вопрос: что вы на самом деле хотите делать с клетками?