【问题标题】:How to loop through columns and hide them based on a specified range of each column?如何循环遍历列并根据每列的指定范围隐藏它们?
【发布时间】:2022-01-12 13:42:02
【问题描述】:

我正在处理 Excel 中的一个宏,该宏将隐藏所有为空的列。但是,它们并不完全是空的,因为我希望标题仍然存在。例如,标题位于第 3 行。因此,对于 A 列,如果范围内没有数据(“A4:A”& rng),我希望隐藏 A 列,rng 是最后一行。我能够成功地为 A 列编写代码,从技术上讲,我可以为电子表格中的每一行编写此代码,但它从 A 列到 AU。那将是很多代码。 必须有一种方法可以遍历每一列并根据它们从第 4 行到最后一行的范围隐藏该列。请告诉我!

这是我的代码,仅适用于正确工作的 A 列。它遍历 A 列中的每个单元格,如果它们都是空的,则 cellsEmpty 为 True 并且该列被隐藏。如果任何单元格中有数据,则 cellsEmpty 为 False,我们退出 For。如何循环遍历每一列并将此代码应用于每一列?

Sub hideEmptyColumns()

rng = WorksheetFunction.CountA(Worksheets("Sheet1").Range("A1:A1000")) + 2
'+2 because of the top 2 blank rows

Dim i As Range
Dim cellsEmpty As Boolean
cellsEmpty = True

Application.ScreenUpdating = False

For Each i In Range("A4:A" & rng)
    If i.Value <> "" Then
        cellsEmpty = False
        Exit For
    End If
Next

If cellsEmpty = True Then
    Columns("A").Hidden = True
End If

Application.ScreenUpdating = True

End Sub

【问题讨论】:

标签: excel vba loops


【解决方案1】:

遍历每一列,得到最后一行,如果小于等于3则隐藏。

    Dim lc As Long
    Dim lr As Long
    
    Dim i As Long
    
    With Sheets("Sheet1")
        lc = .Cells(3, .Columns.Count).End(xlToLeft).Column
        For i = 1 To lc
            lr = .Cells(.Rows.Count, i).End(xlUp).Row
            If lr <= 3 Then
                Columns(i).Hidden = True
            End If
        Next i
    End With

【讨论】:

  • 这段代码更简单更干净!谢谢!
猜你喜欢
  • 2011-12-11
  • 1970-01-01
  • 2016-12-27
  • 2013-05-03
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-19
相关资源
最近更新 更多