简单的Excel代码数组问题

时间:2016-01-27 22:34:13

标签: arrays excel excel-vba vba

所以我有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.

有什么想法吗?

2 个答案:

答案 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开始粘贴(可以更改)