Excel – 创build一个更复杂的表(macros?)的简化“视图”

简介:在我的Excel工作簿Sheet1包含一个“复杂”表约130列和2,5k行。

第一个问题:基于这张表,我想在Sheet2中创build一个简化的表格(“视图”),其中只包含Sheet1表格中的列A,C,F,G,I。

这个新的“简化”表格应该在Sheet1中的表格被更改时更新,例如以被编辑的单元格的forms,或插入一个新的行。 处理这个问题的另一种方法是在用户每次保存工作簿或类似的东西时自动生成Sheet2中的表格。

第二个问题:在列F中包含特定值的行(假定值“XXX”)不应包括在Sheet2表中。

我对“更高级”的excelfunction并不是非常有经验,但是在研究了这个通过创build一个macros来解决这个问题之后。 这个假设是否正确? 或者Excel有没有其他的function来执行这个任务?

如果创build一个macros是最好的方法,那么任何帮助将不胜感激。 我目前正在用4行testing表格,并将其中的两个复制到一个新的工作表中。 但我有麻烦自动如何做到这一点,并排除具有特定值的行(问题#2)

尝试下面的代码:(放在简单的工作表模块)

Private Sub Worksheet_Activate() Application.ScreenUpdating = False With ActiveSheet .UsedRange.ClearContents '// Copy from data sheet too presentation sheet Sheet1.UsedRange.Copy .[a1] '// Filter all rows with xxx .Range("F:F").AutoFilter Field:=1, Criteria1:="xxx", Operator:=xlAnd '// Delete all rows with xxx excluding the header .UsedRange.Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete '// Remove the autofilter If .AutoFilterMode Then .AutoFilterMode = False '// Delete unwanted columns .Range("B:B,D:E,H:H").Delete End With Application.ScreenUpdating = True End Sub 

我这样做的方式是在工作表的on_activate方法中使用一些代码。

这样,只要用户select该表,数据就会刷新。

这里是伪代码:

 option explicit 'but thats just me. Private Sub Worksheet_Activate() <<-- event of the simplified sheet. Worksheets("simplesheet").Cells.ClearContents Worksheets("alldata").Columns("A:A").Copy Worksheets("simplesheet").Columns("A:A").Select Worksheets("simplesheet").Paste 'etc for all the relevant rows End Sub 

第二个问题:在列F中包含特定值的行(假定值“XXX”)不应包括在Sheet2表中。

添加以下事件

  dim cel as range 'for each goes in the wrong direction, we need to start down and go up. '1-select the REAL last cell in a range. Worksheets("simplesheet").Range("F65536").End(xlup).Select 'edit for Excel 2007 Set cel = selection while cel.row > 0 if cel.value = "xxxx" then cel.entirerow.delete set cel = cel.offset(-1,0) wend Worksheets("simplesheet").Range("a1").select