Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 忽略活动单元格上方的隐藏行,以将活动单元格与上面第一个对应的可见单元格进行比较_Vba_Excel - Fatal编程技术网

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

Vba 忽略活动单元格上方的隐藏行,以将活动单元格与上面第一个对应的可见单元格进行比较,vba,excel,Vba,Excel,摘要(tl;dr):我尝试创建代码,无论行是否隐藏,代码都应该只比较可见值。示例:取I= ROWNATORE,X= CULM:如果没有隐藏行,代码应该比较席的值和XI-1。如果隐藏行I-1和I-2,则代码应该比较席的值和XI-3。您事先不知道隐藏了哪些行 Long:作为一名新手,我在这里有点绕圈子。我在这个论坛和其他论坛上进行了广泛的搜索,但我认为现在有点遥不可及。 如果有人能给我一个正确方向的提示,我将不胜感激: 目标:在不考虑隐藏行的情况下清理布局 其效果是数据透视表可以轻松完成的,但我有一

摘要(tl;dr):我尝试创建代码,无论行是否隐藏,代码都应该只比较可见值。示例:取I= ROWNATORE,X= CULM:如果没有隐藏行,代码应该比较席的值和XI-1。如果隐藏行I-1和I-2,则代码应该比较席的值和XI-3。您事先不知道隐藏了哪些行

Long:作为一名新手,我在这里有点绕圈子。我在这个论坛和其他论坛上进行了广泛的搜索,但我认为现在有点遥不可及。 如果有人能给我一个正确方向的提示,我将不胜感激:

目标:在不考虑隐藏行的情况下清理布局

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

设置:

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列)可以用于多个外部
  • 由于筛选,某些行将被隐藏
  • 用户可以根据以下内容进行排序: 外部员工,从第5行开始
    或内部员工:此处为F列,从第5行开始
  • 我尝试编写VBAcode,以便:

  • 如果按外部排序:

    如果单元格Ei的值=首先可见单元格Ei上方 单元格Ei=字体白色

    如果单元格Ei的值=第一次可见单元格Ei-1单元格Fi的值=第一次可见单元格Fi-1然后单元格Fi字体白色

  • 相同的想法,但按内部人员分类

  • 我的代码:

    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。

    如果没有隐藏行,您预计会发生什么?感谢您花时间回答。当没有隐藏行时,代码应将Ei与Ei-1和Fi与Fi-1进行比较。例如:如果行i-1和i-2被隐藏,则代码应比较Ei和Ei-3以及Fi和Fi-3的值。今天中午将尝试上载一个示例。如果没有隐藏行,您预计会发生什么情况?感谢您花时间回复。当没有隐藏行时,代码应将Ei与Ei-1和Fi与Fi-1进行比较。例如:如果行i-1和i-2被隐藏,则代码应比较Ei和Ei-3以及Fi和Fi-3的值。今天中午将尝试上传一个示例。