未能使用集合

我有3列7行数字在每个。 我的代码应该是:

  1. 确定我select哪一列
  2. 从我没有select并添加到集合的列中获取所有数字(按顺序,这很重要)
  3. 从我select的列中获取所有数字并将它们添加到集合中(也按顺序)
  4. 获取剩余列中的所有数字并将其添加到集合中。
  5. 为了从第一列到最后一列,从第一列到最后一列,放置集合内部的项目

但是,似乎每次都会得到某种随机的顺序。

这是我第一次使用集合。 任何人都可以发现我做错了什么?

样本数据

样本数据

应该发生什么

应该发生什么

究竟发生了什么

究竟发生了什么

当然,罪魁祸首

Option Explicit Public vez As Long Public grupo As New Collection Sub magic(coluna As Long) Dim row As Long Dim col As Long Dim i As Long Set grupo = Nothing If vez < 3 Then If coluna = 1 Then For row = 1 To 7 grupo.Add Cells(row, 2) Next row For row = 1 To 7 grupo.Add Cells(row, 1) Next row For row = 1 To 7 grupo.Add Cells(row, 3) Next row ElseIf coluna = 2 Then For row = 1 To 7 grupo.Add Cells(row, 1) Next row For row = 1 To 7 grupo.Add Cells(row, 2) Next row For row = 1 To 7 grupo.Add Cells(row, 3) Next row ElseIf coluna = 3 Then For row = 1 To 7 grupo.Add Cells(row, 2) Next row For row = 1 To 7 grupo.Add Cells(row, 3) Next row For row = 1 To 7 grupo.Add Cells(row, 1) Next row End If i = 1 For row = 1 To 7 For col = 1 To 3 Cells(row, col) = grupo.Item(i) i = i + 1 Next col Next row vez = vez + 1 End If End Sub 

您正在将一个Cell添加到Collection ,但是我认为您确实需要添加Cell的Value (以便在将它添加到集合中时使用单元格中的Value重写,而不是写出单元格中的值当你将它写入新的位置时)。

 Option Explicit Public vez As Long Public grupo As New Collection Sub magic(coluna As Long) Dim row As Long Dim col As Long Dim i As Long Set grupo = Nothing If vez < 3 Then If coluna = 1 Then For row = 1 To 7 grupo.Add Cells(row, 2).Value Next row For row = 1 To 7 grupo.Add Cells(row, 1).Value Next row For row = 1 To 7 grupo.Add Cells(row, 3).Value Next row ElseIf coluna = 2 Then For row = 1 To 7 grupo.Add Cells(row, 1).Value Next row For row = 1 To 7 grupo.Add Cells(row, 2).Value Next row For row = 1 To 7 grupo.Add Cells(row, 3).Value Next row ElseIf coluna = 3 Then For row = 1 To 7 grupo.Add Cells(row, 2).Value Next row For row = 1 To 7 grupo.Add Cells(row, 3).Value Next row For row = 1 To 7 grupo.Add Cells(row, 1).Value Next row End If i = 1 For row = 1 To 7 For col = 1 To 3 Cells(row, col).Value = grupo.Item(i) i = i + 1 Next col Next row vez = vez + 1 End If End Sub 

在这里输入图像说明

为了我的下一个魔术,我要把所有的那些For row = 1 To 7消失

Alakazam !!!!

 Option Explicit Public vez As Long Public grupo As New Collection Sub magic(coluna As Long) Dim i As Long Dim c As Range, Source As Range Set Source = Range(Choose(coluna, "B1:B7,A1:A7,C1:C7", "A1:A7,B1:B7,C1:C7", "B1:B7,C1:C7,A1:A7")) Set grupo = New Collection For Each c In Source grupo.Add c.Value Next For Each c In Source grupo.Add c.Value Next For Each c In Range("A1:C7") i = i + 1 c.Value = grupo.Item(i) Next vez = vez + 1 End Sub 

编辑:检查@ YowE3K答案。 它与集合,而不是数组完美的作品。

用数组replace集合。 数组似乎更容易工作。

 Option Explicit Public vez As Long Sub magic(coluna As Long) Dim grupo(1 To 21) As String Dim row As Long Dim col As Long Dim i As Long i = 1 If vez < 2 Then If coluna = 1 Then For row = 1 To 7 grupo(i) = Cells(row, 3).Value i = i + 1 Next row For row = 1 To 7 grupo(i) = Cells(row, 1).Value i = i + 1 Next row For row = 1 To 7 grupo(i) = Cells(row, 2).Value i = i + 1 Next row ElseIf coluna = 2 Then For row = 1 To 7 grupo(i) = Cells(row, 1).Value i = i + 1 Next row For row = 1 To 7 grupo(i) = Cells(row, 2).Value i = i + 1 Next row For row = 1 To 7 grupo(i) = Cells(row, 3).Value i = i + 1 Next row ElseIf coluna = 3 Then For row = 1 To 7 grupo(i) = Cells(row, 2).Value i = i + 1 Next row For row = 1 To 7 grupo(i) = Cells(row, 3).Value i = i + 1 Next row For row = 1 To 7 grupo(i) = Cells(row, 1).Value i = i + 1 Next row End If i = 1 For row = 1 To 7 For col = 1 To 3 Cells(row, col).Value = grupo(i) i = i + 1 Next col Next row vez = vez + 1 End If End Sub 

现在它按预期工作。