我在列A中有一个Excel文件:A是名称,B列:B是相关的月份。 同样地(A,B):Tom JAN Tom Jan Tom NOV Tom DEC Jack SEP Jack DEC Jack AUG ......
我现在正试图循环使用它。我通过使用这个"脚本"循环到列的(未知)结尾来克服第一个障碍。
Sub DoWhile()
Dim i As Long
Dim c As Collection
Set c = New Collection
c.Add Cells(1, 1), "Name"
c.Add Cells(1, 2), "Month"
c.Add Cells(1, 3), "Volume"
i = 2
With ActiveSheet
Do While i <= .Rows.Count
If .Cells(i, 1) <> "" Then
c.Add Cells(i, 1), "Name"
c.Add Cells(i, 2), "Month"
c.Add Cells(i, 3), "Volume"
MsgBox c.Item("Name")
MsgBox c.Item("Month")
MsgBox c.Item("Volume")
Else
Exit Do
End If
i = i + 1
Loop
End With
End Sub
问题: 运行时错误&#39; 457&#39;: 此键已与此集合的元素相关联。
似乎我不允许每个键使用多个值。我该如何绕过这个问题?
使用其他语言执行此操作非常简单。我创建一个包含相应列值的列表,只要列表[i-1] == list [i] ...
,就循环显示该列表有人可以帮助我吗?
简而言之:
输入:
A B
Tom JAN
Tom MAR
John NOV
John NOV
John DEC
Marc JUN
Marc JAN
...
输出应该是excel表格:
A B C D
Tom JAN - MAR
约翰 - - -
Marc JAN - - -
等等......
答案 0 :(得分:0)
我认为这更简单:
Dim i As Long
Dim nA(1 To 10000) As String
Dim nB(1 To 10000) As String
i = 2
e = 0
With ActiveSheet
Do While i <= .Rows.Count
If .Cells(i, 1) <> "" Then
If Cells(i - 1, 1) = Cells(i, 1) Then
nB(e) = nB(e) & " - " & Cells(i, 2)
Else
e = e + 1
nA(e) = Cells(i, 1)
nB(e) = Cells(i, 2)
End If
MsgBox nA(e) & " : " & nB(e)
Else
Exit Do
End If
i = i + 1
Loop
End With
你不能在集合中使用相同的密钥......
答案 1 :(得分:0)
我建议使用类似下面的内容。代码将找到当前区域,然后根据A1和前3列中的行调整大小。然后我打印到MsgBox,但如果需要,您可以将它们粘贴到另一个工作表上。
Dim arr As Variant
Dim i As Integer
arr = Range("A1").CurrentRegion.Resize(Range("A1").End(xlDown).Row, 3).Value
For i = 1 To UBound(arr)
MsgBox arr(i, 1)
MsgBox arr(i, 2)
MsgBox arr(i, 3)
Next i