在工作表的列F和BM之间,如果这些列中的任何值等于“NULL”,则不要隐藏,否则隐藏该列,列之前和之后的列。循环应该从列G开始并在列BM结束时评估每隔一个3。
例如,如果列G包含值“NULL”,则不执行任何操作并转到列J(向前三列)。如果列J现在没有值为NULL的单元格,则隐藏该列,前一列(第一列)和后一列(列K)。
这就是我遇到的麻烦。我可以根据列是否包含值NULL来隐藏列。
这是我尝试过的代码变体。
multiplicative_inverse
答案 0 :(得分:1)
可能是这样的:
Sub HideColumnWithoutNullString()
Dim range, colCount, rowCount, hasNull, rowsToCheck
Dim firstColumn, currentColumn, lastColumn
Set range = Application.range("G:BM")
firstColumn = range.Columns(0).Column
lastColumn = range.Columns(range.Columns.Count).Column
currentColumn = 0
rowsToCheck = 1
For colCount = firstColumn To lastColumn Step 1
hasNull = False
For rowCount = 1 To range.Rows.Count Step 1
If Application.Cells(rowCount, colCount).Value = "NULL" Then
hasNull = True
Exit For
End If
If rowCount >= rowsToCheck Then
Exit For
End If
Next
If Not hasNull Then
range.Columns(currentColumn).Hidden = True
Else
range.Columns(currentColumn).Hidden = False
End If
currentColumn = currentColumn + 1
Next
End Sub
其中rowsToCheck是脚本必须检查的行数" NULL"在每列上,如果只需检查第一行,则将其值设置为1。
答案 1 :(得分:1)
这个逻辑与Octavio的答案遵循相同的逻辑,但会检查空列或“NULL”的值。
Sub SuspenseReport()
Dim col As Range
Application.ScreenUpdating = False
Set Rng = Application.Range("G2:BO8")
vLr = ActiveCell.SpecialCells(xlLastCell).Row
For Each col In Rng.Columns
vFlag = False
For vrow = 2 To vLr
vX = Cells(vrow, col.Column).Value
If vX = "" Or vX = "NULL" Then
vFlag = True
End If
Next
If vFlag Then
col.EntireColumn.Hidden = False
Else
col.EntireColumn.Hidden = True
End If
Next col
Application.ScreenUpdating = True
End Sub