2016-08-12 22 views
2

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 

答えて

1

を消毒。 1秒または2秒かかります

Sub test() 
    Dim arr 
    Dim lctrRow As Long 
    Dim lctrCol As Long 

    arr = Sheet1.UsedRange 

    For lctrRow = LBound(arr, 1) To UBound(arr, 1) 
     For lctrCol = LBound(arr, 2) To UBound(arr, 2) 
      If Trim(arr(lctrRow, lctrCol)) = "" Then 
       arr(lctrRow, lctrCol) = Empty 
      End If 
     Next 
    Next 

    Sheet1.UsedRange.Cells(1, 1).Resize(UBound(arr, 1), UBound(arr, 2)) = arr 
End Sub 

これはずっと減少します。また、ソート/サニタイズを開始するときに計算モードがマナウルであることを確認してください。それも助けになるかもしれない。

+1

ええ、それははるかに優れています。私のマシンで94ミリ秒かかりました。これはソートをもっとはっきりさせるはずですが、私のアプリケーションでは十分であると思います。ありがとうございました。 – RWA4ARC

関連する問題