Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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
Excel 如果单元格等于下一个可见单元格,则隐藏行_Excel_Vba_Visible - Fatal编程技术网

Excel 如果单元格等于下一个可见单元格,则隐藏行

Excel 如果单元格等于下一个可见单元格,则隐藏行,excel,vba,visible,Excel,Vba,Visible,我试图编写一个宏,如果单元格值等于该列中的下一个可见单元格并在整个列中循环,则隐藏该行。我读到SpecialCells(xlCellTypeVisible)最多只能处理8192个单元格,我的电子表格有15000行 我尝试过类似的方法,但想将其限制为仅可见的细胞 Sub Test() For i = 7 To 15258 If Range("P" & i).Value = Range("P" & i + 1).Value Then Rows(i).Hidde

我试图编写一个宏,如果单元格值等于该列中的下一个可见单元格并在整个列中循环,则隐藏该行。我读到SpecialCells(xlCellTypeVisible)最多只能处理8192个单元格,我的电子表格有15000行

我尝试过类似的方法,但想将其限制为仅可见的细胞

Sub Test()
For i = 7 To 15258
    If Range("P" & i).Value = Range("P" & i + 1).Value Then
        Rows(i).Hidden = True
    End If
Next i
End Sub
我试图寻找解决方案,但还没有找到


谢谢

如果不能稍微优化一下,我会感到惊讶,但它可以满足您的需要

您可以按照代码本身中的注释来了解它在做什么,但简而言之,您使用的是
For…Next
语句来循环查看可见单元格。对于每个可见单元格,您将搜索下一个可见单元格,然后检查是否匹配。如果有,则将该单元格添加到跟踪代码末尾要隐藏的所有行的特殊区域,然后将其隐藏

Sub Test()

    Dim ws As Worksheet, lookupRng As Range, rng As Range, lstRow As Long
    Set ws = ThisWorkbook.Worksheets(1)
    lstRow = 15258
    Set lookupRng = ws.Range("P7:P" & lstRow)

    Dim rngToHide As Range, i As Long
    For Each rng In lookupRng.SpecialCells(xlCellTypeVisible)
        Application.StatusBar = "Checking row " & rng.Row & " for matches."
        For i = rng.Row + 1 To lstRow                   'Loop through rows after rng
            If Not ws.Rows(i).Hidden Then               'Check if row is hidden
                If rng.Value = ws.Cells(i, "P") Then    'check if the non-hidden row matches
                    If rngToHide Is Nothing Then        'Add to special range to hide cells
                        Set rngToHide = ws.Cells(i, "P")
                    Else
                        Set rngToHide = Union(rngToHide, ws.Cells(i, "P"))
                    End If
                End If
                Exit For                                'Exit the second For statement
            End If
        Next i
    Next rng

    Application.StatusBar = "Hiding duplicate rows"
    If Not rngToHide Is Nothing Then rngToHide.EntireRow.Hidden = True
    Application.StatusBar = False

End Sub

8192的限制已通过Excel 2010修复-您仍在使用旧版本吗?请看,它是8192个区域(非连续单元格),而不是单元格,因此对于可见单元格,获得错误的可能性较小。发帖前你测试过了吗?谢谢你得到了代码K.Davis。出于某种原因,它并没有隐藏重复的单元格。应用高级过滤器后,第P行中的一个示例输出是:2 2 3 4 5 6 6 7 8 12 20 24您需要将
此工作簿中的
1
更改为您正在使用的任何工作表索引,或仅使用工作表名称
…工作表(“数据表”)
在引号之间。我第一次错过了那部分。谢谢现在可以了,太好了!很高兴我能帮忙