2016-10-04 38 views
-2

我使用下面的VBA脚本来隐藏与活动单元格行的A列中匹配单元格值的所有行:Excel VBA - 在列A中查找特定值并隐藏活动单元行下面的所有行?

If Not Intersect(ActiveCell, Range("I:I")) Is Nothing And ActiveCell.Value = "-" Then 

BeginRow = 1 
    EndRow = 50000 
    ChkCol = 1 

    For RowCnt = BeginRow To EndRow 
     If Cells(RowCnt, ChkCol).Value = ActiveCell.Offset(1, -8) Then 
      Cells(RowCnt, ChkCol).EntireRow.Hidden = True 
     End If 
    Next RowCnt 

End If 

因此,举例来说,如果我都用35号5排A列像这样:

A   I 
35   Click to hide <----- First Row 
35   
35   
35   
35   

然后所有这些行将被隐藏。但是,我不希望第一个实例的行被隐藏。

+1

将BeginRow更改为2?无论谁为你写这段代码都很明显...... – vacip

+0

@vacip改变beginRow意味着改变查找范围。我不想改变我的行的查找范围。我只想要单元格值为35的行的第一个实例不被隐藏 –

+0

啊,这是不同的。为什么不添加一个If来检查RowCnt> 1? – vacip

回答

0

添加两个变量(一个变体来保持要比较的值和一个布尔验证中发现的第一值)

Dim vCllValue As Variant 
Dim bl1stVal As Boolean 

这是修改后的代码:

If Not Intersect(ActiveCell, Range("I:I")) Is Nothing And ActiveCell.Value = "-" Then 
    BeginRow = 1 
    EndRow = 50000 
    ChkCol = 1 

    bl1stVal = False 
    vCllValue = ActiveCell.Offset(1, -8).Value 
    For RowCnt = BeginRow To EndRow 
     If Cells(RowCnt, ChkCol).Value = vCllValue Then 
      If Not (bl1stVal) Then 
       bl1stVal = True 
      Else 
       Cells(RowCnt, ChkCol).EntireRow.Hidden = True 
End If: End If: Next: End If 

注意到代码将比较ActiveCell下面一行中的值,我假设该部分是正确的,否则让我知道并将进行必要的调整。

相关问题