忽略活动单元格上方的隐藏行,以将活动单元格与

时间:2017-01-08 20:58:49

标签: excel vba excel-vba

摘要(tl; dr):我尝试创建隐藏行或不隐藏行的代码,代码应仅比较可见值。示例:取i = Rownumber,X = Colum:如果没有隐藏行,则代码应比较Xi与Xi-1的值。如果隐藏行i-1和i-2,则代码应该比较Xi与Xi-3的值。您事先不知道哪些行被隐藏。 Sample file

长:作为一个新手,我在这里跑了一圈。我在这个和其他论坛上广泛搜索,但我认为现在有点遥不可及。 如果有人能给我一个正确方向的暗示,我将非常感激:

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

效果是数据透视表可以轻松完成的,但我有一个共享工作簿,用户需要更新某些单元格,因此数据透视表已经用完了。

设置向上:

  1. 外部(E栏)可以有几个内部工作人员
  2. 内部(列F)可以用于多个外部
  3. 由于过滤,某些行将被隐藏。
  4. 用户可以排序: 外部员工,从第5行开始 或内部员工:此处列F,从第5行开始
  5. 我尝试编写VBA代码:

    1. 如果按外部排序:

      如果,则单元格Ei的值 = 首先可见单元格abover E i 然后 单元格Ei = 字体白色

      IF 细胞Ei的值 = 第一个可见细胞E i-1 AND 的值Cell Fi = first Visible Cell F i-1 然后 Cell Fi = font white

      < / LI>
    2. 同样的想法,但按内部人员排序

    3. 我的代码:

      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列。

      • 代码没有考虑隐藏的行,这是练习的全部目的。

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

      帮助?

      编辑:我成功地使用条件格式和聚合在外部排序,但在内部排序时它会分解一点。因此我在看VBA。

0 个答案:

没有答案