使用Excel VBA(降序和升序)按列值对数据进行sorting

我一直在处理一个VBAmacros,它为SolidWorks界面中的每个选定行导出一个单位vector的值,并且我想在将单位vector写入Excel之前对它进行sorting。 我需要将Excel范围B2sorting为D2(B2表示单位vector的第i部分,C2表示部分j,D2表示部分k),范围取决于所选行的数量。 每个选定的行代表一个向量,每个向量代表Excel中的一行。

我想按D列对它们进行sorting,然后我想用单元格D2中的最大值(单元格D3中的最小值)对它们进行sorting,然后从那里开始递增。 它会先上升,然后从第二排下降。

所以,如果有四个选定的行,D列将如下所示:

-0.99221 -1 -0.99789 -0.99664

目前看起来像这样:

Excel截图

但它不知道最初需要sorting多less行。 这是相关的代码:

Dim r As Long Dim ws As Worksheet Set ws = ActiveSheet For q = 3 To NumberOfSelectedItems Columns("B:D").Sort key1:=Range("D2:D2"), order1:=xlDescending, Header:=xlYes r = ws.Cells(ws.Rows.Count, 4).End(xlUp).Rows Range("B3:D2" & r).Sort key1:=Range("D2:D2"), order1:=xlAscending, Header:=xlNo bRes = WriteToExcel(((q - 1) * 1) + 1, vModelSelPt4, "Unit Vector") Next 

目前,代码给我1004错误。 我认为这是一个小错误,但我不确定。 如何按上述顺序按D列sorting?

 Private Function WriteToExcel(startRow As Integer, data As Variant, Optional label As String = "") As Boolean 'get the results into excel With xlWorkbook.ActiveSheet .Cells(startRow + 2, 2).Value = data(0) .Cells(startRow + 2, 3).Value = data(1) .Cells(startRow + 2, 4).Value = data(2) End With End Function 

上面的代码是将数据写入Excel的函数; 这是非常相关的。 这些都是在SolidWorks API中完成的,所以语法有些不同。

除了你的自定义函数WriteToExcel (你没有包括在你的代码示例中,因此我认为是不相关的)的行外,你的问题中没有发布任何错误。

所以,除非你在这个函数中有错误,否则上面的代码应该是完美无缺的。

对于sorting,我build议您按升序对D列进行sorting,然后将已sorting表格的行(D列中的最大值)从表格底部移到顶部。 下面的sub就是这样的:

 Option Explicit Public Sub SortIt() Dim lngLastRow As Long With ThisWorkbook.Worksheets(1) lngLastRow = .Cells(.Rows.Count, "D").End(xlUp).Row With .Sort .SortFields.Clear .SortFields.Add Key:=Range("D2:D" & lngLastRow), _ SortOn:=xlSortOnValues, Order:=xlAscending .SetRange Range("A1:D" & lngLastRow) .Header = xlYes .Apply End With .Range("A2:D" & lngLastRow).Copy Destination:=Range("A3") .Range(.Cells(lngLastRow + 1, 1), .Cells(lngLastRow + 1, 4)).Cut _ Destination:=Range("A2") End With End Sub 

请注意,上面的代码假定表格在表格1上。如果不是这种情况,那么你应该调整代码。 如果您有任何疑问或者有任何问题,请告诉我。

编辑:将复制命令更改为剪切。