最佳数据操作优秀

时间:2016-01-26 04:35:59

标签: excel excel-vba vba

我正在尝试找出最有效/最佳的方法来过滤我拥有的数据。数据见:

enter image description here

我的目标是使用下拉框来确定将在特定工作表上填充哪些数据。基本上我把它缩小到两种方式。两种方式都必须使用VBA。首先将使用excel的自动过滤功能。它会根据用户通过下拉框选择的条件过滤某些列,然后代码会将过滤后的表复制到另一个工作表。第二种方法是使用带有for循环的VLOOKUP来查看并获取数据。

哪个更优,为什么?同样,如果有一种方法我没有描述会更好,请告诉我。

2 个答案:

答案 0 :(得分:0)

找到,找到你的答案,

https://goo.gl/ThS44h

FIND是excel最有效的匹配方式,我不知道为什么,但你应该尝试5种可能的方法并检查哪种方式更快。<​​/ p>

我认为,从最慢到最快将是:

  • 5遍历所有行并检查是否包含某些内容
  • 4循环遍历所有行并在If
  • 之前选择大小写
  • 3遍历所有VLOOKUP结果 - &gt; WorksheetFunction
  • 2遍历所有IndexMatch结果 - &gt; WorksheetFunction
  • 1使用Find循环查找所有找到的结果 - &gt;范围

我相信WorkheetFunction不会在与VBA相同的线程中执行,但是在Worksheet和Range的一个共同线程中,某种方式会有更快的方法。

答案 1 :(得分:0)

我想知道你是否会以更好的方式看待这项任务。目前,您似乎正在谈论您希望运行查询的员工详细信息数据库,然后将结果输出到Excel。显然,这更适合真正的数据库应用程序,但您可以使用工作表作为数据存储,使用UserForm作为查询接口和VBA来管理数据处理,从而在Excel中模拟该任务。您的问题似乎只是想以有效的方式自动化一些Excel键击,而最好问一下VBA如何创建这个迷你数据库应用程序。

特别是,为了获得真正的效率,您确实需要避免对-bash: nvm: command not found值的多次询问,例如WorksheetVLOOKUPFIND等。阅读价值非常耗时。通常最好只将MATCH 数据库值读入数组,然后查询该数组。幸运的是,这些任务在VBA中非常直接。

所以......首先,我要为您要使用的每个过滤器创建一个Worksheet UserForm。在下面的示例中,我刚刚完成了三个,但如果您愿意,可以执行所有列。确保将ListBoxes属性设置为MultiSelect

enter image description here

1-fmMultiSelectMulti后面的代码中,添加以下内容(如果您愿意,可以更改列表框的名称,但我使用了UserFormlboxCountry和{{1 }}):

lboxState

现在只需将数据读取和数据过滤程序添加到lboxDept中,如下所示:

Public Property Get Lbox(index As Long) As MSForms.ListBox
    Select Case index
        Case COUNTRY_ID: Set Lbox = lboxCountry
        Case STATE_ID: Set Lbox = lboxState
        Case DEPT_ID: Set Lbox = lboxDept
    End Select
End Property

Private Sub btnProcess_Click()
    Call OutputFilteredResults
End Sub

您可以更进一步,例如通过利用LINQ语法来简化查询代码,但是这个示例应该让您了解如何将VBA视为更多应用程序解决方案。