Как заполнить диапазон 5 x 2 5 литералами в одном столбце и 5 формулами в другом за один прогон с помощью Excel VBA - PullRequest
1 голос
/ 02 октября 2019

Я хочу автоматически заполнить диапазон 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. На самом деле, я хотел бы указывать конец диапазона при каждом запуске. Спасибо.

1 Ответ

2 голосов
/ 02 октября 2019
Sub FillSummary()
    Dim strFormulas(1 To 5, 1 To 2) As Variant
    Dim wsa As Worksheet: Set wsa = ActiveSheet

    Dim rw As Long
    rw = 41

    With wsa
        strFormulas(1, 1) = "Average"
        strFormulas(1, 2) = "=ROUNDUP(AVERAGE($B2:$B" & rw & "),0)"
        strFormulas(2, 1) = "Maximum"
        strFormulas(2, 2) = "=MAX($B2:$B41)"
        strFormulas(3, 1) = "Median"
        strFormulas(3, 2) = "=ROUND(MEDIAN($B2:$B41), 0)"
        strFormulas(4, 1) = "Total"
        strFormulas(4, 2) = "=COUNTA(Sheet!A$2:A$90000)"
        strFormulas(5, 1) = "Total2"
        strFormulas(5, 2) = "=COUNTA('Sheet {2}'!A2:A8000)"
        .Range("D2:E6").Formula = strFormulas


    End With
End Sub

ИЛИ

Sub FillSummary()
    Dim strFormulas(1 To 5, 1 To 2) As Variant
    Dim wsa As Worksheet: Set wsa = ActiveSheet

    Dim rw As Long
    rw = 41

    With wsa
        strFormulas(1, 1) = "Average"
        strFormulas(1, 2) = "=ROUNDUP(AVERAGE($B2:$Bxx),0)"
        strFormulas(2, 1) = "Maximum"
        strFormulas(2, 2) = "=MAX($B2:$B41)"
        strFormulas(3, 1) = "Median"
        strFormulas(3, 2) = "=ROUND(MEDIAN($B2:$B41), 0)"
        strFormulas(4, 1) = "Total"
        strFormulas(4, 2) = "=COUNTA(Sheet!A$2:A$90000)"
        strFormulas(5, 1) = "Total2"
        strFormulas(5, 2) = "=COUNTA('Sheet {2}'!A2:A8000)"

        strFormulas(1, 2) = Replace(strFormulas(1, 2), "xx", rw)

        .Range("D2:E6").Formula = strFormulas


    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...