简体   繁体   中英

How to use Autofill/Filldown with a range of values

I have been trying to get Excel to apply a formula over a set of columns and then extend the pattern across the entire set of rows. This has led to the following code:

For i = 0 To avgsheetNames.Count - 1
If Contains(CStr(avgsheetNames(i)), "Scores") = True Then
    With mainWorkBook.Worksheets(avgsheetNames(i))
        strFormulas(1) = "=SUM(Aggregated_Internal_Scores!I2:I7)/6"
        strFormulas(2) = "=SUM(Aggregated_Internal_Scores!J2:J7)/6"
        strFormulas(3) = "=SUM(Aggregated_Internal_Scores!K2:K7)/6"
        strFormulas(4) = "=SUM(Aggregated_Internal_Scores!L2:L7)/6"
        strFormulas(5) = "=SUM(Aggregated_Internal_Scores!M2:M7)/6"
        strFormulas(6) = "=SUM(Aggregated_Internal_Scores!N2:N7)/6"
        
        strFormulas2(1) = "=SUM(Aggregated_Internal_Scores!I8:I13)/6"
        strFormulas2(2) = "=SUM(Aggregated_Internal_Scores!J8:J13)/6"
        strFormulas2(3) = "=SUM(Aggregated_Internal_Scores!K8:K13)/6"
        strFormulas2(4) = "=SUM(Aggregated_Internal_Scores!L8:L13)/6"
        strFormulas2(5) = "=SUM(Aggregated_Internal_Scores!M8:M13)/6"
        strFormulas2(6) = "=SUM(Aggregated_Internal_Scores!N8:N13)/6"

        mainWorkBook.Worksheets(avgsheetNames(i)).Range("C2:H2").Formula = strFormulas
        mainWorkBook.Worksheets(avgsheetNames(i)).Range("C3:H3").Formula = strFormulas2
        mainWorkBook.Worksheets(avgsheetNames(i)).Range("C2:H3").AutoFill Destination:=mainWorkBook.Worksheets(avgsheetNames(i)).Range("C2:H32")
        
    End With
End If

As you can see I have tried to provide the pattern I am going for where the values extracted from the "Aggregated_Internal_Scores" sheet should follow the pattern I2:I7 > I8:I13 > I14:I19 and so on.

However, when the macro has been executed what I get is I2:I7 > I8:I13 > I4:I9 > I10:I15 ?

It seems Excel is taking the block C2:H3 as the pattern and just incrementing by 2 at the start of every block.

Can you anyone explain where I have gone wrong and how I can specify that I want the extraction of sheet values to follow a certain pattern?

Thank you in advance!

Use:

mainWorkBook.Worksheets(avgsheetNames(i)).Range("C2:H32").Formula = "=SUM(INDEX(Aggregated_Internal_Scores!I:I,(ROW($ZZ1)-1)*6+2):INDEX(Aggregated_Internal_Scores!I:I,(ROW($ZZ1)-1)*6+7))/6"

Replace everything inside the If with that.


If one has Office 365 with dynamic array formula then use:

mainWorkBook.Worksheets(avgsheetNames(i)).Range("C2:H32").Formula2 = "=SUM(INDEX(Aggregated_Internal_Scores!I:I,SEQUENCE(6,,(ROW($ZZ1)-1)*6+2))/6"

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM