コンテンツに基づいて列を非表示にする(行の合計)

コンテンツに基づいて列を非表示にする(行の合計)

列内の選択された行 (つまりセル) の合計に基づいて列を非表示にしようとしています。

たとえば、E9:E12 の合計が 0 の場合、列 E を非表示にします。

さらに、おそらく少し難しいことですが、列を非表示にしない場合は、対応する行の合計がゼロであっても、次の列が非表示にならないようにします。

たとえば、E9:E12 の合計が 0 でない場合は、E を非表示にせず、F9:F12 の合計が 0 であっても列 F を非表示にしません。

答え1

これを実現するには、明らかに VBA が必要です。ロジックに潜在的な問題があることはわかりますが、VBA はまさに要求どおりに動作します。この問題については最後に説明します。

Ctrl+F11 で VBE を開き、ワークブックの新しいモジュールを作成します。そのモジュールに以下を追加します。

Sub hideColumns()
    Dim ws as Worksheet
    Set ws = Sheets("YOUR SHEET NAME") '<--CHANGE THIS TO YOUR SHEET

    Dim col As Range
    Dim row, sum As Integer

    'loop through every column in the worksheet
    For Each col In ws.Columns

        'Resetting the sum for this column
        sum = 0

        'Loop through rows 9 to 12 to get their sum
        For row = 9 To 12 '<--Rows that you want to sum in each column
            sum = sum + ws.Cells(row, col.Column).Value
        Next row

        'Only hide the column if the sum is 0 and previous column is not hidden
        '    OR if the sum is 0 and this is the first column (there would be no previous column)        
        col.Hidden = ((sum = 0) And Not Cells(1, col.Column - 1).Hidden) Or ((sum = 0) And col.Column = 1)

    Next col
End Sub

ここで問題です。すべての列をループし、列 3 まで合計が 0 にならないとします。列 2 は表示されているので、ロジックにより、列 3 は非表示になりません。シートの最後まで繰り返します。基本的に、概説したロジックでは、合計が 0 の列に遭遇するまで列が閉じられます。合計が 0 の列が列 1 である場合、何も非表示になりません。これが希望する動作でない場合は、お知らせください。希望どおりに書き直します。

関連情報