Я хочу автоматически заполнить диапазон 5 x 2
текстом и соответствующими формулами. Предположим, мы берем столбцы D
и E
. Результирующий диапазон ячеек должен выглядеть следующим образом:
| D | E |
|---------|-------------------------------|
| Average | =ROUNDUP(AVERAGE($B2:$Bxx),0) |
| Maximum | =MAX($B2:$B41) |
| Median | =ROUND(MEDIAN($B2:$B41); 0) |
| Total | =COUNTA(Sheet!A$2:A$90000) |
| Total2 | =COUNTA('Sheet {2}'!A2:A8000) |
Я думал, что смогу заполнить весь диапазон парами текст, формула. Я создал следующий код:
Sub FillSummary()
Dim strFormulas(1 To 10) As Variant
Dim wsa As Worksheet: Set wsa = ActiveSheet
With wsa
strFormulas(1) = "Average"
strFormulas(2) = "=ROUNDUP(AVERAGE($B2:$Bxx),0)"
strFormulas(3) = "Maximum"
strFormulas(4) = "=MAX($B2:$Bxx)"
strFormulas(5) = "Median"
strFormulas(6) = "=ROUND(MEDIAN($B2:$Bxx); 0)"
strFormulas(7) = "Total"
strFormulas(6) = "=COUNTA(Sheet!A$2:A$90000)"
strFormulas(9) = "Total2"
strFormulas(10) = "=COUNTA('Sheet {2}'!A2:A8000)"
.Range("D2:E2").Formula = strFormulas
.Range("D2:E6").FillDown
End With
End Sub
Важный момент: мне нужно устанавливать разные адреса ячеек при каждом запуске кода. Вот почему я указал Bxx вместо конкретных адресов.
Я планировал использовать Replace () после добавления формул, например:
strFormulas(1) = Replace(xx, "41", sheetName)
Однако код не выполняется при выполнении строки .Range("D2:E2").Formula = strFormulas
. Что я делаю не так?
Этот код работает нормально:
Sub FillDAUSummary()
Dim strFormulas(1 To 10) As Variant
Dim wsa As Worksheet: Set wsa = ActiveSheet
With wsa
.Range("D2").Formula = "Average"
.Range("E2").Formula = "=ROUNDUP(AVERAGE($B2:$B41),0)"
.Range("D3").Formula = "Maximum"
.Range("E3").Formula = "=MAX($B2:$B41)"
.Range("D4").Formula = "Median"
.Range("E4").Formula = "=ROUND(MEDIAN($B2:$B41), 0)"
.Range("D5").Formula = "Total"
.Range("E5").Formula = "=COUNTA(Sheet!A$2:A$90000)"
.Range("D6").Formula = "Total2"
.Range("E6").Formula = "=COUNTA('Sheet {2}'!A2:A8000)"
End With
End Sub
Однако он имеет недостаток. Я должен был указать диапазон строк: B$2:$B41
. На самом деле, я хотел бы указывать конец диапазона при каждом запуске. Спасибо.