【问题标题】:Extract data from sheet range based on condition (like DataFrame.loc) using VBA使用 VBA 根据条件(如 DataFrame.loc)从工作表范围中提取数据
【发布时间】:2022-07-04 17:10:56
【问题描述】:

对于你们中的一些 Python 编码员来说,问题在于 DataFrame.loc[DataFrame['Name']=='John'][-1]

这是我在电子表格中的内容,假设是单元格范围 (A1:E3)。

Name Bio Date
John Loves travelling to the mountains 11/20
Joe plays computer 11/20
John goes to the sea a lot 01/22
Jenny dances salsa 02/22

在单独的工作表上,我有 2 个按钮和 2 个单元格

  1. 向数据库添加信息(内置 VBA)
  2. 提取最新信息到数据库
  3. 第一个单元格允许我输入姓名,例如“John”
  4. 允许我进入 Bio(或等效地将 bio 提取到)的第二个单元格

如果我输入 John 并单击按钮以提取简历,我怎么能获得 的最新 Bio(日期为 01/22)约翰进入另一个牢房?

【问题讨论】:

标签: arrays excel vba


【解决方案1】:

如果您有旧版本的 Excel,您可以使用 SUMPRODUCT 执行此操作:

=SUMPRODUCT(MAX(--(A2:A5=G5)*C2:C5))

在 Excel 365 中,您可以使用函数 MAXIFS:

MAXIFS function

【讨论】:

  • SUMPRODUCT(MAX(--(testRange=condition)*(dataRange)) 的性能是否比 MAX(IF(testRange=condition, dataRange)) 更高?
  • @ChrisStricland 老实说,这是之前在此处发布的公开讨论(stackoverflow.com/questions/37148716/…superuser.com/questions/879026/…),但我认为数组公式允许您做的事情比普通函数不会那么重新计算需要更多资源。如果可以,我会避免使用它们,但可以使用它们
  • 我刚刚尝试了一百万行随机数据,它们几乎都是瞬时的。 MAX/IF 的构造可能有一点滞后,但这可能是我的想象。他们都没有触发计算计数器。甚至不知道我会如何检查它。
【解决方案2】:

您好,我为其他正在寻找类似内容的人找到了解决方案,并已关闭此查询。

如果我们设置了一个数据数组,可以用来将表格存储在工作表范围内。然后我们可以这样循环数据:

Dim rowCount
Dim dataArray As Variant
Dim bio

For i = 1 To rowCount
  
    If dataArray(i, 1) = Name Then
        bio = dataArray(i, 2)
    End If
Next
Sheets("Main").Range("A5") = bio

rowCount 应该是表格中的行数,这可以在工作表的单元格内指定,Name 可以是任何名称,例如'约翰

【讨论】:

    猜你喜欢
    • 2022-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    相关资源
    最近更新 更多