Copy value N times in Excel
56,653
Solution 1
Here is one way of doing it without VBA:
- Insert a column to the left of A, so your current A and B columns are now B and C.
- Put
1
in A1 - Put
=A1+C1
in A2 and copy down to A5 - Put an empty string in B5, by just entering a single quote (
'
) in the cell - Put a
1
in E1, a2
in E2, and copy down as to get 1, 2, ..., 10 - Put
=VLOOKUP(E1,$A$1:$B$5,2)
in F1 and copy down.
It should look like this:
| A | B | C | D | E | F |
|----|-------|---|---|----|-------|
| 1 | item1 | 3 | | 1 | item1 |
| 4 | item2 | 2 | | 2 | item1 |
| 6 | item3 | 4 | | 3 | item1 |
| 10 | item4 | 1 | | 4 | item2 |
| 11 | | | | 5 | item2 |
| | | | | 6 | item3 |
| | | | | 7 | item3 |
| | | | | 8 | item3 |
| | | | | 9 | item3 |
| | | | | 10 | item4 |
Solution 2
Here's the VBA solution. I don't quite understand the comment that VBA won't be dynamic. It's as dynamic as you make it, just like a formula. Note that this macro will erase all data on Sheet1 and replace it with the new output. If you want the desired output on a different sheet, then change the reference to Sheet2
or what have you.
Option Explicit
Sub MultiCopy()
Dim arr As Variant
Dim r As Range
Dim i As Long
Dim currRow As Long
Dim nCopy As Long
Dim item As String
'store cell values in array
arr = Sheet1.UsedRange
currRow = 2
'remove all values
Sheet1.Cells.ClearContents
Sheet1.Range("A1") = "A"
For i = 2 To UBound(arr, 1)
item = arr(i, 1)
nCopy = arr(i, 2) - 1
If nCopy > -1 Then
Sheet1.Range("A" & currRow & ":A" & (currRow + nCopy)).Value = item
currRow = currRow + nCopy + 1
End If
Next
End Sub
Author by
user1581199
Updated on December 29, 2020Comments
-
user1581199 over 3 years
I have simple list:
A B item1 3 item2 2 item3 4 item4 1
Need to output:
A item1 item1 item1 item2 item2 item3 item3 item3 item3 item4