【问题标题】:Excel VBA: Using Evaluate Match function with range as a variableExcel VBA:使用范围作为变量的评估匹配函数
【发布时间】:2019-08-12 15:41:06
【问题描述】:

当我使用 debug.print 时,我的变量 found_match 将返回“A7:A45”,这个范围可以根据其他因素而改变,但目前它返回这个。

我设置了一个匹配函数,如果我输入“A7:A45”作为它的范围,该函数当前有效,但如果我用变量替换它,它就不起作用。

row_num3 = Evaluate("MATCH(1,('" & ws1.Name & "'!A7:A45=""" & condition_1 & """)*('" & ws1.Name & "'!B7:B45=""" & condition_2 & """)*('" & ws1.Name & "'!F7:F45=""" & condition_3 & """),0)")

Debug.Print row_num3

上述方法有效,但如果我用变量替换范围,当我使用 debug.print 时会返回错误:

row_num3 = Evaluate("MATCH(1,('" & ws1.Name & "'found_match=""" & condition_1 & """)*('" & ws1.Name & "'found_match2=""" & condition_2 & """)*('" & ws1.Name & "'found_match3=""" & condition_3 & """),0)")

Debug.Print row_num3

此代码在 ws3(工作表 3)上运行,但它正在寻找与 ws1(工作表)上的匹配项

如何格式化 Match 函数以将变量作为范围而不是专门键入范围(例如 A7:A45)

谢谢!

【问题讨论】:

  • 如果found_match是一个变量,而不是一个命名范围,你需要将它连接在:"MATCH(1,('" & ws1.Name & "'" & found_match & "="""
  • row_num3 = Evaluate("MATCH(1,('" & ws1.Name & found_match & "=condition_1"")*('" & ws1.Name & found_match2 & "=condition_2"")*('" & ws1.Name & found_match3 & "=condition_3"") 我想我的格式仍然不正确 编辑:found_match 是一个变量。我发现串联超级混乱
  • 什么是found_match?是存储字符串地址的范围变量还是字符串变量?
  • found_match = "A" & row_num2 & ":A" & lastrow3 (row_num2 和 lastrow3 返回一个数字) 编辑:我没有为它设置 Dim
  • & ws1.Name & "'!" & found_match

标签: excel vba


【解决方案1】:

试试:

row_num3 = Evaluate("MATCH(1,('" & WS1.Name & "'!" & found_match & "=""" & condition_1 & """)*('" & WS1.Name & "'!" & found_match2 & "=""" & condition_2 & """)*('" & WS1.Name & "'!" & found_match3 & "=""" & condition_3 & """),0)")

Debug.Print row_num3

【讨论】:

  • 我注意到这会返回最早范围之后的行数,例如:如果 found_match 是第 19 行,假设匹配的下一行是第 21 行,row_num3 将返回 1。我认为这是因为它从 19 之后的行开始计数,然后返回您必须添加的数字才能进入下一场比赛,在本例中为 21。我能够完成这项工作的唯一方法是 (这些变量名称不是很好,我会在某个时候更改它们)row_num4 (new variable) = row_num2 + row_num3 + 1。而这会返回21,但不知道这是不是最好的办法?
  • @Sam .. 感谢您尝试在这里解释。但是我无法理解您的问题,我认为您应该做的是在Code Review 上提出问题,在屏幕截图和示例的帮助下清楚地解释您要做什么。我相信有人会建议你实现它的最佳方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多