在Excel中创建列表和子列表

时间:2017-01-07 17:11:21

标签: excel excel-formula

我有一个活动类别列表,这个列表中的每个活动本身都将被分类,并且每个最终活动再次将我链接到一个特定的数字,我在Excel的一个函数中使用该数字来查找我的最终答案。

我正在寻找一种解决方案来使其自动化,所以当某人选择他们的特定活动时,他们需要选择与他们选择相关的子活动(不显示其他活动),并且当他们选择时我将收到该活动的具体代码或编号。 另外我不知道如何为文本单元格定义数字,当我选择它时,会给出我为其定义的数字或代码。

示例:我要求您选择一周内做的锻炼和身体活动。你选择了单元格并选择骑自行车,然后你会被要求更具体,你选择另一个单元格来选择骑自行车4英里到7英里/小时的时间。''

答案将是一个数字,该数字将被放置在另一个单元格中,并为我提供在该特定活动期间燃烧的卡路里。

如何创建此公式?非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我认为您正在尝试创建级联下拉列表。我已经包含了一个链接到一个网站,该链接解释了如何制作级联下拉列表,这是我认为您正在寻找的。如果这不能回答你的问题,请告诉我。

Cascading Dropdown Link

修改:

我正在为在Excel中创建的示例添加图像。我在数据验证框中使用的公式是:

=IF($A$1=$F$2,$G$2:$G$5,IF($A$1=$F$3,$H$2:$H$5,IF($A$1=$F$4,$I$2:$I$5,$J$2)))

编辑2:

根据您提供的评论中的其他信息,我创建了图片化的Excel工作簿。

VLookup Example Link

图像顶部显示excel值。展开图像的底部以显示每个单元格中的公式。

这些公式应该允许您根据您在表单中的前一个单元格中输入的内容来查找所需的值。在我的情况下,当您更改单元格A11和A12中的值时,您将看到单元格C11和C12更改为正确的值。 如果您将此与我的第一个答案结合使用,您也可以使用下拉菜单。

如果您需要任何其他解释,请与我们联系。

答案 1 :(得分:0)

我已经为自己的工作目的建立了与你所描述的非常相似的东西。我相信您将向其他用户(即员工,客户等)提交此文档,因此我建议您将分类的答案移至单独的表格中。这样,您将拥有一个非常干净,可呈现的工作表作为表示层。

让我使用评论中提供的示例,但我会添加一个映射。第一类在单元格A1:A3中具有选项(例如,跑步,骑自行车和游泳)。 B1:B5具有跑步速度,C1:C5具有骑行速度,D1:D5具有游泳速度(即1mph,2mph,3mph,4mph,5mph)。

接下来,让我们保留一列以便返回一个列字母(例如,根据锻炼选择,应该返回B,C或D列)。在E列中,键入以下内容,然后向下复制所有将选择数据的行:= IFERROR(INDEX({" B"," C"," D&# 34;},MATCH(A1,$ A $ 1:$ A $ 3,0))," B")<< " B"最后是防止错误在没有选择数据的单元格上返回。

在您希望选择练习类型的单元格中(我将选择单元格F1),添加数据验证(2010年及以后:在功能区中的"数据"标签中)。选择"列表"在第一个下拉列表和Source中(根据我上面提供的示例)将显示以下内容:" $ A $ 1:$ A $ 3"。

然后,在单元格G1(对于我的例子)中,重复数据验证过程,但是在Source中输入以下内容:= INDIRECT(E1&" 1:"& E1&" 5",1)

INDIRECT将为您构建数据验证列表,但是您必须包含我在E列中提供的中间步骤,因为您不能在数据验证列表中包含数组。请同时复制所有公式以包含您想要专用于此功能的每一行(如果您在选择单元格时看不到单元格上的小箭头,则该单元格中不存在该公式,因此请将其复制下来)

如果您的训练列表超过3(我想是这样),请在单元格F1中展开您的数据验证列表以包括所有锻炼(在您的示例中,放置" $ A $ 1:$ A $ 10" (没有报价))。如果您列出的(在提供的示例中)速度增加超过5个级别,则在位于G1数据验证单元格中的INDIRECT公式中,更改" 5"包括所有行。如果您的示例,如果位于单元格A11:A19中的速度,您可以输入:= INDIRECT(E1&" 11:"& E1&" 19",1 )

您可以根据需要多次重复该过程,但是对于您所包含的每个级别,您必须在E列中复制该过程,因为这将是告知后续级别的位置的列。

如果您需要进一步说明如何编码更深层次(即骑自行车,15英里/小时,20分钟,7强度<<这是三层深),请告诉我。

修改

下面的附加步骤

我抱歉没有包含那种性质的东西。您仍然可以使用我上面描述的方法来创建动态下拉列表,但是您需要一个额外的步骤才能返回表示要根据卡路里计数常数计算的强度级别的值。

我必须为Robert Boyett的回答+1。这是编码所需内容的更简单方法。我将提供一种方法,允许您根据需要动态添加更多的训练程序,而无需添加额外的IF条件和相关的VLOOKUP。我将使用Robert Boyett的链接作为参考。

在单元格C11中,键入以下内容:= SUMIFS(INDIRECT(INDEX({" A"," B"," C"," d"" E"" F"" G"},MATCH(A11,$ A $ 4:$ G $ 4,0)+1) &安培;" 1:"&安培; INDEX({" A"" B"" C"" d&# 34;," E"" F"" G"},MATCH(A11,$ A $ 4:$ G $ 4,0)1)及" 3&#34),间接的(INDEX({" A"" B"" C"" d" " E"" F"" G"},MATCH(A11,$ A $ 4:$ G $ 4,0))及;" 1:"&安培; INDEX({" A"" B"" C"" d"&#34 ; E"" F"" G"},MATCH(A11,$ A $ 4:$ G $ 4,0))及;" 3" ),B11)

这将要求细胞B4,D4和F4掉落拖尾"类型"而是与第一个下拉列表(跑步,骑自行车,游泳)中的措辞完全匹配,这样MATCH公式将返回所需的值。

您也可以将MATCH公式中的限制($ A $ 4:$ G $ 4)扩展到很远的地方...比如说$ A $ 4:$ BA $ 4<<这将允许多达26种不同的锻炼。进一步扩展以包括更多锻炼类型。此外,在INDIRECT公式中,展开" 3"为了包括更多的强度等级(放置" 9"而不是" 3"将允许多达9个强度等级)。

你可能已经注意到我包含了一个带字母的数组。更好的做法是让这个数组实际上选择一系列单元格,在每个后续单元格中,它包含字母表中的每个字母。在我使用$ A $ 4范围:$ BA $ 4范围的例子中,你会输入BB列,每行中的字母,当你到达Z时,重启字母A,即AA,AB ,AC等)并继续尽你所能。用这个范围替换数组(在INDEX公式中用大括号{}标识),在这个例子中,$ BB $ 1:$ BB $ 53。

另外,我建议把标题放在最上面的一行,所以你应该有$ A $ 1:$ BA $ 1而不是$ A $ 4:$ G $ 4(或者在最后一段$ A $ 4:$ BA $ 4) 。这样你可以添加任意数量的强度(如果你在INDIRECT函数中分配了这样的强度。

在初始公式之后提供所有指示后,您现在将进入单元格C17:= SUMIFS(INDIRECT(INDEX($ BB $ 1:BB $ 53,MATCH(A11,$ A $ 1:$ BA $ 1,0)+ 1)及;" 1:"&安培; INDEX($ BB $ 1:BB $ 53 MATCH(A11,$ A $ 1:$ BA $ 1,0)+1)&安培;" 9&# 34),间接的(INDEX($ BB $ 1:BB $ 53 MATCH(A11,$ A $ 1:$ BA $ 1,0))及;" 1:"&安培; INDEX($ BB $ 1: BB $ 53 MATCH(A11,$ A $ 1:$ $ BA 1,0))及;" 9&#34),B11)

根据需要增加限制。我强烈建议将数据放入单独的电子表格中,或者,如果运行旧版本的Excel,请将此数据剪切并粘贴到用户表单的右侧(根据罗伯特的照片说明H列的右侧看起来是安全的)隐藏列。然后保护工作表不被更改,减少您选择取消保护以供用户输入的单元格。

欢呼Robert Boyett在托管服务器上提供.png文件。非常有用的资源。