簡體   English   中英

如何排序Excel列ST行與空/空列單元格在頂部?

[英]How to Sort Excel Column S.T. Rows w/ Null/Empty Column Cell Go On Top?

運行宏時,我有幾行具有數據和“標志”的行,這些行與數據相鄰。 例如:
名字 | 姓氏 |

John  | Smith  | Needs a Bath 
Cindy | LuWho  | 
Bob   | Loblaw | Needs a Bath

目標:
我希望行w / o標志(即列C == NULL /空字符串)排序到頂部,然后按B列排序A-> Z得到這個:

辛迪| LuWho |
鮑勃| Loblaw | 需要洗個澡
約翰| 史密斯| 需要洗個澡

我試過的:
使用Excel 2007的“排序”,我完成了排序依據(C列),排序(值)排序依據(A到Z)和(Z到A)。 A到Z和Z到A都會導致頂部而不是底部的標記行。

之前: 在此輸入圖像描述 后:
在此輸入圖像描述

我最終想要代碼,但我現在正試圖弄清楚如何手動完成它,以便我可以通過Excel的“記錄宏”獲取代碼。

根據我上面的評論,問題是您使用的計算結果為空字符串。 如果該字段實際上是空的,那么您將擁有所需的行為。

這是一種骯臟但卻有效的方法:

  1. 在右側創建一個新列。 使用公式=IF(C2<>"",2,1)並填寫。
  2. 從窺探中隱藏列(只需右鍵單擊頂部的灰色列標題即可隱藏它)
  3. 按此列排序而不是C.

我結束了IMO的解決方案,比@Poweruser創建另一個列,填充它,隱藏它,然后在隱藏列上使用sort更優雅。 我的方法使用基於條件格式的字體顏色更改並對其進行排序。

  1. 選擇包含要排序的空白值的所需列范圍
  2. 使用條件格式>新規則>'使用公式確定要格式化的單元'並在文本框中使用公式=IF(INDIRECT("RC",0)="",TRUE,FALSE)
  3. 選擇“格式化...”,選擇“字體”選項卡並將字體顏色更改為非黑色或“自動”,應用更改
  4. 使用'Sort','Sort By'是帶有空白單元格的列,'Sort On'是'Font Color',對於'Order By',將Automatic更改為您選擇的任何顏色並將其設置為'On Top'

通過對錄制的宏進行一點修補,我得到了以下工作代碼(在對'空'單元格進行排序后,它還按值排序另一列):

For oRow = 2 To iFinalRow
    ActiveWorkbook.ActiveSheet.Cells(oRow, 5).Select
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=IF(INDIRECT(""RC"",0)="""",TRUE,FALSE)"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Font
        .ThemeColor = xlThemeColorLight2
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
Next oRow

'Sort
ActiveWorkbook.ActiveSheet.SORT.SortFields.Clear
ActiveWorkbook.ActiveSheet.SORT.SortFields.Add(Range("E:E"), _
    xlSortOnFontColor, xlAscending, , xlSortNormal).SortOnValue.Color = RGB(31, 73, 125)
ActiveWorkbook.ActiveSheet.SORT.SortFields.Add _
    Key:=Range("D1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
    :=xlSortNormal
With ActiveWorkbook.ActiveSheet.SORT
    .SetRange Range("A:F")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

其中一個解決方案是在排序之前用單引號( ' )替換空格。 它不可見但不是NULL 請參閱代碼示例:

Public Sub Sort_blanks()

    Dim lastrow As Integer

    ' The number of the last row
    lastrow = Cells(Rows.Count, 1).End(xlUp).Row

    ' Replace blanks with with single quote
    Range("C2:C" & lastrow).Select
    Application.DisplayAlerts = False
    On Error Resume Next
    Selection.SpecialCells(xlCellTypeBlanks).FormulaR1C1 = "'"
    Application.DisplayAlerts = True
    On Error GoTo 0

    ' Sort
    Range("A:C").Sort key1:=Range("C:C"), key2:=Range("B:B"), _
        order1:=xlAscending, order2:=xlAscending, Header:=xlYes

End Sub

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM