Excel 如何根据一个条件找到一个范围,然后根据另一个条件找到该范围内的单元格

Excel 如何根据一个条件找到一个范围,然后根据另一个条件找到该范围内的单元格,excel,userform,data-extraction,vba,Excel,Userform,Data Extraction,Vba,我需要一种方法,根据一个条件找到一个范围,然后根据另一个条件找到该范围内的单元格 在本例中,我有一个工作表,您可以添加任意数量的商业房地产,然后将财务数据分散到其中。每一处房产最多可拥有三年的财务状况。因此,在单元格(“G2”)中,您将是第一个属性名称,然后在范围(“G3:I3”)中,您将是每个语句排列的语句日期,范围(“G38:I38”)包含我最终需要提取的数据。任何附加属性都将具有相同的行号,但所有内容都将是右侧的6列 因此,本质上我需要找到属性名称,然后在该范围内(比如说(“G2:I60”

我需要一种方法,根据一个条件找到一个范围,然后根据另一个条件找到该范围内的单元格

在本例中,我有一个工作表,您可以添加任意数量的商业房地产,然后将财务数据分散到其中。每一处房产最多可拥有三年的财务状况。因此,在单元格(“G2”)中,您将是第一个属性名称,然后在范围(“G3:I3”)中,您将是每个语句排列的语句日期,范围(“G38:I38”)包含我最终需要提取的数据。任何附加属性都将具有相同的行号,但所有内容都将是右侧的6列

因此,本质上我需要找到属性名称,然后在该范围内(比如说(“G2:I60”)),我需要根据所需的语句日期在G38、H38或I38中找到这些数据

现在我有两个用户表单;1显示所有属性名称,选择后显示第二个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,然后在下一个用户表单中从列表框中选择的报表数据中查找净收入。

概念证明

数据的布局类似于上图所示。样本数据位于第2行至第6行,公式位于G10:G14中样本数据的下方。J、K或L列是否存在并不重要

在本例中,索引函数经常用于确定拾取点或范围。它很有可能被简化

G10是选定的属性
G11是选择的日期

G12到G14是一个公式,使用以下公式从相应的属性和日期中提取适当的值:

=INDEX(INDEX($G$2:$O$6,1,MATCH($G$10,INDEX($G$2:$O$6,1,0),0)):INDEX($G$2:$O$6,5,MATCH($G$10,INDEX($G$2:$O$6,1,0),0)+2),MATCH($F12,$F$2:$F$6,0),MATCH($G$11,INDEX($G$2:$O$6,2,MATCH($G$10,INDEX($G$2:$O$6,1,0),0)):INDEX($G$2:$O$6,2,MATCH($G$10,INDEX($G$2:$O$6,1,0),0)+2),0))
这是放置在细胞G4和复制下来

工作原理:

索引返回与提供给它的信息匹配的地址/范围。我通过硬编码数字值或使用匹配函数确定位置来定义适当行

INDEX($G$2:$O$6,1,MATCH($G$10,INDEX($G$2:$O$6,1,0),0))
公式的这一部分告诉excel查看范围
G2:O6
,用
1
将其行限制为第1行,然后确定要查找的
匹配列($G$10,索引($G$2:$O$6,1,0),0)

对于match正在执行的操作的细分,它尝试在单元格G10(属性)中查找G2:O6第一行范围内的值。第一个0存在有两个原因。由于范围是二维的,因此您似乎需要在此处指定一些值,否则您将得到一个错误,尽管它被标记为可选。第二个原因是0告诉索引使用所有列或行,这取决于它是否用于索引公式的列或行部分。第二个0告诉索引查找精确匹配

因此,当成功评估此部分时,它返回M2的地址。然后重复此过程,但在匹配结果中添加2以将我们放入O列,并硬编码5以获得O6的地址。以这里略作缩写为例,上面的公式:

INDEX():INDEX()
对于示例数据,评估结果为:

M2:O2
然后,通过在这个范围内使用类似的匹配和索引组合,我们只需确定,我们就可以确定该范围内的3列中的哪一列与日期匹配,以及5行中的哪一行与F12到F14中左侧的单词匹配。这可能是硬编码的,但我选择将其保留为变量,以防数据顺序与显示顺序不同


拼写和日期必须完全匹配,这一点很重要。尾随空格将抛出循环的内容,可能会得到一些意外的结果。您还可以使用“”或“未找到”将整个公式包装到和IFERROR()函数中,以获得错误结果。这将防止excel错误消息在未输入所有信息时显示在单元格中。

我认为多个条件的(?)应该会有所帮助。到目前为止,您尝试了什么?如果不拉动整个信息数据库,是否有可能提供一些可用于表示相同问题的简化示例数据?我在“描述”一词中有点迷失了方向,我创建了一个示例。我如何附加它呢?如果你是在excel中附加的,你可以剪切粘贴。它的格式看起来很难看,但我们可以编辑它使它看起来更好。有一件事将有助于复制和过去是有一个独特的字符(-,*,+,“空白”,等)在空单元格。以帮助在复制和粘贴过程中保留格式。@BruceWayne您在这方面做得完全正确。我想使用偏移量,但我一直听到斯科特·克兰纳在我脑后说不要使用波动函数,所以我多次选择使用非波动指数。我认为偏移量应该看起来更干净,虽然8(哇,那太长了!我想一旦我得到了你的示例设置,我将能够完成它,并将其应用到我的实际数据库中。我需要在哪里将哪个单元格放置到“属性名称”中进入?希望这将帮助我开始。F2有“属性名称”一词。第2行将在某一点上包含所有属性名称。G10应该有所需的属性名称,而G11应该有所需的年份?您对G10和G11的解释是正确的