忽略活动单元格上方的隐藏行,将活动单元格与上面第一个对应的可见单元格进行比较

总结(tl; dr):我尝试创build隐藏或不隐藏行的代码,代码应仅比较可见值。 例如:取i = Rownumber,X = Colum:如果没有行被隐藏,代码应该比较Xi和Xi-1的值。 如果第i-1行和第i-2行被隐藏,代码应该比较Xi和Xi-3的值。 事先不知道哪些行是隐藏的。 示例文件

龙:作为一个新手,我在这里有一些圈子。 我在这个论坛和其他论坛上进行了广泛的search,但是我认为现在有些遥不可及。 如果有人能给我一个正确的方向提示,我将非常感激:

目标:清理布局,同时不考虑隐藏的行。

效果是一个数据透视表可以很容易地做,但我有一个共享的工作簿,用户需要更新某些单元格,所以透视表已经出来。

build立:

  1. 外部(E列)可以有几个内部为他工作
  2. 内部(F栏)可以为几个外部工作
  3. 由于过滤,某些行将被隐藏。
  4. 用户可以sorting:外部员工,从第5行开始
    或者内部员工:这里F列,从第5行开始

我试图写VBAcode,所以:

  1. 如果按外部sorting:

    如果单元格的值Ei =第一个可见单元格上的E我然后单元格Ei =字体白色

    如果单元格的值Ei =第一个可见单元格E i-1 并且单元格值Fi =首先可见单元格F i-1, 单元格Fi =字体白色

  2. 同样的想法,但sorting在内部的人

我的代码:

Private Sub CommandButton23_Click() 'ignore hidden rows above active cells to compare active cells with the first corresponding visible cell above Dim sht As Worksheet Dim LastRow As Long Dim CurRow As Long Set sht = ActiveWorkbook.Worksheets("2016") 'Find Last Row LastRow = sht.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row 'compare with first visible cell above i = 1 For CurRow = 6 To LastRow If sht.Rows(CurRow - i).EntireRow.Hidden = False Then If Range("E" & CurRow) = Range("E" & CurRow - 1) Then Range("E" & CurRow).Font.Color = vbGreen If Range("E" & CurRow) = Range("E" & CurRow - 1) And Range("F" & CurRow) = Range("F" & CurRow - 1) Then Range("F" & i).Font.Color = vbGreen Else: i = i + 1 End If Next CurRow End Sub 

我的问题

  • 代码适用于E列,但不适用于F列,当没有行被隐藏。

  • 代码不考虑隐藏行,这个练习的全部目的。

  • 代码不会对sorting/隐藏行中的更改做出反应。

帮帮我?

编辑:我成功的条件格式和聚合sorting外部,但它分解了一些内部sorting时。 因此,我正在看VBA。