作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的 Excel 电子表格中运行一些 VBA 宏,以帮助我从 View 中消除不相关的数据,然后允许我导出/复制我拥有的整个数据集的子集。我的电子表格大小是 Columns(A:BN) 和 Rows(1:4693),我认为这是一个相当大的数据集。 Columns(A:G) 将始终保持可见。我只对隐藏 Columns(H:BN) 中的内容感兴趣。
首先,如果我想保留列,我将列值设置为“Y”,然后单击“隐藏列”按钮。我通过将此子例程附加到按钮来做到这一点:
Sub Hidecolumn()
Dim p As Range
For Each p In Range("H1:BN1").Cells
If p.Value = "N" Then
p.EntireColumn.Hidden = True
End If
Next p
End Sub
Sub Unhidecolumn()
Dim p As Range
For Each p In Range("H1:BN1").Cells
If p.Value = "Y" Or p.Value = "N" Then
p.EntireColumn.Hidden = False
End If
Next p
End Sub
Sub HideRowsSecond()
Dim srcRng As Range, ws As Worksheet
Set ws = ActiveSheet
Set srcRng = ws.Rows("5:" & ws.Cells(ws.Rows.Count, 4).End(xlUp).Row)
Dim R As Range, hideRng As Range
For Each R In srcRng
If Application.CountA(R.Columns("H:BN").SpecialCells(xlCellTypeVisible)) = 0 Then
If hideRng Is Nothing Then
Set hideRng = R.EntireRow
Else
Set hideRng = Application.Union(hideRng, R.EntireRow)
End If
End If
Next R
If Not hideRng Is Nothing Then hideRng.EntireRow.Hidden = True
MsgBox ("Complete")
End Sub
最佳答案
您可以使用预建的CountA()
工作表函数来计算其中包含数据的单元格的数量。此计数将返回值 0
如果整行是空白的。
我会使用 UsedRange
所以你不会不必要地计算过去的数据。我还将联合范围隐藏并一次隐藏它们,而不是一次一个,以获得更好的性能。
Sub HideRows()
Dim r As Range, hideRng As Range
For Each r In ActiveSheet.UsedRange.Rows
If Application.CountA(r.EntireRow) = 0 Then
If hideRng Is Nothing Then
Set hideRng = r.EntireRow
Else
Set hideRng = Application.Union(hideRng, r.EntireRow)
End If
End If
Next r
If not hideRng is nothing then hideRng.EntireRow.Hidden = True
End Sub
Sub UnHideRows()
ActiveSheet.Cells.EntireRow.Hidden = False
End Sub
Sub HideRows()
Dim r As Range, hideRng As Range
UnHideRows
For Each r In ActiveSheet.UsedRange.Rows
If Application.CountA(r.EntireRow.SpecialCells(xlCellTypeVisible)) = 0 Then
If hideRng Is Nothing Then
Set hideRng = r.EntireRow
Else
Set hideRng = Application.Union(hideRng, r.EntireRow)
End If
End If
Next r
If Not hideRng Is Nothing Then hideRng.EntireRow.Hidden = True
End Sub
H:BN
列之间的可见行,您可以使用以下方法来完成此操作:
Sub HideRows()
Dim srcRng As Range, ws As Worksheet
Set ws = ActiveSheet
Set srcRng = ws.Rows("1:" & ws.Cells(ws.Rows.Count, 1).End(xlUp).Row)
UnHideRows
Dim r As Range, hideRng As Range
For Each r In srcRng
If Application.CountA(r.Columns("H:BN").SpecialCells(xlCellTypeVisible)) = 0 Then
If hideRng Is Nothing Then
Set hideRng = r.EntireRow
Else
Set hideRng = Application.Union(hideRng, r.EntireRow)
End If
End If
Next r
If Not hideRng Is Nothing Then hideRng.EntireRow.Hidden = True
End Sub
srcRng
, 因为使用
Columns()
功能与
UsedRange
有时会导致问题。由于我们不再使用
UsedRange
,我们现在找到最后一个使用行
ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
.
关于excel - 如果单元格范围内的所有可见单元格在 VBA for Excel 中均为空白,如何隐藏行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55929746/
我是一名优秀的程序员,十分优秀!