仅显示带有X的列

时间:2017-03-09 15:02:45

标签: excel excel-vba vba

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

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

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

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

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

可以这样做,你建议采用什么方法?即:单选按钮,复选框等...?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

  1. 选择您的数据
  2. enter image description here

    1. 复制(Ctrl + C)。在原始数据下方的A列中选择一个单元格。粘贴特殊转置
    2. enter image description here

      enter image description here

      1. 删除原始数据
      2. enter image description here

        1. 从数据功能区添加过滤器(Alt + D + F + F)
        2. enter image description here

          1. 下拉ROW 1下拉列表并过滤X
          2. {{3}}