我最终提出了一个 IMO 解决方案,它比 @Poweruser 创建另一个列、填充它、隐藏它,然后在隐藏列上使用排序更优雅。我的方法利用基于条件格式的字体颜色更改并对其进行排序。
- 选择包含要排序的空白值的列的所需范围
- 使用条件格式>新规则>'使用公式确定要格式化的单元格'并在文本框中使用公式
=IF(INDIRECT("RC",0)="",TRUE,FALSE)
- 选择“格式...”,选择“字体”选项卡并将字体颜色更改为非黑色或“自动”,应用更改
- 使用“排序”,将“排序依据”作为空白单元格的列,将“排序依据”设为“字体颜色”,“排序依据”将“自动”更改为您选择的任何颜色并将其设为“顶部”
通过对录制的宏进行一些修改,我得到了以下工作代码(在对“空白”单元格排序后,它还按值排序另一列):
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