如何sortingExcel列ST行W /空/空列单元格顶部?

在macros运行时,我有几行数据和“标志”与数据相邻。 例如:
名字 | 姓氏 |

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

目标:
我想要无标记的行(即列C == NULL /空string)被sorting到顶部,然后按A – > Z列sorting以得到这个:

辛迪| LuWho |
Bob | Loblaw | 需要一个浴
约翰| 史密斯| 需要一个浴

我试过的东西:
使用Excel 2007的“sorting”,我已经完成了sorting(列C),sorting(值)sorting(A到Z)和(Z到A)。 A到Z和Z到A都会使标记的行位于顶部,而不是底部。

之前: 在这里输入图像描述 后:
在这里输入图像描述

我最终想要的代码,但我目前正在尝试弄清楚如何手动,所以我可以通过Excel的“loggingmacros”获得代码。

根据我上面的评论,问题是你正在使用一个公式计算为一个空string。 如果该字段实际上是空的,那么您将会遇到您正在查找的行为。

这是一个肮脏的,但它的作品的方法:

  1. 在右侧新build一列。 使用公式=IF(C2<>"",2,1)并填充。
  2. 从窥探中隐藏栏目(只需右键单击顶部的灰色栏标题即可隐藏)
  3. 按此列而不是Csorting

我终于提出了一个解决scheme,IMO比@Poweruser创build另一个列更加优雅,填充它,隐藏它,然后使用隐藏列进行sorting。 我的方法利用基于条件格式的字体颜色更改并对其进行分类。

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

对logging的macros进行修改后,我得到了下面的工作代码(在对“空白”单元格进行sorting后,也按值另一列进行sorting):

 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 

其中一个解决scheme是在sorting前用单引号( ' )replace空格。 它不可见,但不是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