调整VBA代码以隐藏来自多行的值的列

我有一段代码,我用它来隐藏列中的值,实质上是查看某一行下方该列中的所有单元格,如果这里有一个值,它会保持显示,如果不会隐藏它。

现在我需要它也隐藏基于特定行的值的东西。 这是代码:

Sub HideCols() Dim LC As Integer, j As Integer Dim LR As Integer, curCnt As Integer Dim k As Integer Dim Data As Variant Application.ScreenUpdating = False LC = Cells(3, Columns.Count).End(xlToLeft).Column For j = 6 To LC LR = Cells(Rows.Count, j).End(xlUp).Row curCnt = 0 Data = Range(Cells(1, 1), Cells(LR, LC)) For k = 3 To LR If Rows(k).Hidden = False And Data(k, j) <> "" Then _ curCnt = curCnt + 1 Next k Columns(j).Hidden = curCnt < 2 Next j Application.ScreenUpdating = True End Sub 

我试着添加:

 Dim i As Long Dim c As Variant Dim l As Integer For i = 6 To j For Each c In ActiveSheet.Cells(2, i) If Columns(i).Hidden and c.Value Like "Tri-Annual" Then ActiveSheet.Columns(i).Hidden = False Else ActiveSheet.Columns(i).Hidden = True End If Next c Next i 

这是后面添加的,所以希望它只会查看第一个macros没有隐藏的列,然后隐藏在第二行没有“Tri-Annual”列的所有列。它确实完成了任务,但我必须运行两次。 有没有更简单的方法来做到这一点?

尝试这个。 我想我有正确的方法。

 Sub HideCols() Dim LC As Long, j As Long Dim LR As Long, curCnt As Long Dim k As Long Dim Data As Variant Application.ScreenUpdating = False LC = Cells(3, Columns.Count).End(xlToLeft).Column For j = 6 To LC LR = Cells(Rows.Count, j).End(xlUp).Row curCnt = 0 Data = Range(Cells(1, 1), Cells(LR, LC)) For k = 3 To LR If Rows(k).Hidden = False And Data(k, j) <> "" Then _ curCnt = curCnt + 1 Next k Columns(j).Hidden = curCnt < 2 Or Cells(2, j).Value <> "Tri-Annual" Next j Application.ScreenUpdating = True End Sub