我想知道是否有人可以帮助我扩展下面的代码来处理6列。它已经适用于任何数量的行。如何为列添加相同的结构?用户名:assylias构造了这段代码,我试图根据我的排序需求来调整它。VBA排序 - 扩展6列的代码
问题: 我需要排序是这样的
X A 3
X B 7
X C 2
X D 4
Y E 8
Y A 9
Y B 11
Y F 2
它需要如下进行排序:其中,X和Y列代表组。字母:A,B,C,D,E,F代表该组的成员。这些数字是我们正在比较的一些指标。获得该编号的最高编号和相关成员是该编组的“领导者”,并且我想对数据进行排序,以便每个编组的每个领导者按照以下方式与该编组的每个成员进行比较:
X B A 3
X B C 2
X B D 4
Y B E 8
Y B A 9
Y B F 2
说明:B恰好是两组的领导者。我需要将他与其他所有成员以及他们单元右侧的数据进行比较,并列出他们获得的数字。
问题:配备Assylias的代码,我现在试图扩展到我的数据集。我的数据集有6列,所以有很多定性列来描述每个成员(如状态,ID#等),我需要帮助扩展代码来涵盖这一点。另外,如果可能的话,对某些步骤(可能以评论形式)的解释将使我能够更好地连接点。 (大多数情况下,我不明白是什么dict1/dict2是和他们在做...(dict1.exists(数据(i,1)),例如不明摆着我。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
doIt
End Sub
Public Sub doIt()
Dim data As Variant
Dim result As Variant
Dim i As Long
Dim j As Long
Dim dict1 As Variant
Dim dict2 As Variant
Set dict1 = CreateObject("Scripting.Dictionary")
Set dict2 = CreateObject("Scripting.Dictionary")
data = Sheets("Sheet1").UsedRange
For i = LBound(data, 1) To UBound(data, 1)
If dict1.exists(data(i, 1)) Then
If dict2(data(i, 1)) < data(i, 3) Then
dict1(data(i, 1)) = data(i, 2)
dict2(data(i, 1)) = data(i, 3)
End If
Else
dict1(data(i, 1)) = data(i, 2)
dict2(data(i, 1)) = data(i, 3)
End If
Next i
ReDim result(LBound(data, 1) To UBound(data, 1) - dict1.Count, 1 To 4) As Variant
j = 1
For i = LBound(data, 1) To UBound(data, 1)
If data(i, 2) <> dict1(data(i, 1)) Then
result(j, 1) = data(i, 1)
result(j, 2) = dict1(data(i, 1))
result(j, 3) = data(i, 2)
result(j, 4) = data(i, 3)
j = j + 1
End If
Next i
With Sheets("Sheet2")
.Cells(1, 5).Resize(UBound(result, 1), UBound(result, 2)) = result
End With
结束子
我做了一些研究,并指出,“字典“在这个代码中使用的对象不支持多维度,我们是否应该将它重新做为一个数组呢? – Dman 2012-03-14 02:50:37
This c应该是一个解决方案。你可以在这些线程中找到一些灵感:http://stackoverflow.com/questions/4873182/sorting-a-multidimensionnal-array-in-vba和http://stackoverflow.com/questions/152319/vba-array-sort功能 – JMax 2012-03-14 07:49:13