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

时间:2016-07-26 17:32:48

标签: excel excel-vba userform data-extraction vba

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

在这种情况下,我有一个工作表,您可以根据需要添加许多商业房地产,然后在那里传播财务。每个房产最多可以有三年的财务状况。因此在单元格(“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,然后找到从下一个用户表单的列表框中选择的任何语句数据的净收入。

1 个答案:

答案 0 :(得分:1)

概念证明

POC

数据布局与上图所示相似。样本数据在第2行到第6行,公式低于G10:G14中的样本数据。列J,K或L是否存在无关紧要。

此示例中正在使用INDEX函数来确定您的选择点或范围。它很有可能被简化。

G2是被选中的财产 G3是选定的日期

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

=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))

将其放入Cell G4并复制

如何运作:

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

INDEX($G$2:$O$6,1,MATCH($G$10,INDEX($G$2:$O$6,1,0),0))

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

对于匹配正在进行的分解,它试图在G2:O6的第一行范围内找到单元格G10(属性)中的值。第一个0有两个原因。因为范围是2维,所以你需要在这里指定一些值,否则你会得到一个错误,尽管它被标记为可选。第二个原因是0告诉索引使用所有列或行,具体取决于它是否在INDEX公式的列或行部分中使用。第二个0告诉索引寻找完全匹配。

结果,当成功评估该部分时,它返回M2的地址。然后重复此过程,但在匹配结果中加2,将我们放入O列,硬编码5到达O6的地址。所以在这里使用一点缩写作为例子,上面的公式为:

INDEX():INDEX()

将示例数据评估为:

M2:O2

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

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