我正在寻找一种方法来引用命名范围内的单元格,并让浏览电子表格的人能够理解。
我有这个电子表格:
A B C D E F G H
1 jan feb mar apr may sum sum2
2 car 1 2 3 4 5
3 bot 3 4 5 6 7
4 top 10 20 30 40 50
因此,“car”是命名范围 B2:F2,“jan”是命名范围 B2:B4
在理想世界中我会这样做:
G2 = car jan
然后,当我将上述公式复制粘贴到 H2 时,Excel 会自动将“jan”增加到“feb”,然后我得到
G3 = car feb
这显然行不通。我看到人们建议使用不同的方法来获得这样的结果,但这给我留下了一些冗长的查找公式,而我希望阅读电子表格的人能够直观地理解所有的引用,而不需要知道公式代表什么。
如果这绝对不可能,我很乐意至少能够通过行名和列字母来引用单元格。这样我就可以做到:
G2 = SOMEFORMULA(car, C)
答案1
使用您所说的范围在 G2 中写入下一个可拖动公式:
=INDEX($A$1:$F$4,ROW(INDIRECT($A2)),COLUMN(INDIRECT(B$1)))
当然你也可以写类似
=INDEX($A$1:$F$4,ROW(car),COLUMN(feb))
但这种方案是无法拖延的。
(注意 $A$1:$F$4 是您的数据集参考)
希望它有效!
答案2
这是一个 VBA 解决方案。使用宏来完成可以使用工作表公式完成的事情并不是最佳做法,但它可以为您提供所需的功能。在您的工作簿中创建一个模块并将此代码添加到模块中。不要忘记将您的文件保存为 .xlsm
Function SOMEFORMULA(item As Variant, month As Variant)
Dim rng As Range
'set your lookup range
Set rng = Worksheets("Sheet1").Range("A1:F4")
SOMEFORMULA = Application.WorksheetFunction.Index(rng, WorksheetFunction.Match(item, WorksheetFunction.Index(rng, 0, 1), 0), WorksheetFunction.Match(month, WorksheetFunction.Index(rng, 1, 0), 0))
End Function
我的建议是对数据数组使用命名范围,例如以下行:
Set rng = Worksheets("Sheet1").Range("A1:F4")
变成:
Set rng = Worksheets("Sheet1").Range("named_range")
并且可以从工作簿进行编辑。
您可能还想将公式名称从“SOMEFORMULA()”更改为更小/更合适的名称。
结果如下: