Vba 忽略活动单元格上方的隐藏行,以将活动单元格与上面第一个对应的可见单元格进行比较
摘要(tl;dr):我尝试创建代码,无论行是否隐藏,代码都应该只比较可见值。示例:取I= ROWNATORE,X= CULM:如果没有隐藏行,代码应该比较席的值和XI-1。如果隐藏行I-1和I-2,则代码应该比较席的值和XI-3。您事先不知道隐藏了哪些行 Long:作为一名新手,我在这里有点绕圈子。我在这个论坛和其他论坛上进行了广泛的搜索,但我认为现在有点遥不可及。 如果有人能给我一个正确方向的提示,我将不胜感激: 目标:在不考虑隐藏行的情况下清理布局 其效果是数据透视表可以轻松完成的,但我有一个共享工作簿,用户需要更新某些单元格,因此数据透视表不可用 设置:Vba 忽略活动单元格上方的隐藏行,以将活动单元格与上面第一个对应的可见单元格进行比较,vba,excel,Vba,Excel,摘要(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
或内部员工:此处为F列,从第5行开始
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的值。今天中午将尝试上传一个示例。