Reputation: 47
I've been looking for it everywhere but I can't seem to find the answer although it seems an regular problem.
I'm trying to automate the duplication of cells in excel. I have two lists: list 1 with values 1,2,3,4 and the second list is with values a,b,c,d. Now I want to have a file where for every value in list 1, the values in list two are duplicated in excel. So:
1 - a
1 - b
1 - c
1 - d
2 - a
2 - b
2 - c
2 - d
3 - a
...
I'm wondering if there's a function within excel or if not a macro that I could use to solve this? For this short list it is of course easy to do with autofill, but when the list consists of a few hundred values, it gets more complicated...
Upvotes: 3
Views: 1697
Reputation: 17475
You can do this also with a few formulas/support columns without VBA:
Let's assume your first category is in column A, starting in A2 and your category is in column B.
=COUNTA($A:$A)-1
(assuming a header row) and C2 equivalent=IF(ISTEXT(E1),1,IF(F2=1,E1+1,E1))
and this in F2: =IF(ISTEXT(F1),1,IF(F1=$C$2,1,F1+1))
=INDEX(A:A,E2+1)
and H for category 2 with the formula =INDEX(B:B,F2+1)
.=C1*C2
In the end it'll look something like this:
You can download the file here.
Upvotes: 2
Reputation:
This should be really easy to understand ...
Open VBE ALT+F11 and right click VBA project. Insert a Module and copy-paste the below code. Hit F5 to run
Sub Main()
Dim number As Range
Dim letter As Range
For Each number In Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row)
For Each letter In Range("B1:B" & Range("B" & Rows.Count).End(xlUp).Row)
With Sheet2
.Range("A" & .Range("A" & Rows.Count).End(xlUp).Row + 1) = number
.Range("B" & .Range("b" & Rows.Count).End(xlUp).Row + 1) = letter
End With
Next
Next
End Sub
The above code assumes that your sheet1 looks like this
and the results will be on Sheet2 like this
Upvotes: 1