【问题标题】:Fast way to query listobject vba查询listobject vba的快速方法
【发布时间】:2021-10-04 23:37:13
【问题描述】:

我使用 excel 2016,需要从列表对象中获取值。有几列。例如三个,我需要在column1中获取值,其中column2=smth,column3=smth。我怎样才能快速做到这一点?

【问题讨论】:

  • 我不是 100% 确定我理解这个问题。你的意思是这样吗? ActiveWorkbook.Worksheets("Sheet1").ListObjects.Item(1).Value 其中 1 是对象。 msdn.microsoft.com/en-us/vba/excel-vba/articles/…
  • @HackSlash 不,我不想找到 ListObject。我想做类似 sql select where 查询,在特定 ListObject 的值中包含多个条件
  • 多快才够快?你有没有尝试过,但速度太慢了?
  • @Tim Williams 我尝试过使用电源查询、匹配/索引和数据透视表。我有一个相当大的表要查找,并且(在我的版本中)这些方法工作缓慢,或者在我在 vba 变量中有值之前需要对工作表进行许多操作
  • 匹配应该很快 - 替代方案可能取决于表的大小以及您需要进行多少次查找。

标签: excel vba


【解决方案1】:

如果您想在 VBA 中使用 SQL 语法和速度,那么您需要使用 ADO DB 连接器。根据我的经验,它比使用原生 Excel 函数查找数据要快 4 倍。

这是一个冗长的主题,需要您阅读多篇文章。比一篇 SO 帖子所包含的信息要多得多。

这是一个示例文章: https://technet.microsoft.com/en-us/library/ee692882.aspx

这是该示例中的代码:

    Const adOpenStatic = 3
    Const adLockOptimistic = 3
    Const adCmdText = &H1
    
    Dim objConnection As Object
    Set objConnection = CreateObject("ADODB.Connection")
    objConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=C:\Scripts\Test.xls;" & _
        "Extended Properties=""Excel 8.0;HDR=Yes;"";"
    
    With CreateObject("ADODB.Recordset")
        .Open "Select * FROM [Sheet1$] Where Number = 2", _
        objConnection, adOpenStatic, adLockOptimistic, adCmdText
    
        Do Until .EOF
            Debug.Print .Fields.Item("Name"), .Fields.Item("Number")
                
            .MoveNext
        Loop
    
        .Close
    End With
    
    objConnection.Close

【讨论】:

猜你喜欢
  • 2019-05-14
  • 1970-01-01
  • 1970-01-01
  • 2018-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 2013-08-31
相关资源
最近更新 更多