【问题标题】:Excel AutoFilter Criteria Variant to stringExcel 自动筛选条件变体为字符串
【发布时间】:2021-03-22 03:45:59
【问题描述】:

我正在尝试将 AutoFilter 设置作为字符串获取。

我在工作表中将A1:A5 设置为:

Rows
valA
valB
valC
valD

然后我自动筛选工作表并选择RowsvalAvalBvalC。 (即,我已经过滤掉了RowsvalD。)

我运行以下 VBA:

Sub CaptureFilters()
    With ActiveSheet.AutoFilter.Filters.Item(1)
        Cells(1, 3).Value = Join(.Criteria1)
        Cells(1, 4).Value = Replace(Join(.Criteria1), "@=", "")
    End With
End Sub

现在工作表单元格C1D1 都给出#NAME? 错误,但它们的公式显示=@valA =@valB =@valC

VBA 显示.Criteria1Variant/Strings 的数组。

如何在工作表单元格中获取.Criteria1 作为字符串值?在此示例中,我想要一个包含字符串 valA valB valC 的单元格。

【问题讨论】:

    标签: excel vba autofilter


    【解决方案1】:

    重写为

    Sub CaptureFilters()
        With ActiveSheet.AutoFilter.Filters.Item(1)
            Cells(1, 3).Value2 = "'" & Join(.Criteria1)
            Cells(1, 4).Value = "'" & Replace(Join(.Criteria1), "@=", "")
        End With
    End Sub
    

    否则 Excel 会将字符串解释为公式,因为它以 = 开头。

    或者你试试

    Sub CaptureFiltersA()
        With ActiveSheet.AutoFilter.Filters.Item(1)
            Cells(1, 3).Value2 = Replace(Join(.Criteria1), "=", " ")
            Cells(1, 4).Value = Replace(Join(.Criteria1), "=", "")
        End With
    End Sub
    

    文本自动过滤器有四种情况——一个值、两个和两个以上。全部处理:

    Sub CaptureFiltersA()
        With ActiveSheet.AutoFilter.Filters.Item(1)
            If IsArray(.Criteria1) Then  ' CASE: More than two values
                Cells(1, 3).Value = Replace(Join(.Criteria1, ","), "=", "")
            Else
                Cells(1, 3).Value = Replace(.Criteria1, "=", "")  ' CASE: One value
                If .Count = 2 Then  ' CASE: Two values
                    Cells(1, 3).Value = Cells(1, 3).Value + "," + Replace(.Criteria2, "=", "")
                End If
            End If
        End With
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2019-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多