【问题标题】:How to give filepath to SUMIF() formula in VBA如何在 VBA 中为 SUMIF() 公式提供文件路径
【发布时间】:2014-09-04 11:11:15
【问题描述】:
=SUMIF('[filename1.xlsx]Sheet1'!$A:$A,C12,'[filename1.xlsx]Sheet1'!$Y:$Y)+SUMIF('[filename2.xlsm]Data from ABC'!$A:$A,C12,'[filename2.xlsm]Data from ABC'!$Y:$Y)

上面的公式在filename3 中使用,但是,如果filename1filename2 被关闭,它会给出错误,我必须重新设置整个公式。为了避免这种情况,我们如何将文件名作为 sumif 公式的单元格引用

我正在使用以下公式,其中我在单元格 A10、A11、B10、B11 中给出了整个文件名,但它不起作用。

=SUMIF(A10,C12,A11+SUMIF(B10,C12,B11)

你能推荐一个破解方法吗?

【问题讨论】:

  • 您需要找到一种不同的方法来使用函数从已关闭的工作簿中提取值。 HINT

标签: excel vba filereference


【解决方案1】:

函数 SUMPRODUCT 可以处理关闭的工作簿。但是这个函数中的参数是在矩阵(数组)上下文中,这对于整个列来说是非常糟糕的。因此,仅当您可以将范围从整列缩小到部分列时,以下方法才有效。

打开这三个文件。在 filename3 中创建公式:

=SUMPRODUCT(('[filename1.xlsx]Sheet1'!$A$1:$A$1000=C12)*'[filename1.xlsx]Sheet1'!$Y$1:$Y$1000)
+SUMPRODUCT(('[filename2.xlsm]Data from ABC'!$A$1:$A$1000=C12)*'[filename2.xlsm]Data from ABC'!$Y$1:$Y$1000)

现在关闭文件名 1 和文件名 2。现在公式中应该是 filename1 和 filename2 的完整路径,并且值可以自动更新。

问候

阿克塞尔

【讨论】:

    【解决方案2】:

    首先,声明一些变量来代表你的文件:

    Dim f1 as Workbook, f2 as Workbook
    Set f1 = Workbooks("filename1.xlsx")
    Set f2 = Workbooks("filename2.xlsx")
    

    现在您可以在代码中访问这些对象,并使用它们的 PathName 属性,这将有助于在工作簿关闭后构建依赖于这些对象的公式字符串:

    当引用这样的公式时,我认为语法是:

    '_workbook_path[_workbook_name_]_sheet_name'!_cell_address
    

    所以,像这样(未经测试,如果您的文件名/工作表名称有空格/等,可能需要一些调整。)

    ActiveCell.Formula = "=SumIf('" & f1.Path & "[" & f1.Name & "]Sheet1'!$Y:Y)+" & _
                         "SumIf('" & f2.Path & "[" & f2.Name & "]Data from ABC'!$Y:Y)"
    

    等等

    但是

    尚不清楚您何时/如何实现此功能,并且可能有更好的方法从未打开的工作簿中获取数据,包括 ADODB 和 ExecuteExcel4Macro 方法。

    【讨论】:

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