【问题标题】:Only show column with X's仅显示带有 X 的列
【发布时间】:2017-03-09 15:02:44
【问题描述】:

我有一个庞大的 Excel 表格,目前有 100 多列和 84 行。我希望能够切换特定的行,并且只显示带有文本的列,所有其他列都隐藏。例如:

TITLE |COLUMN 1|COLUMN 2|COLUMN 3|COLUMN 4|COLUMN 5| ROW 1 | X | | X | | X | ROW 2 | | X | X | X | |

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

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

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

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

【问题讨论】:

  • 你想一次做两行吗?像“切换第 1 行和第 2 行”并显示所有这些列? (假设第 6 列在第 1 行中只有“x”,它将保持该列可见)
  • 这会使事情变得更容易,但不是强制性的。我最终将尝试使事情双向进行,因此我可以切换 Column# 并仅显示该列中具有 X 的行。
  • 如果你的表格被转置了,你可以用一个简单的过滤器来做到这一点,使用 Excel 的所有内置过滤复选框,事情会变得更容易!
  • 你能给我举个例子来说明你的意思吗?我完全愿意重新组织,这是一个新的电子表格,我在布局上花费的时间很少,我首先想要信息。

标签: excel vba


【解决方案1】:

我同意@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

并显示所有列:

Sub unhideAllColumns()
Cells.EntireColumn.Hidden = False
Cells.EntireRow.Hidden = False
End Sub

【讨论】:

  • 有没有办法让它只显示该特定行并隐藏所有其他行?另外,如何将值从“x”更改为任何值?我尝试使用 * 但没有用,因为某些列有额外的文本。
  • @Dazzled - 换句话说,如果单元格中有 any 值,则显示并隐藏所有 blank 单元格?
  • 是的,我想。同时保持第 1、2、3 行和 A、B 列始终可见,因为我在其中拥有主要信息。
  • @Dazzled - 你能把它编辑到你的 OP 中吗?这是一件很重要的事情……我将不得不大量编辑代码。但是,请参阅迪克的回答,因为它不依赖于宏,所以更好一些。
  • 我将 OP 修复为我相信您所要求的。
【解决方案2】:

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

  1. 选择您的数据

  1. 复制 (Ctrl+C)。在原始数据下方的 A 列中选择一个单元格。粘贴特殊移调

  1. 删除原始数据

  1. 从数据功能区添加过滤器 (Alt+D+F+F)

  1. 下拉ROW 1 下拉菜单并在 X 上过滤

【讨论】:

  • 我很欣赏这个回复,在尝试过之后我不知道我是否喜欢这种格式。是不是要切换行列?
  • 如果要使用内置过滤器,则必须转置。如果您不想转置,则必须自己滚动。看起来@BruceWayne 给了你一个可行的解决方案。
猜你喜欢
  • 2020-05-11
  • 2019-01-13
  • 1970-01-01
  • 2021-02-05
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多