【问题标题】:Convert Excel array formula VBA转换Excel数组公式VBA
【发布时间】:2015-01-07 04:35:21
【问题描述】:

我正在尝试使用“索引”和“匹配”函数使用 2 个不同的标准(A 列和 G 列值)进行“vlookup”。

这是我用于 Excel 命令的行。

=INDEX(Database!A:KG,MATCH(1,(Database!A:A='TempSheet'!A2)*(Database!G:G='TempSheet'!G2),0),10)

我将如何使用 VBA 来做到这一点?它不断给我错误消息“编译错误:预期的语句结束”。

Selection= _
    "=Index(DB.Range("A:KG"), Match(1, (DB.Range("A" = Temp.Range("A" & i).Value)) * (DB.Range("G" = Temp.Range("G" & i).Value)), 0), 10)"

谢谢

【问题讨论】:

  • "=INDEX(Database!A:KG,MATCH(1,(Database!A:A='TempSheet'!A2)*(Database!G:G='TempSheet'!G2),0),10)" 呢?
  • 请在问题中显示您的实际代码,并使用代码查看器格式化。
  • 您需要在文字字符串中转义双引号...此外,您不能在文字字符串中使用像 DB 这样的变量名称。
  • 如果您无法使复杂的表达式发挥作用,请尝试使用表达式的较小组件来构建它。例如,尝试让Match 表达式工作,然后分别使用Index。您需要使用Application.Worksheetfunction.Evaluate - 您可以在此处查看语法msdn.microsoft.com/en-us/library/office/…(带有示例)。

标签: vba excel vlookup array-formulas


【解决方案1】:

每次在 VBA 代码中使用电子表格公式时,都需要在其前面加上 Excel.WorksheetFunction.> 或 Application.WorksheetFunction.>。

例如:

Application.WorksheetFunction.Match

而不是仅匹配。

【讨论】:

    【解决方案2】:

    我很难通过 VBA 让数组公式正常工作,并使用“IFERROR”作为解决方法,如下所示:

    =IFERROR(VLOOKUP(A1, Database!A:Z,1,FALSE),VLOOKUP(B1, Database!A:Z,1,FALSE))
    

    此函数将尝试匹配 A1,如果出现 #VALUE 错误,它将匹配 B1。

    要在 VBA 中的工作表上填充这种公式,您可以使用“.formula”方法循环访问工作表。

    ' get length of source data
    Dim RowCount As Long
    RowCount = ThisWorkbook.Sheets("Database").Cells(Rows.Count, 1).End(xlUp).Row
    ' now starting from row 2 to preserve headings
    For i = 2 To RowCount
        ThisWorkbook.Sheets("Summary").Cells(i, 1).Formula = "=IF(ISERROR(SEARCH(""ISO"",V" & i & ")),""Order type not supported"",""Transit"")"
        ThisWorkbook.Sheets("Summary").Cells(i, 6).Formula = "=IFERROR(TEXT(VLOOKUP(B" & i & ",Database!A:N,7,FALSE),""dd-mmm-yyyy HH:MM AM/PM""),"""")"
    Next
    

    不完全是您所追求的,但希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-25
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多