Excel 仅显示带有X的列

Excel 仅显示带有X的列,excel,vba,Excel,Vba,我有一个巨大的Excel表格,目前有100多列和84行。我期待着能够切换一个特定的行,只有与文本显示列,所有其他隐藏。例如: 标题|第1栏|第2栏|第3栏|第4栏|第5栏| 第1排| X | X | X| 第2排| X | X | X || 当我切换行1时,只有列1、3、5将显示,列2、4将隐藏,所有其他行也将隐藏 切换第2行时,仅显示第2、3、4列,隐藏第1、5列,所有其他行也将隐藏 编辑:行1、2、3和列A、B必须始终可见 这可以做到吗?你建议用什么方法?ie:单选按钮、复选框等…?我同意@

我有一个巨大的Excel表格,目前有100多列和84行。我期待着能够切换一个特定的行,只有与文本显示列,所有其他隐藏。例如:

标题|第1栏|第2栏|第3栏|第4栏|第5栏| 第1排| X | X | X| 第2排| X | X | X ||

当我切换行1时,只有列1、3、5将显示,列2、4将隐藏,所有其他行也将隐藏

切换第2行时,仅显示第2、3、4列,隐藏第1、5列,所有其他行也将隐藏

编辑:行1、2、3和列A、B必须始终可见


这可以做到吗?你建议用什么方法?ie:单选按钮、复选框等…?

我同意@Wolfie的观点-如果你转换数据,这将使操作更简单。然而,这是一个有趣的工作,所以我有以下宏:

Sub toggleRows()
Dim mark As String
Dim rng As Range, cel As Range, totalRng As Range
Dim rowNum As String
mark = "x"

rowNum = InputBox("What ROW (#) do you want to filter?")
rowNum = Trim(rowNum)
If rowNum = "" Then Exit Sub

unhideAllColumns
Set totalRng = Range(Cells(4, 3), Cells(ActiveSheet.UsedRange.Rows.Count, Cells(Columns.Count).End(xlToLeft).Column))
totalRng.Select

For Each cel In totalRng
    If cel.Row <> rowNum Then
        cel.EntireRow.Hidden = True
    Else
        cel.EntireRow.Hidden = False
        If cel.Value = "" Then ' changed from cel.Value <> mark
            cel.EntireColumn.Hidden = True
        Else
            cel.EntireColumn.Hidden = False
        End If
    End If
Next cel

End Sub

对于转置解决方案,以下是步骤:

选择您的数据 复制Ctrl+C。在原始数据下方的a列中选择一个单元格。粘贴特殊转置 删除原始数据 从数据功能区Alt+D+F+F添加过滤器 下拉第1行下拉列表并在X上筛选
你会想同时做两行吗?比如切换第1行和第2行并显示所有这些列?假设第6列在第1行中只有x,它将使该列保持可见。这将使事情变得更容易,但不是强制性的。我最终也会尝试让事情双向发展,这样我可以切换列并只显示列中有X的行。如果您的表被转置,您可以使用一个简单的过滤器,使用所有Excel内置的过滤勾选框来实现这一点,这样做会更容易!你能给我举个例子说明你的意思吗?我完全愿意重新组织,这是一个新的电子表格,我花了很少的时间在布局上,我首先想要的是信息。有没有办法让它只显示特定的行,而隐藏所有其他行?另外,如何将x的值更改为任意值?我尝试使用*但没有用,因为有些列有额外的文本。@Dazzled-换句话说,如果单元格中有任何值,则显示该值并隐藏所有空白单元格?我想是的。同时保持第1、2、3行和A、B列始终可见,因为我在这些行中有主要信息。@Dazzled-您能将其编辑到OP中吗?这是一件很重要的事情…我必须经常编辑代码。但是,请看Dick的回答,因为这更好一点,因为它不依赖于宏。我将OP修改为我相信您所问的。我非常感谢您的回答,在尝试之后,我不知道我是否喜欢这种格式。它必须切换行和列吗?如果你想使用内置的过滤器,你必须转置。如果你不想转置,你就得自己转。看起来@BruceWayne给了你一个有效的解决方案。
Sub unhideAllColumns()
Cells.EntireColumn.Hidden = False
Cells.EntireRow.Hidden = False
End Sub