简体   繁体   中英

Excel Function to repeat a set of cells for a certain number of times based on cell value

I am looking for a way to repeat a set of cells horizontally a certain number of times before moving on to the next set of cells. For example:

If I have this in 3 columns:

5   4   3
0   1   2

and I have 3 columns which dictate how many times I want the values iterated:

4   2   3

This function should give me this when dragged over a range:

5   5   5   5   4   4   3   3   3
0   0   0   0   1   1   2   2   2

Does anyone know the best manner to do this?

I have been using some convoluted reasoning to get through this with an array formula ( has the "{}" brackets around it and you have to use Shift+Enter). I am using SUMIF and COUNTIF functions to do some things, but it never really works out.

Here's a hacky VBA solution. This assumes the "repeat counts" are on the first row (4, 2, 3) and the "values to repeat" are on the second row (5, 4, 3, 0, 1, 2).

Sub outputRepeatedValues()
    Dim xStart As Integer, yStart As Integer
    Dim i As Integer, j As Integer
    Dim valueToRepeat As Integer, numTimesRepeat As Integer
    Dim xOffset As Integer, yOffset As Integer

    xStart = ActiveCell.Column
    yStart = ActiveCell.Row

    i = 1
    j = 1
    xOffset = 0
    yOffset = 0

    While Cells(2, j) <> ""
        If Cells(1, i) = "" Then
            i = 1
            yOffset = yOffset + 1
            xOffset = 0
        End If

        numTimesRepeat = Cells(1, i)
        valueToRepeat = Cells(2, j)

        For k = 1 To numTimesRepeat
            Cells(yStart + yOffset, xStart + xOffset) = valueToRepeat
            xOffset = xOffset + 1
        Next k

        j = j + 1
        i = i + 1
    Wend

End Sub

Stick this in a new module. To use this code, select the cell representing the upper left corner of the output region. Then press Alt+F8 to bring up the Macro box, and then you can run the macro.

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