1

各システム サイズが列を表す 11 の異なるシステム サイズを含むスプレッドシートを使用しています。さまざまなシステム サイズを比較できるようにするためにこれを使用する必要がありますが、特定の時間に必要なシステム サイズを選択できるようにする必要があります。たとえば、システムのサイズは 1300、2000、2000X、2500、2500X、3000、3000X、4500、6000、7000、および 9000 であり、2500、3000、および 4500 を比較する必要がある場合があります。これらの各列の 3 は、各システムのサイズを表し、そのチェック ボックスが同じセルにリンクされているため、システム 1300 の場合、チェック ボックスはセル B3 にあり、セル B3 にリンクされています。各システム サイズの各チェック ボックスをオンにして選択できるようにしたい 次に、マクロを実行して、チェック ボックスが選択されている列/システム サイズを保持し、チェック ボックスがオンになっている列/システム サイズを削除または非表示にできるようにしたいボックスは選択されていません。以下は、システム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

ただし、何らかの理由で、チェック ボックスをオンにしているかどうかに関係なく、チェック ボックスと列が削除されます。どんな助けでも大歓迎です。

4

1 に答える 1

1

非表示はより保守しやすいように思われるので、ここで行ったことです。

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

cell変数を削除して を直接参照することで、短くすることができます.Cells(3, i)。以前のバージョンとの比較のために一部残しましたが、主な理由は、コードの読みやすさが向上したためです。

于 2013-05-14T14:59:14.123 に答える