【发布时间】:2012-08-04 04:29:54
【问题描述】:
我有简单的清单:
A B
item1 3
item2 2
item3 4
item4 1
需要输出:
A
item1
item1
item1
item2
item2
item3
item3
item3
item3
item4
【问题讨论】:
标签: excel copy duplicates
我有简单的清单:
A B
item1 3
item2 2
item3 4
item4 1
需要输出:
A
item1
item1
item1
item2
item2
item3
item3
item3
item3
item4
【问题讨论】:
标签: excel copy duplicates
这是不使用 VBA 的一种方法:
1放入A1=A1+C1放入A2并向下复制到A5')1,在E2中放一个2,然后复制下来得到1、2、...、10=VLOOKUP(E1,$A$1:$B$5,2) 输入F1 并向下复制。应该是这样的:
| 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 解决方案。我不太明白 VBA 不会是动态的评论。它就像你做的那样充满活力,就像一个公式。请注意,此宏将擦除 Sheet1 上的所有数据并将其替换为新的输出。如果您希望在不同的工作表上获得所需的输出,请将引用更改为 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
【讨论】:
#VALUE 或- 等来表示它)。从最终用户 POV 看来,这似乎更有效,并且逻辑更易于遵循。不过,它可能更通用一些。 :)