我有一个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
如何检查整行中所有单元格的值(不包括第一行)。
答案 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解决方案。也许是带过滤器的辅助列?