【问题标题】:Returning multiple values using Vlookup in excel在excel中使用Vlookup返回多个值
【发布时间】:2015-07-29 20:21:19
【问题描述】:

我有一个 Excel 表格,可以自动计算一周中每天的会议。我想编写一个公式来返回我安排的所有会议日期(最好用逗号分隔),但我遇到了一些困难。使用 Vlookup,我只能让它返回第一个日期。

例如,我的数据如下所示:

         A                                 B                            C
 Initial Meetings          Follow-up Meetings            Date
         1                                1                       7/29/2015
         0                                1                       7/30/2015
         1                                1                       7/31/2015
         0                                0                       8/1/2015
         0                                0                       8/2/2015

我想编写一个公式以在一个单元格中返回“7/29/2015, 7/31/2015”,并在一个单元格中返回“7/29/2015, 7/30/2015, 7/31/2015”另一个,但我似乎被卡住了。

【问题讨论】:

  • 这很难用公式很好地缩放。主要瓶颈是连接的限制。否则,您可以将值提取到一个区域中,然后与分隔符连接。您添加了 excel-vba 标签,但只提到了一个公式。您愿意为此使用 VBA 吗?
  • 您可以使用 =IF((meeting column) 0, date, ) 做两个单独的列(一个用于初始,一个用于后续),然后进行高级过滤并从两者中获取唯一性这些列具有易于访问的列表,但 VBA 将是您的朋友。
  • 我绝对愿意使用 VBA!我只是不确定它是否可以用公式来完成。我对 VBA 还很陌生,因此我们将不胜感激。

标签: excel vba


【解决方案1】:

vLookup 无法做到这一点。

这可以在 VB 脚本中相对轻松地完成,但它会影响可移植性,因为默认情况下大多数用户都会禁用宏,并且在许多情况下,用户被阻止使用宏,因为他们的公司禁用了宏,并制定了用户的政策不应该使用它们。

如果您对宏没问题,您可以将以下内容放入 新模块,然后像使用 vlookup 一样使用=MultiVlookup(lookup_value,table_array, col_index_num),它应该给您一个逗号分隔多个匹配项列表:

Public Function MultiVlookup(find_value, search_range, return_row)
  Dim myval ' String to represent return value (comma-separated list)
  Dim comma ' Bool to represent whether we need to prefix the next result with ", "
  comma = False
  'Debug.Print find_value.value, return_row
  For Each rw In search_range.Rows ' Iterate through each row in the range
    If rw.Cells(1, 1).value = find_value Then ' If we have found the lookup value...
      If comma Then  ' Add a comma if it's not the first value we're adding to the list
        myval = myval + ", "
      Else
        comma = True
      End If
      myval = myval + Str(rw.Cells(1, return_row).value)
    End If
  Next
  MultiVlookup = myval
End Function

这可能不是最干净的方法,也不是 vlookup 的直接副本(例如,它没有像 vlookup 那样的第四个“范围查找”参数),但它适用于我的测试:

最后我最初的建议是:

我自己没有尝试过,但this link 显示了我认为您可能正在寻找的内容。

【讨论】:

  • 解决方案将输出链接为数组或值的总和。您将需要中间列然后加入最后一个单元格。看起来并不完全符合 OP 的要求。
  • 我已经尝试过您的链接中描述的技术,但由于某种原因它不适用于我的数据。我不关心可移植性,因为此电子表格仅适用于我。您对如何使用 VBA 完成此操作有任何提示吗?
  • 如果您愿意,我将非常感谢您的帮助!可移植性对我来说绝对不是问题,宏观安全也不是问题,因为我不打算与任何人分享此表。
  • 我已经用更合适的解决方案更新了我的答案(我将另一个不是你想要的链接留在页面底部,以防它对其他人有用)跨度>
  • 非常感谢 SteJ - 这是完美的,正是我想要的!
【解决方案2】:

很棒的代码,但不要忘记添加以下内容是您使用 Option Explicit:

Dim rw As Range

车轮

【讨论】:

  • 这看起来更像是对另一个答案的评论,而不是新的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-16
相关资源
最近更新 更多