如何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。 如果该字段实际上是空的,那么您将会遇到您正在查找的行为。
这是一个肮脏的,但它的作品的方法:
- 在右侧新build一列。 使用公式
=IF(C2<>"",2,1)
并填充。 - 从窥探中隐藏栏目(只需右键单击顶部的灰色栏标题即可隐藏)
- 按此列而不是Csorting
我终于提出了一个解决scheme,IMO比@Poweruser创build另一个列更加优雅,填充它,隐藏它,然后使用隐藏列进行sorting。 我的方法利用基于条件格式的字体颜色更改并对其进行分类。
- select包含要sorting的空白值的所需列的范围
- 使用条件格式>新规则>'使用公式确定要格式化的单元格',并在文本框中使用公式
=IF(INDIRECT("RC",0)="",TRUE,FALSE)
- select“格式…”,select“字体”选项卡,并将字体颜色更改为非黑色或“自动”,应用更改
- 使用“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