将单元格的公式元素拆分为单独的单元格

所以我有一个公式=A+B的单元格, AB是外部电子表格不再打开的外部值。 我想知道如果excel记住公式元素,是否有可能获得这些元素值到其他单元格。 即

 Row Formula Value 1 =A+B 45 2 =ELEMENT(A1, 1) 10 3 =ELEMENT(A1, 2) 35 

我不能想象这是简单的吗? 我可以使用+作为一个关键字来分隔vba中的公式,但是这并不理想,因为它需要重新打开外部电子表格。 如果外部电子表格必须重新打开,那么我不必费心尝试将公式分开。 我希望这是有道理的,并有一个答案。

您的公式已经访问这些值,以便在打开的工作簿中进行求和。 您不需要重新打开工作簿以评估参考值,也不需要parsing活动工作簿中的公式。

假设你的公式引用一个封闭的工作簿,用一个简单的求和函数,如:

='C:\Users\david_zemens\Desktop\[test.xlsx]Sheet1'!$A$1 + ='C:\Users\david_zemens\Desktop\[test.xlsx]Sheet1'!$B$1

您可以使用VBA或在工作表上使用string函数来分析公式。 正如你所注意到的,对于这个例子,用+运算符parsing就足够了。 由于我认为你知道如何做到这一点,我的例子并没有演示如何parsing公式。

只要您知道或可以从公式获得参考,您应该可以通过公式访问这些单元格的值,或者使用ExecuteExcel4Macro编程方式在VBA中访问这些单元格的值。

 Sub GetValsFromClosedWorkbook() Dim fileName As String Dim filePath As String Dim sheetName As String Dim cellref As String Dim myFormula As String 'This example might be one of the two arguments in your "A+B" formula: ' 'C:\Users\david_zemens\Desktop\[test.xlsx]Sheet1'!A1 '## Assume you can properly parse the formula to arrive at these: fileName = "test.xlsx" filePath = "C:\Users\david_zemens\Desktop\" sheetName = "Sheet1" cellref = "A1" 'Concatenate in to R1C1 notation myFormula = "='" & filePath & "[" & fileName & "]" & sheetName & "'!" & _ Range(cellref).Address(, , xlR1C1) '## First, demonstrate that we can evaluate external references: With Range("B1") .Value = myFormula MsgBox .Value .Clear End With '## Evaluate the formula using ExecuteExcel4Macro: MsgBox ExecuteExcel4Macro(Replace(myFormula, "=", vbNullString)) End Sub 

附加信息

http://spreadsheetpage.com/index.php/tip/a_vba_function_to_get_a_value_from_a_closed_file/

更新

根据OP的这个工作原理(下面的评论),我不确定它是如何在幕后工作的,但这是我的猜测/解释:

首先,请记住,单元格可能具有各种属性,如.Text.Value.Value2.Formula等等,它们以某种方式表示其内容。

在计算公式之前,这些值不在活动文件中,此时Excel会查询外部文件并返回该引用的当前Value 。 现在活动文件包含该Value以及Formula引用外部文件。

在继续工作时,活动文件会保留“ Value和引用,但可能只会在提示时更新值。 例如,当您重新打开链接的工作簿时,系统会提示您是否“更新外部链接”。

  • 如果你说不,它会使用以前存储的值(仍然保留Formula ,它只是不评估它。
  • 如果你说是,它将重新评估公式(如果外部文件中的值已经改变)并返回新的值.Value

所以,这是我怀疑正在发生的事情。 如果你问“Excel 如何访问未打开的工作簿中的数据”我真的不知道我怎么知道它的确如此