VBA 中的冒泡排序排序不正确
Bubble Sort in VBA isn't sorting correctly
我正在尝试对一些数据进行冒泡排序,但排序不起作用。我想我必须做一些明显愚蠢的事情。我已经仔细阅读了代码,知道实际排序算法有问题。
Do While Low <= High And Worksheets("Data").Cells(i, Column_EAM_WorkOrderNum) <> ""
CheckVal = (High + Low) / 2
If Worksheets("Data").Cells(i, Column_EAM_WorkOrderNum) = Worksheets("Data2").Cells(CheckVal, Column_KSR_WorkOrderNum) Then
'Copy Data Over
Worksheets("Data").Range("AM1").Offset(i - 1, 0).Value = Worksheets("Data2").Range("A1").Offset(CheckVal - 1, Column_KSR_ServiceID - 1).Value
Worksheets("Data").Range("AN1").Offset(i - 1, 0).Value = Worksheets("Data2").Range("A1").Offset(CheckVal - 1, Column_KSR_CreatedDate - 1).Value
'
If IsNumeric(Column_KSR_Type) = True Then
Worksheets("Data").Range("AO1").Offset(i - 1, 0).Value = Worksheets("Data2").Range("A1").Offset(CheckVal - 1, Column_KSR_Type - 1).Value
End If
Exit Do
ElseIf Worksheets("Data").Cells(i, Column_EAM_WorkOrderNum) < Worksheets("Data2").Cells(CheckVal, Column_KSR_WorkOrderNum) And Worksheets("Data2").Cells(CheckVal, Column_KSR_WorkOrderNum) <> "Service Provider Ref #" Then
Low = CheckVal - 1
Else
High = CheckVal + 1
End If
Loop
我提前道歉:请注意此代码的设置方式 我想不出一种简单的方法来提供最少的可重现代码,而无需复制数百行代码来支持这个简单的块。我希望我只是遗漏了一些明显的东西。
在 ElseIf 和 Else 中交换您的最低价和最高价。
我正在尝试对一些数据进行冒泡排序,但排序不起作用。我想我必须做一些明显愚蠢的事情。我已经仔细阅读了代码,知道实际排序算法有问题。
Do While Low <= High And Worksheets("Data").Cells(i, Column_EAM_WorkOrderNum) <> ""
CheckVal = (High + Low) / 2
If Worksheets("Data").Cells(i, Column_EAM_WorkOrderNum) = Worksheets("Data2").Cells(CheckVal, Column_KSR_WorkOrderNum) Then
'Copy Data Over
Worksheets("Data").Range("AM1").Offset(i - 1, 0).Value = Worksheets("Data2").Range("A1").Offset(CheckVal - 1, Column_KSR_ServiceID - 1).Value
Worksheets("Data").Range("AN1").Offset(i - 1, 0).Value = Worksheets("Data2").Range("A1").Offset(CheckVal - 1, Column_KSR_CreatedDate - 1).Value
'
If IsNumeric(Column_KSR_Type) = True Then
Worksheets("Data").Range("AO1").Offset(i - 1, 0).Value = Worksheets("Data2").Range("A1").Offset(CheckVal - 1, Column_KSR_Type - 1).Value
End If
Exit Do
ElseIf Worksheets("Data").Cells(i, Column_EAM_WorkOrderNum) < Worksheets("Data2").Cells(CheckVal, Column_KSR_WorkOrderNum) And Worksheets("Data2").Cells(CheckVal, Column_KSR_WorkOrderNum) <> "Service Provider Ref #" Then
Low = CheckVal - 1
Else
High = CheckVal + 1
End If
Loop
我提前道歉:请注意此代码的设置方式 我想不出一种简单的方法来提供最少的可重现代码,而无需复制数百行代码来支持这个简单的块。我希望我只是遗漏了一些明显的东西。
在 ElseIf 和 Else 中交换您的最低价和最高价。