1

我有几行包含数据和运行宏时与数据相邻的“标志”。例如:
名字| 姓氏| 旗帜

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

目标:
我希望将不带标志的行(即列 C == NULL/空字符串)排序到顶部,然后按 A-> Z 按列 B 排序以获得以下结果:

辛迪 | 卢谁 |
鲍勃 | 洛布劳 | 需要洗澡
约翰 | 史密斯 | 需要洗澡

我尝试过:
使用 Excel 2007 的“排序”,我已经完成了排序依据(C 列)、排序(值)排序依据(A 到 Z)和(Z 到 A)。A 到 Z 和 Z 到 A 都导致标记的行位于顶部,而不是底部。

之前:在此处输入图像描述 之后:
在此处输入图像描述

我最终想要代码,但我目前正试图弄清楚如何手动完成,这样我就可以通过 Excel 的“记录宏”获取代码。

4

3 回答 3

3

根据我上面的评论,问题在于您使用的公式计算结果为空字符串。如果该字段实际上是空的,那么您将拥有您正在寻找的行为。

这是一个肮脏但有效的方法:

  1. 在右侧创建一个新列。使用公式=IF(C2<>"",2,1)并填写。
  2. 隐藏列以防窥探(只需右键单击顶部的灰色列标题即可隐藏它)
  3. 按此列而不是 C 排序。
于 2013-06-24T21:37:00.677 回答
0

我最终提出了一个 IMO 解决方案,它比 @Poweruser 创建另一个列、填充它、隐藏它,然后在隐藏列上使用排序更优雅。我的方法利用基于条件格式的字体颜色更改并对其进行排序。

  1. 选择包含要排序的空白值的列的所需范围
  2. 使用条件格式>新规则>'使用公式确定要格式化的单元格'并在文本框中使用公式=IF(INDIRECT("RC",0)="",TRUE,FALSE)
  3. 选择“格式...”,选择“字体”选项卡并将字体颜色更改为非黑色或“自动”,应用更改
  4. 使用“排序”,将“排序依据”作为空白单元格的列,将“排序依据”设为“字体颜色”,“排序依据”将“自动”更改为您选择的任何颜色并将其设为“顶部”

通过对录制的宏进行一些修改,我得到了以下工作代码(在对“空白”单元格排序后,它还按值排序另一列):

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
于 2013-06-26T22:04:24.140 回答
0

一种解决方案是'在排序前用单引号 ( ) 替换空格。它不可见,但不是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
于 2014-04-20T17:18:27.980 回答