如何根据一个条件找到一个范围,然后根据另一个条件找到该范围内的单元格
How find a Range based on one criteria then a Cell within that Range based on another criteria
我需要一种方法来根据一个条件找到范围,然后根据另一个条件找到该范围内的单元格。
在这种情况下,我有一个工作表,您可以根据需要添加任意数量的商业房地产,然后在其中分配财务信息。每个 属性 最多可以有三年的财务数据。所以在 cell("G2") 中,你将是第一个属性名称,然后在 range("G3:I3") 中,将是每个语句传播的语句日期,并且 range("G38:I38") 包含我的数据最终需要提取。任何额外的 属性 都会有相同的行号,但所有内容都会向右 6 列。
所以基本上我需要找到 属性 名称,然后在该范围内(比方说 ("G2:I60"))我需要找到那些基于 G38、H38 或 I38 的数据在需要的声明日期。
现在我有两个用户表单; 1 显示所有 属性 名称,在您 select 之后显示第二个显示语句日期的 useform。
谁能帮忙解决这个问题。让我知道是否有任何我需要解释的未知数,因为这对我来说很难用语言表达。
示例:
Property Name: DEF St
12/31/2013 12/31/2014 12/31/2015
Rental Income 150 240 485
Expenses 100 200 300
Net Income 50 40 185
Property Name: ACME St
12/31/2013 12/31/2014 12/31/2015
Rental Income 100 120 350
Expenses 75 125 180
Net Income 66 76 266
在这个例子中,我需要第一个用户表单来找到 属性 DEF St when selected from the list box 然后找到任何报表数据的净收入 select从下一个用户表单的列表框中编辑。
概念验证
数据布局与上图所示类似。示例数据位于第 2 至 6 行,公式位于 G10:G14 中的示例数据下方。 J、K、L列存在与否无关紧要
INDEX 函数在这个例子中被大量使用来确定你的选择点或你的范围。极有可能可以简化。
G10是被选中的属性
G11 是选择的日期
G12 到 G14 是一个公式,使用以下公式从相应的 属性 和日期中提取适当的值:
=INDEX(INDEX($G:$O,1,MATCH($G,INDEX($G:$O,1,0),0)):INDEX($G:$O,5,MATCH($G,INDEX($G:$O,1,0),0)+2),MATCH($F12,$F:$F,0),MATCH($G,INDEX($G:$O,2,MATCH($G,INDEX($G:$O,1,0),0)):INDEX($G:$O,2,MATCH($G,INDEX($G:$O,1,0),0)+2),0))
这是放在单元格 G4 中并复制下来的
工作原理:
INDEX returns 与输入的信息相匹配的 address/range。我通过硬编码数值或使用 MATCH 函数来确定位置来定义适当的行。
INDEX($G:$O,1,MATCH($G,INDEX($G:$O,1,0),0))
公式的这一部分告诉 excel 查看范围 G2:O6
,使用 1
将其行限制为第 1 行,然后确定要查看的列MATCH($G,INDEX($G:$O,1,0),0)
。
为了分解 match 正在做什么,它试图在 G2:O6 的第一行范围内的单元格 G10(属性)中找到值。第一个 0 存在有两个原因。由于范围是二维的,因此您似乎需要在此处指定一些值,否则尽管它被标记为可选,您仍会收到错误消息。第二个原因是 0 告诉索引使用所有列或行,具体取决于它是在 INDEX 公式的列部分还是行部分中使用。第二个 0 告诉索引查找完全匹配。
因此,当这部分成功评估时,它returns M2 的地址。然后重复此过程,但将 2 添加到匹配结果中以将我们放入 O 列并硬编码 5 以获得 O6 的地址。所以这里稍微简写一下,上面的公式为:
INDEX():INDEX()
示例数据最终被评估为:
M2:O2
然后通过在这个范围内使用我们刚刚确定的类似MATCH和INDEX组合,我们找出范围内的3列中的哪一列与日期匹配,以及5行中的哪一列与F12左侧的单词匹配F14。这可能是硬编码的,但我选择将其保留为变量,以防数据顺序与显示顺序不同。
拼写和日期必须完全匹配,这一点很重要。尾随空格会引发循环并可能会得到一些意想不到的结果。您还可以将整个公式包装在 IFERROR() 函数中,使用 "" 或 "Not Found" 作为错误结果。这将防止 excel 在未输入所有信息时在单元格中显示错误消息。
我需要一种方法来根据一个条件找到范围,然后根据另一个条件找到该范围内的单元格。
在这种情况下,我有一个工作表,您可以根据需要添加任意数量的商业房地产,然后在其中分配财务信息。每个 属性 最多可以有三年的财务数据。所以在 cell("G2") 中,你将是第一个属性名称,然后在 range("G3:I3") 中,将是每个语句传播的语句日期,并且 range("G38:I38") 包含我的数据最终需要提取。任何额外的 属性 都会有相同的行号,但所有内容都会向右 6 列。
所以基本上我需要找到 属性 名称,然后在该范围内(比方说 ("G2:I60"))我需要找到那些基于 G38、H38 或 I38 的数据在需要的声明日期。
现在我有两个用户表单; 1 显示所有 属性 名称,在您 select 之后显示第二个显示语句日期的 useform。
谁能帮忙解决这个问题。让我知道是否有任何我需要解释的未知数,因为这对我来说很难用语言表达。
示例:
Property Name: DEF St
12/31/2013 12/31/2014 12/31/2015
Rental Income 150 240 485
Expenses 100 200 300
Net Income 50 40 185
Property Name: ACME St
12/31/2013 12/31/2014 12/31/2015
Rental Income 100 120 350
Expenses 75 125 180
Net Income 66 76 266
在这个例子中,我需要第一个用户表单来找到 属性 DEF St when selected from the list box 然后找到任何报表数据的净收入 select从下一个用户表单的列表框中编辑。
概念验证
数据布局与上图所示类似。示例数据位于第 2 至 6 行,公式位于 G10:G14 中的示例数据下方。 J、K、L列存在与否无关紧要
INDEX 函数在这个例子中被大量使用来确定你的选择点或你的范围。极有可能可以简化。
G10是被选中的属性
G11 是选择的日期
G12 到 G14 是一个公式,使用以下公式从相应的 属性 和日期中提取适当的值:
=INDEX(INDEX($G:$O,1,MATCH($G,INDEX($G:$O,1,0),0)):INDEX($G:$O,5,MATCH($G,INDEX($G:$O,1,0),0)+2),MATCH($F12,$F:$F,0),MATCH($G,INDEX($G:$O,2,MATCH($G,INDEX($G:$O,1,0),0)):INDEX($G:$O,2,MATCH($G,INDEX($G:$O,1,0),0)+2),0))
这是放在单元格 G4 中并复制下来的
工作原理:
INDEX returns 与输入的信息相匹配的 address/range。我通过硬编码数值或使用 MATCH 函数来确定位置来定义适当的行。
INDEX($G:$O,1,MATCH($G,INDEX($G:$O,1,0),0))
公式的这一部分告诉 excel 查看范围 G2:O6
,使用 1
将其行限制为第 1 行,然后确定要查看的列MATCH($G,INDEX($G:$O,1,0),0)
。
为了分解 match 正在做什么,它试图在 G2:O6 的第一行范围内的单元格 G10(属性)中找到值。第一个 0 存在有两个原因。由于范围是二维的,因此您似乎需要在此处指定一些值,否则尽管它被标记为可选,您仍会收到错误消息。第二个原因是 0 告诉索引使用所有列或行,具体取决于它是在 INDEX 公式的列部分还是行部分中使用。第二个 0 告诉索引查找完全匹配。
因此,当这部分成功评估时,它returns M2 的地址。然后重复此过程,但将 2 添加到匹配结果中以将我们放入 O 列并硬编码 5 以获得 O6 的地址。所以这里稍微简写一下,上面的公式为:
INDEX():INDEX()
示例数据最终被评估为:
M2:O2
然后通过在这个范围内使用我们刚刚确定的类似MATCH和INDEX组合,我们找出范围内的3列中的哪一列与日期匹配,以及5行中的哪一列与F12左侧的单词匹配F14。这可能是硬编码的,但我选择将其保留为变量,以防数据顺序与显示顺序不同。
拼写和日期必须完全匹配,这一点很重要。尾随空格会引发循环并可能会得到一些意想不到的结果。您还可以将整个公式包装在 IFERROR() 函数中,使用 "" 或 "Not Found" 作为错误结果。这将防止 excel 在未输入所有信息时在单元格中显示错误消息。