excel根据单元格条件显示或隐藏行

时间:2017-05-22 20:58:17

标签: excel vba excel-vba

我有一个excel,我有一个宏按钮。功能很简单。我有4个产品及其功能。我想做的是, 必须有显示所有差异或相似之处的按钮 - 特别是因为列表很大。

因此,当有人点击显示相似性时,它将仅显示具有相同值的行,例如第2行,R7,R8,R10,R11 当他们点击显示差异 - R3,R4,R5等。

这是我试过的。

Sub BtnShowdifferences_Click()
Dim R As Range("$B$2:$D$11")
For Each row In R.Rows
For Each cell in row.cells
Dim nextcell = cell + 1
If (cell.Value) == (nextcell.Value)  Then
cell.EntireRow.Hidden = True
End If
Next
Next
End Sub

如何检查整行中所有单元格的值(不包括第一行)。

2 个答案:

答案 0 :(得分:2)

  

如何检查整行中所有单元格的值(不包括第一行)。

这是一个功能。它可以正常使用,也可以作为UDF使用。

Function allCellsEqual(r As Range) As Boolean
  allCellsEqual = Application.CountIf(r, r.Cells(1).Value2) = r.Cells.count
End Function

您可以在每一行(实际数据,而不是整行)上使用它,并采取相应的行动。如果您不想使它成为一个函数,您仍然可以直接在例程中使用逻辑:

Dim R As Range, row as Range
Set R = Range("$B$2:$D$11")  '<-- preferably qualify to sheet, i.e. sheet1.Range(...)
For Each row In R.Rows
  ' row.EntireRow.Hidden = Not allCellsEqual(row)
  ' or directly:
    row.EntireRow.Hidden = Application.CountIf(row, row.Cells(1).Value2) <> row.Cells.count
Next

这将隐藏不同值的行。要隐藏相等值的行,只需使用=代替<>

答案 1 :(得分:0)

你到了那里,但是一些语法已关闭(就像你在VBA中只需要=来比较值)。

这是如何运作的?

Sub BtnShowdifferences_Click()
Dim R As Range, row As Range
Dim iRow    As Long
Set R = Range("$B$2:$D$11")
For Each row In R.Rows
    If row.row <> R.Rows(1).row Then
        With row
            If .Cells(1) = .Cells(2) And .Cells(2) = .Cells(3) And .Cells(3) = .Cells(1) Then
                row.EntireRow.Hidden = True
            End If
        End With
    End If
Next row
End Sub

但是看着它,我确信有一个更快/不同的非VBA解决方案。也许是带过滤器的辅助列?