在Excel中复制值N次

我有简单的列表:

AB item1 3 item2 2 item3 4 item4 1 

需要输出:

  A item1 item1 item1 item2 item2 item3 item3 item3 item3 item4 

这是没有VBA的一种方法:

  1. 在A的左边插入一列,所以当前的A和B列现在是B和C.
  2. 把A1放在A1
  3. 在A2中放置=A1+C1并向下复制到A5
  4. 在B5中input一个空string,在单元格中input单引号( '
  5. 在E1中放一个1 ,在E2中放一个2 ,并抄下来得到1,2,…,10
  6. 在F1中放入=VLOOKUP(E1,$A$1:$B$5,2)并复制下来。

它应该是这样的:

 | 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 | 

这是VBA解决scheme。 我不太了解VBA不会dynamic的评论。 它就像一个公式一样dynamic。 请注意,此macros将删除Sheet1上的所有数据,并将其replace为新的输出 。 如果您希望在不同的工作表上输出所需的输出,请将引用更改为Sheet2或您有什么。

 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