在VBA中重排一组行

我是新的VBA,所以我有一些问题整理出来。

我有一组行,我必须logging一个macros来洗牌所有行。 也就是说,运行macros之后,必须保持不变的行。

而事情是,这套价值观不是一个专栏。 有几列是必须考虑的。 必须在不改变整行的情况下进行混洗,并且必须对所有的列进行混洗。

一个非常简单的例子:洗牌之前的值:

A 1

B 2

C 3

洗牌后:

C 3

A 1

B 2

另外,这个代码每次运行都必须生成随机的命令,因此它必须是灵活的。

编辑:我曾尝试使用VLookup,但它变得非常复杂,没有正常运行。

Sub Shuffle() Dim i as Variant Dim j as Variant Dim myTable as Range Set myTable = Sheets(1).Range("A1:C10") 'after setting everything up I tried getting the entire row and assigning it to variables, in the worksheet I have 3 columns. For i=1 to myTable.Rows.Count Col1=Application.WorksheetFunction.Vlookup(... 

在这里,我正在尝试捕获其他列的值,因为我select第一个值。 但问题是,必须随机select第一个值。 这并不一定意味着我将select的第一列的值不应该相同。 我的数据接近于以下内容:

凌晨1点

1 BM

1 CK

2个M ..等等。

所以对于第一行,我也必须能够select以下两行,这是我无法通过Vlookup函数满足的。 也许行的索引值可能用于随机化,但我不知道如何做到这一点。

非常感谢你提前。

假设您在A2:B27中具有A1:B1标题中的数据。 在C1中,放入“OriginalRow”,在D1中input“Rand”。

此代码对Rand列中的行进行sorting,直到每行位于不同的位置。 有26排,很less接pipe5个循环。 即使只有三排,也很less有超过七次。

 Public Sub Shuffle() Dim lCnt As Long Dim rRng As Range Set rRng = Sheet1.Range("A2:D27") 'Record which row it starts on With rRng.Columns(3) .Formula = "=ROW()" .Value = .Value End With Do 'Add a random value for sorting With rRng.Columns(4) .Formula = "=RAND()" .Value = .Value End With 'Sort on random value Sheet1.Sort.SortFields.Clear Sheet1.Sort.SortFields.Add rRng.Columns(4), xlSortOnValues, xlAscending With Sheet1.Sort .SetRange rRng.Offset(-1).Resize(rRng.Rows.Count + 1) .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .Apply End With lCnt = lCnt + 1 'if any rows are the same as the starting row 'do it again Loop Until ShuffleComplete(rRng.Columns(3)) Or lCnt > 100 Debug.Print lCnt End Sub Public Function ShuffleComplete(rRng As Range) As Boolean Dim rCell As Range Dim bReturn As Boolean bReturn = True For Each rCell In rRng.Cells If rCell.Value = rCell.Row Then bReturn = False Exit For End If Next rCell ShuffleComplete = bReturn End Function