[英]Hide a column if the content at row 2 is not equal to 'x', 'y', or 'z'
如何在第二行中查找内容,如果该值不是“白名单”值,则隐藏该列?
我必须查看具有不同位置列的多个工作表(例如:工作表1名称列为A,工作表2名称列为B)。
编辑:基于@ComradeMicha的评论,我将某些内容放在一起,我确定它是错误的,但是如何使它起作用?
Sub Demo()
Dim arr(2) As String
Dim rng As Range: Set rng = Application.Range("Data!A2:CA2")
Dim cel As Range
arr(0) = "Name"
arr(1) = "Age"
arr(2) = "Gender"
For Each cel In rng.Cells
With cel
If Not IsInArray(cell, arr) Then
Columns(cel).Hidden = True
End If
End With
Next cel
End Sub
Private Function IsInArray(valToBeFound As Variant, arr As Variant) As Boolean
'DEVELOPER: Ryan Wells (wellsr.com)
'DESCRIPTION: Function to check if a value is in an array of values
'INPUT: Pass the function a value to search for and an array of values of any data type.
'OUTPUT: True if is in array, false otherwise
Dim element As Variant
On Error GoTo IsInArrayError: 'array is empty
For Each element In arr
If element = valToBeFound Then
IsInArray = True
Exit Function
End If
Next element
Exit Function
IsInArrayError:
On Error GoTo 0
IsInArray = False
End Function
如果您只寻找这3个关键字,这应该可以解决问题。 它的速度不如检查数组快,但是您并没有遍历那么多列,因此在这里的区别将是微不足道的。
Option Compare Text
删除文本比较中区分大小写的部分。 换句话说,宏将假定NAME
= name
。
如果没有此Option
,则NAME
<> name
Option Explicit
Option Compare Text
Sub HideColumns()
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Data")
Dim MyCell As Range
Dim HideMe As Range
Application.ScreenUpdating = False
For Each MyCell In ws.Range("A2:CA2")
If MyCell = "Name" Or MyCell = "Age" Or MyCell = "Gender" Then
If HideMe Is Nothing Then
Set HideMe = MyCell
Else
Set HideMe = Union(HideMe, MyCell)
End If
End If
Next MyCell
If Not HideMe Is Nothing Then
HideMe.EntireColumn.Hidden = True
End If
Application.ScreenUpdating = True
End Sub
是的,您需要VBA才能根据值自动隐藏列。
循环浏览第2行中的每一列(例如,使用此命令: https : //www.excel-easy.com/vba/examples/loop-through-defined-range.html ),检查单元格值是否在您的白名单中(例如使用此方法: https : //wellsr.com/vba/2016/excel/check-if-value-is-in-array-vba/ ),如果不是,则隐藏该列:
Columns(i).hidden = true
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.