繁体   English   中英

如果第2行的内容不等于'x','y'或'z',则隐藏一列

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM