如何在引用不同工作表时将公式输入单元格
How to input formula into cells while citing different worksheets
我已经使用 VBA 一段时间了,现在我被困在这个问题上:
假设我在每个单元格中都有 A、B、C、D、E... 作为工作表的名称&&该名称与每个工作表的名称 100% 匹配(工作表 A、B、C...)
那么如何使用VBA将公式输入COL2,如='sheetname!'$B$2(单元格地址)?
公式里面的sheetname对应COL1(&&每个工作表的名字)
通常 VBA returns 只是值,但这次我需要通过打印公式来参考。
----COL1----COL2
R1--A ='A!'$B$2
R2-- B ='B!'$B$2
R3-- C ='C!'$B$2
R4--D ='D!'$B$2
R.-- ... ='...!'$B$2
实际工作表名称很乱,不像结构化的字母&数字,
非常感谢您的建议!谢谢!
我想两张图能更好地说明我的问题:
overview
worksheets
我好像还不能嵌入图片..但无论如何...
所以我的目标是:
1.Get 来自 Name(C) col 的名字。
2.Write Supplier(D) 列中的公式。 ='(名字在 Col.C)'!$B$2
注:col.C中的名称对应工作表。(图2)
*我原计划是:
对于工作表中的每个工作表
If wrksheet.Index >= 10 Then
sheetname = wrksheet.Name #1 pass wrksheet's name into sheetname variable
sum.Cells(i, 4).formula = "='sheetname!'$B" #2 input current worksheet's cell(B2) and print into worksheet sum's cell(i,4)
End If
i=i+1
但是,显然,这个技巧 (#2) 不起作用....
那么如何在获取工作表名称后自动编写公式呢?
希望你们清楚这一点?
==========================================
子公式()
Dim s As Worksheet, w As Worksheet
Set s = Worksheets("Summary")
Dim i, stname
i = 1
For Each w In Worksheets
If w.Index > 1 Then
stname = w.Name
s.Cells(i, 4).formula = "=" & stname & "!$B"
End If
i = i + 1
Next w
结束子
但是代码报告问题...这是为什么?
很难理解你想问的问题,但我会尽力解决你的问题。将来,建议在您的问题中包含代码。
要将公式输入单元格,可以使用Range.Formula
方法。这里有一个关于它如何工作的很好的解释:- https://msdn.microsoft.com/en-us/library/office/ff838835.aspx
不过,据我了解,您希望将公式作为文本输入,以便日后参考。最简单的方法是使用 Range.Value
方法。此处对此进行了描述:- https://msdn.microsoft.com/en-us/library/office/ff195193.aspx
但是,如果您只是将格式为 =FORMULA
的公式插入到 Range.Value
中,您会发现 Excel 会将其解释为公式并因此尝试显示值它的解决方案。解决这个问题的最简单方法是在公式中的等号前添加一个撇号,如下所示:- '=FORMULA
这会强制 Excel 将公式解释为纯文本。该单元格将以可读格式显示您选择的公式。因此,您的解决方案将如下所示:-
Cells(1,2).Value = "'='" & Cells(1,1).Value & "!'$B"
其中 Cells(1,1)
包含您的工作表名称,而 Cells(1,2)
将成为您的参考公式。
要稍后引用此单元格并将其用作公式,您需要删除我们刚刚添加的撇号。有多种方法可以做到这一点;如果您需要其他帮助,请直接询问。
我已经使用 VBA 一段时间了,现在我被困在这个问题上:
假设我在每个单元格中都有 A、B、C、D、E... 作为工作表的名称&&该名称与每个工作表的名称 100% 匹配(工作表 A、B、C...)
那么如何使用VBA将公式输入COL2,如='sheetname!'$B$2(单元格地址)? 公式里面的sheetname对应COL1(&&每个工作表的名字)
通常 VBA returns 只是值,但这次我需要通过打印公式来参考。
----COL1----COL2
R1--A ='A!'$B$2
R2-- B ='B!'$B$2
R3-- C ='C!'$B$2
R4--D ='D!'$B$2
R.-- ... ='...!'$B$2
实际工作表名称很乱,不像结构化的字母&数字,
非常感谢您的建议!谢谢!
我想两张图能更好地说明我的问题:
overview worksheets
我好像还不能嵌入图片..但无论如何... 所以我的目标是: 1.Get 来自 Name(C) col 的名字。 2.Write Supplier(D) 列中的公式。 ='(名字在 Col.C)'!$B$2
注:col.C中的名称对应工作表。(图2)
*我原计划是:
对于工作表中的每个工作表
If wrksheet.Index >= 10 Then
sheetname = wrksheet.Name #1 pass wrksheet's name into sheetname variable
sum.Cells(i, 4).formula = "='sheetname!'$B" #2 input current worksheet's cell(B2) and print into worksheet sum's cell(i,4)
End If
i=i+1
但是,显然,这个技巧 (#2) 不起作用.... 那么如何在获取工作表名称后自动编写公式呢? 希望你们清楚这一点?
========================================== 子公式()
Dim s As Worksheet, w As Worksheet
Set s = Worksheets("Summary")
Dim i, stname
i = 1
For Each w In Worksheets
If w.Index > 1 Then
stname = w.Name
s.Cells(i, 4).formula = "=" & stname & "!$B"
End If
i = i + 1
Next w
结束子
但是代码报告问题...这是为什么?
很难理解你想问的问题,但我会尽力解决你的问题。将来,建议在您的问题中包含代码。
要将公式输入单元格,可以使用Range.Formula
方法。这里有一个关于它如何工作的很好的解释:- https://msdn.microsoft.com/en-us/library/office/ff838835.aspx
不过,据我了解,您希望将公式作为文本输入,以便日后参考。最简单的方法是使用 Range.Value
方法。此处对此进行了描述:- https://msdn.microsoft.com/en-us/library/office/ff195193.aspx
但是,如果您只是将格式为 =FORMULA
的公式插入到 Range.Value
中,您会发现 Excel 会将其解释为公式并因此尝试显示值它的解决方案。解决这个问题的最简单方法是在公式中的等号前添加一个撇号,如下所示:- '=FORMULA
这会强制 Excel 将公式解释为纯文本。该单元格将以可读格式显示您选择的公式。因此,您的解决方案将如下所示:-
Cells(1,2).Value = "'='" & Cells(1,1).Value & "!'$B"
其中 Cells(1,1)
包含您的工作表名称,而 Cells(1,2)
将成为您的参考公式。
要稍后引用此单元格并将其用作公式,您需要删除我们刚刚添加的撇号。有多种方法可以做到这一点;如果您需要其他帮助,请直接询问。