所以我有2列A和B,其中包含数字,就像这样。
A B
96.66666667 0
193.3333333 0
290 0
386.6666667 0
483.3333333 1
725 22
966.6666667 19
1208.333333 10
我想要的代码是查看B列,如果其值为0,则不要在列C1中放任何内容。如果列B> 0,则在A中取其对应的值,并列出A值,B次。所以我在C中的最终目标栏看起来像:
483.3333333333333
725
725
725
725
etc til 725 happens 22 times then
966
966
etc until 966 happens 19 times etc.
有什么想法吗?
答案 0 :(得分:0)
您可以使用以下简单代码执行此操作:
Sub trasposeNumbers()
Dim i
For Each i In Range("B1:B100")
If i.Value = 0 Then
'do nothing
Else
Range(Cells(i.Row, 1), Cells(i.Row, i.Value)).Value = i.Offset(0, -1).Value
End If
Next i
End Sub
这样你就可以覆盖B列中的值,只需注意。
答案 1 :(得分:0)
作为一个没有任何后期转置的快速解决方案,你可以使用它:
Sub test()
Dim values As Variant, counter As Variant
values = [A1:A100].Value 'change the ranges to fit your needs
counter = [B1:B100].Value
Dim output() As Variant
ReDim output(0 To Application.WorksheetFunction.Sum(counter) - 1, 0)
Dim i As Long, j As Long
While i <= UBound(output)
j = j + 1
For i = i To counter(j, 1) + i - 1
output(i, 0) = values(j, 1)
Next
Wend
[C1].Resize(UBound(output) + 1).Value = output
'change C1 to the cell to start your output
End Sub
它会生成一个数组(output
),只需从C1
开始粘贴(可以更改)