2
我在Excel中排序了一個非常大的範圍,它由多個列組成,而不是所有列都被填充。在某些列中,有時會輸入空格,並且單元格的時間爲Empty
。我想要做的是將空白區域和空單元格移動到範圍的底部。目前,excel將頂部的空白值和底部的空白單元格放在一起。或者,我不介意可以通過範圍並用Empty
替代空白值的消毒功能。我寫了一篇,但是我給出的範圍非常慢(接近4000行,需要2分鐘才能完成)。以及我發佈的排序sub
我正在使用。Excel VBA排序範圍,空白和空值在範圍底部
我查看了自定義訂單,但它看起來像需要您指定您計劃使用的所有值。是否可以使用自定義比較功能,而無需編寫全新排序sub
?
Sub SortCallLog()
Application.ScreenUpdating = False
Dim longTime As Double
longTime = Millis
Dim lastRow As Long
Dim ws As Worksheet
Dim sortOrder As Variant
Set ws = Worksheets("CallLog")
Call addToIndexesHV(FirstCBSort, SecondCBSort, ThirdCBSort, FourthCBSort) ' These are global variables referring to the sort order
sortOrder = getSortOrder(False)
lastRow = GetLastRow(ws)
With ws.Sort
.SortFields.Clear
For sortIndex = 0 To getVariantLength(sortOrder) - 1
.SortFields.Add Key:=Range(ConvertCBSortToColRow(CStr(sortOrder(sortIndex)))), Order:=xlAscending, SortOn:=xlSortOnValues, DataOption:=xlSortNormal
Next sortIndex
.Header = xlYes
.MatchCase = False
.SetRange ws.Range("B1:X" & (lastRow))
.Apply
End With
Debug.Print (Millis - longTime)
Application.ScreenUpdating = True
Exit Sub
消毒部
For Each cell In ws.Range("B2:L" & (lastRow)).Rows.Cells
cell.value = Trim(cell.value)
If "" = cell.value Then
cell.value = Empty
End If
Next cell
是的,那好多了,好多了。在我的機器上花了94毫秒。這應該使它更清晰,我認爲這對我的應用程序來說已經足夠了。謝謝。 – RWA4ARC