Excel 使用;格式为“表格”;过滤行的速度很慢

Excel 使用;格式为“表格”;过滤行的速度很慢,excel,filter,excel-formula,Excel,Filter,Excel Formula,我目前有一个表,有1381行和128列(信息类型按行,国家按列)。 在数据上方,我有几个按钮,只隐藏属于组或节的特定行。 我被要求允许多个节保持可见,我所做的是插入一列,用节名填充,仅在该行上使用“Format as table”,从该表创建切片器,并允许我使用切片器隐藏/取消隐藏具有相同节名的行。 问题是,如果我这样使用它,它会非常慢,我从切片器或过滤器中选择一个部分,处理它需要2-3分钟。。。 我将表转换为正常范围,生成了过滤器,几乎是即时的,但如果这样做,我将失去切片器功能 我在转换为表的

我目前有一个表,有1381行和128列(信息类型按行,国家按列)。 在数据上方,我有几个按钮,只隐藏属于组或节的特定行。 我被要求允许多个节保持可见,我所做的是插入一列,用节名填充,仅在该行上使用“Format as table”,从该表创建切片器,并允许我使用切片器隐藏/取消隐藏具有相同节名的行。 问题是,如果我这样使用它,它会非常慢,我从切片器或过滤器中选择一个部分,处理它需要2-3分钟。。。 我将表转换为正常范围,生成了过滤器,几乎是即时的,但如果这样做,我将失去切片器功能

我在转换为表的唯一列上使用的唯一公式是:

=CHOOSE(--SWITCH_REG+1,OffChar,OnChar) & " " & "Site contracting"
每个部分的“SWITCH_”和结束字符串都会更改,但它们是手动生成的,所以我不明白为什么表会这么慢


我是否做错了某些事情,导致表过滤器速度太慢?

我通过以下步骤解决了问题:

  • 将表转换为范围
  • 创建了一个数据透视表,其中包含来自所述数据透视表的1个字段 射程
  • 从透视表创建切片器
  • 在透视表更改时添加了宏触发器,以从切片器获取筛选器值,并将其作为筛选器应用于初始范围。代码如下:

  • 如何获取切片器项:“

    一旦在格式化表中达到某个阈值,如果您自动计算工作表,excel将大大降低速度。您可以将其设置为手动,以加快流程。请注意:一旦完成一项更改,Excel将重新计算表中的所有单元格。您认为使用IF语句而不是Choose语句会加快处理速度吗?或者更好的是,是否有一种类似切片器的形状,我可以通过操纵过滤器来获得相同的结果?我的意思是我可以使用按钮,但有时它们会错位,有些会变大,所以它们会失去对称性。有我可以使用的“按钮组”吗?如果是,它叫什么?
    Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
    
        Dim rngTableAll As Range, filterField, arrFilterValues
        Dim firstCol, lastCol, sectionI     
    
        'UPDATE FILTER WHEN SLICER IS UPDATED
        If Target.NAME = "CatPiv" Then
            With Inputs_03
                Set rngTableAll = .Range("_FilterDatabase")
                filterField = 1
                arrFilterValues = GETSLICERITEMS_ARRAY("Slicer_SubCat")
                rngTableAll.AutoFilter Field:=filterField, Criteria1:=arrFilterValues, Operator:=xlFilterValues, VisibleDropDown:=False
    
                'HIDE ARROWS 'CAREFULL, IT'S SLOW
    '            Application.Calculation = xlCalculationManual
    '            For filterField = 2 To rngTableAll.Columns.Count - 2
    '                rngTableAll.AutoFilter Field:=filterField, VisibleDropDown:=False
    '            Next
    '            Application.Calculation = xlCalculationAutomatic
            End With
    
        End If
    
    End Sub
    Public Function GETSLICERITEMS_ARRAY(SlicerName As String)
        'https://www.excelforum.com/excel-general/1178647-trigger-event-on-slicer-selection-update.html
        Dim arrItems, strItems
    
        strItems = GETSLICERITEMS(SlicerName)
        arrItems = Split(strItems, ", ")
    
        GETSLICERITEMS_ARRAY = arrItems
    End Function