如果未选中该列的checkbox,如何使用Ifmacros删除列?

我正在处理一个有11种不同系统大小的电子表格,每个系统大小代表一个列。 我将需要使用它来比较不同的系统大小,但是需要能够在特定时间select我想要的系统大小。 例如,系统大小是1300,2000,2000X,2500,2500X,3000,3000X,4500,6000,7000和9000,我可能需要比较2500,3000和4500.我已经把行中的checkbox3表示每个系统大小并将该checkbox链接到它所在的同一单元格,因此对于系统1300,checkbox位于单元格B3中并链接到单元格B3。 我希望能够进入并为每个系统大小select每个checkbox,然后能够运行一个macros来保留其checkbox被选中的列/系统大小,并删除或隐藏其检查的列/系统大小框未被选中。 以下是我对系统1300的代码。

Dim System1300 As String System1300 = Range("B3").Value If Not System1300 Like "TRUE" Then ActiveSheet.Shapes.Range(Array("Check Box 1")).Select Selection.Delete Columns("B:B").Select Range("B2").Activate Selection.Delete Shift:=xlToLeft End If 

但是,由于某种原因,我是否选中了checkbox会删除checkbox和列。 任何帮助是极大的赞赏。

隐藏似乎更容易维护,所以这就是我在这里所做的:

 Sub HideUncheckedColumns() Dim ws As Excel.Worksheet Dim ColumnCount As Long Dim cell As Excel.Range Set ws = ActiveSheet 'adjust as necessary ColumnCount = 11 'adjust as necessary With ws For Each cell In .Range(.Cells(3, 1), .Cells(3, ColumnCount)) cell.EntireColumn.Hidden = cell.Value = False Next cell End With End Sub 

编辑:按照要求这里是一个版本,删除FALSE(未检查)列。

关键的逻辑区别是你必须向后循环单元格,即从右到左。 否则,循环索引将会随着列的删除而中断:

 Sub DeleteUncheckedColumns() Dim ws As Excel.Worksheet Dim ColumnCount As Long Dim i As Long Dim cell As Excel.Range Set ws = ActiveSheet 'adjust as necessary ColumnCount = 11 'adjust as necessary With ws For i = ColumnCount To 1 Step -1 Set cell = .Cells(3, i) If cell.Value = False Then cell.EntireColumn.Delete End If Next i End With End Sub 

您可以通过消除cellvariables并直接引用.Cells(3, i)来缩短它。 我把它保留在与前一版本相比的部分,但主要是因为我认为它增加了代码的易读性。