根据内容隐藏列(行总和)

根据内容隐藏列(行总和)

我正在尝试根据这些列中选定的行(即单元格)的总和来隐藏列。

例如 - 如果 E9:E12 的总和为 0,则隐藏 E 列。

此外,可能还有点困难——如果某一列不被隐藏,则要确保下一列也不会被隐藏,即使其对应行的总和为零。

例如 - 如果 E9:E12 的总和不为 0,则不要隐藏 E,也不要隐藏 F 列,即使 F9:F12 的总和为零。

答案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 列,那么……什么都不会被隐藏。如果这不是您想要的行为,请告诉我,我可以重写以帮助您实现这一点。

相关内容