【问题标题】:Sort an Excel table by values of a dynamic array VBA按动态数组 VBA 的值对 Excel 表进行排序
【发布时间】:2019-12-10 21:16:20
【问题描述】:

我正在尝试按数组的值对 Excel 表进行排序。

我有这种格式的数据,我想根据这些数据过滤表格。

India 
USA
China 

我在字段4中有国家列,表格可以这样排序

Worksheets("Pilot").ListObjects("Table1").Range.AutoFilter
Field:=4, _
Criteria1:=Array("India", "USA", "China"), _
Operator:=xlFilterValues

但是,我想按数组中的字符串对表格进行排序,因为我有 100 多个要对表格进行排序的值。

我试图创建一个数组,但我无法获得由数组过滤的表格。数组被创建,但表只是过滤了数组的第一个值。数组变成一维我不知道这是否有问题?因此,如果我想获得数组的第三个值,我必须调用:

Myarray(3,1) 

我试过了

Dim MyArray() As Variant
StartRow = 13
LastRow = Cells(StartRow, "X").CurrentRegion.Rows.count
MyArray = Range(Cells(StartRow, "X"), Cells(LastRow, "X")).Value

Worksheets("Pilot").ListObjects("Table1").Range.AutoFilter _
Field:=4, _
Criteria1:= MyArray, _
Operator:=xlFilterValues

这只是通过数组的第一个值过滤表。

所以预期的结果是从列中获取文本值,然后根据这些值对表进行排序。

非常感谢您的帮助。

【问题讨论】:

  • 发生这种情况是因为您正在创建一个二维数组,而Autofilter 需要一个一维数组。

标签: arrays vba list sorting dynamic


【解决方案1】:

问题:

  • 当我们使用Range 对象为数组赋值时,生成的数组是一个二维数组。但是Range.Autofilter 需要一个一维数组。

试试这个:

Dim MyArray() As Variant
Dim arr() As Variant
StartRow = 13

LastRow = Cells(StartRow, "X").CurrentRegion.Rows.Count
MyArray = Range(Cells(StartRow, "X"), Cells(LastRow, "X")).Value

ReDim arr(1 To UBound(MyArray))

For i = LBound(MyArray) To UBound(MyArray)
        arr(i) = MyArray(i, 1)
Next

Worksheets("Pilot").ListObjects("Table1").Range.AutoFilter Field:=4, Criteria1:=arr, Operator:=xlFilterValues

【讨论】:

  • 感谢二维数组的提示我不知道,代码解决了我的问题。周五快乐,干杯!
  • 干杯伙伴 :) 很高兴为您提供帮助
猜你喜欢
  • 2015-02-18
  • 1970-01-01
  • 2018-09-25
  • 2012-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多