Excelで非常に大きな範囲がソートされていますが、複数の列で構成されていますが、すべてが満たされていません。いくつかの列では、空白が入力された時刻と、セルがEmpty
である時刻があります。私がしたいのは、空白と空のセルの両方を範囲の底に移動させることです。現在、Excelは空白の値を上部に、空のセルは下部に配置します。あるいは、範囲を超えて白いスペースの値をEmpty
のものに置き換えることができる消毒機能は気にしません。私は1つ書いたが、与えられた範囲(約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
実際の範囲とsheet1.usedrangeを交換あなたの細胞
を消毒するためにセクションに代わり、各セル用アレイ用の
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