命名行和命名列的自动递增单元格

命名行和命名列的自动递增单元格

我正在寻找一种方法来引用命名范围内的单元格,并让浏览电子表格的人能够理解。

我有这个电子表格:

  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()”更改为更小/更合适的名称。

结果如下:

在此处输入图片描述

相关内容