8

我知道如何在 Excel 中创建一个命名范围。

我有一个电子表格,各种列作为参数,最后是最后一个单元格中的公式。这在每行中重复多次,每行具有不同的数据集,并且更新公式以引用正确的行索引。

但是,公式看起来像(三行):

=G2*(10*D2 + 20*E2 + 5*F2)
=G3*(10*D3 + 20*E3 + 5*F3)
=G4*(10*D4 + 20*E4 + 5*F4)

我想使用命名范围,但我找不到类似的方法

=Count * (10*var1 + 20*var2 + 5*var3)

其中 count、var1、var2 和 var3 自动更新为当前行的特定列。我可以为每个单元格创建一个命名范围,但这没有帮助。我可以命名列的范围,但是我找不到在公式中添加偏移量的方法。

此外,这一点的重点是可读性,所以如果它最终成为一些令人讨厌的复杂公式函数调用,那可能并没有太大帮助。

4

9 回答 9

7

简单,至少在使用 Excel 2010 时:

  1. 为您的列命名:选择整列,输入名称
  2. 在公式中使用列名;Excel 会将引用的列与当前行组合以访问单个单元格。

使用Alex P 的示例

  1. 通过单击包含“D”的列标题选择列 D,在名称字段中输入名称“input1”,然后按Enter
  2. 分别使用“input2”和“input3”对 E 到 F 列重复。
  3. 不要像上面的示例那样定义定义名称“input1”[...] 的附加名称!
  4. 使用上面示例中给出的公式

注意力:

以这种方式使用命名列,您无法访问任何其他行,因为您的公式所在的行!

至少我不知道表达诸如 <ColName>(row+1) 之类的东西的可能性...

于 2013-10-29T19:36:39.417 回答
5

我建议创建一个Table。选择您的范围A1:H4,然后转到表格小部件 > 新建 > 插入带有标题的表格(在 Mac 上)。这将标记A2:H4为表格的主体和A1:H4标题。

由此,你得到:

  • 无论您在标题列中输入什么内容,都会自动定义该列的名称,例如Count, Radius, Density,Height
  • 然后,您可以使用=[@Count]*(10*[@Radius] + 20*[@Density] + 5*[@Height])
  • 当您更改单元格中的公式时H2,Excel 会自动将此公式“复制”到列中的所有单元格H。因此,公式中不再有意外的不一致。
  • 当您需要添加另一行时,只需单击最后一个单元格(在我们的示例中H4)并点击Tab。Excel 添加另一行,并确保将您的公式“复制”到新行中。
  • 如果您需要总行,请使用表格小部件中的总行复选框添加它。Excel 自动添加总行。如果单击总计行中的任何单元格,则可以使用“▼▲”按钮更改“总计公式”,例如计算平均值而不是列的总和。
  • 如果您有一个长表并向下滚动以使标题不再可见,Excel 会自动显示列标题而不是列名(Count而不是G例如)。

我真的可以推荐视频You Suck at Excel with Joel Spolsky,它解释了所有这些。

于 2016-10-13T14:02:50.290 回答
4

假设我在第 2 到第 4 行的 D 到 F 列中设置了以下数字:

    D    E    F    G
2   10   15   20
3   1    2    3
4   20   30   40

现在假设我希望 D 列中的值被称为input1, E 列是input2, F 列是input3

插入>名称>定义...

input1 RefersTo =OFFSET(Sheet1!$D$2,0,0,COUNT(Sheet1!$D:$D),1)
input2 RefersTo =OFFSET(Sheet1!$E$2,0,0,COUNT(Sheet1!$E:$E),1)
input3 RefersTo =OFFSET(Sheet1!$F$2,0,0,COUNT(Sheet1!$F:$F),1)

现在,如果我在 G 列中写下我的公式,我应该得到正确的答案:

G2 =(10*input1+20*input2+30*input3) // 1000
G3 =(10*input1+20*input2+30*input3) // 140
G5 =(10*input1+20*input2+30*input3) // 2000
于 2010-12-17T18:12:35.370 回答
3

我还没有完全回顾以前的答案,但我认为这更接近 OP 正在寻找的 @Jason Coyne。所以,我希望我能得到很多赞成票。;-)

如果您“格式化为表格”,Excel 允许您的公式按名称引用表格和列。这是一篇题为“将结构化引用与 Excel 表结合使用”的文章,其中详细介绍了该文章。

FWIW,看起来此功能自 Excel 2007 起就已可用。

这是一个示例的屏幕截图:

在此处输入图像描述

您应该能够看到 E2 中的公式=[@Count] * (10*[@Var1] + 20*[@Var2] + 5*[@Var3])非常接近 @jason-coyne 想要输入的内容。

我不喜欢你被迫选择一种风格(或者如果你没有看到你喜欢的风格,就定义一个新风格)。好消息是您可以根据需要重新格式化单元格,而无需撤消“tableness”。

它坚持打开自动过滤器。但是,自动过滤器很容易关闭(请参阅表格工具设计菜单下的过滤器按钮复选框)。

它还坚持在标题行中包含非空的唯一值(这有点道理)。如果您删除标题单元格或插入一列,Excel 会发明一个新的、唯一的名称并将其填入。哦!

如果您希望一列没有标题,您可以输入一个撇号 ('),后跟一个或多个空格。请记住,标题值必须是唯一的,因此如果您想要多个没有标题的列,请继续添加空格。

如果您想下载屏幕截图中的示例工作簿,请点击以下链接:https ://filebin.ca/3vfaSDn4NLEA/SampleWorkbook.xlsx

于 2018-03-21T19:16:44.087 回答
2

添加到Alex P 的答案

而不是使用

=OFFSET(Sheet1!$D$2,0,0,COUNT(Sheet1!$D:$D),1)
作为input1的公式,我建议使用
=Sheet1!$D$2:INDEX(Sheet1!$D:$D,COUNT(Sheet1"$D:$D))

它产生相同的结果,但它是非易失性的,即仅在前导单元更改时重新计算。这在更大的模型中要好得多!

于 2013-02-16T22:39:23.363 回答
1

如果您使用的是 VBA,那么您可以选择整个列并MyCol在名称框中(左上角输入框)命名它,例如 。MyCol在您的代码中,您可以使用以下代码引用列(第 12 行)中的单元格:

Cells(12, Range("MyCol").Column)
于 2014-08-11T09:55:19.653 回答
0

您也许可以使用 row() 函数。这将返回您所在的当前行。因此,根据电子表格的布局,您可以像这样使用它:

=offset(NamedColumn1, row()-1)

-1 是因为你说从第 1 行向下移动多少行,如果你在第 1 行,你想成为 0。

于 2010-12-18T08:47:17.530 回答
0

使用名为命名引用的 Excel 功能。

命名单元格或单元格范围

  1. 选择该单元格或单元格范围
  2. 在名称框中输入其名称(公式小部件的左侧并具有单元格名称)

您不能使用与单元格名称冲突的名称,例如k0.

如果公式可以使用命名的单元格。例如,

=pi*radius*radius
于 2013-02-16T01:51:06.167 回答
-1

我想对Dror提出的单元格参考提出一个轻微的变化。这也将起作用:

Range("MyCol").Rows(12)
于 2016-06-11T16:05:50.607 回答