【问题标题】:How find a Range based on one criteria then a Cell within that Range based on another criteria如何根据一个条件找到一个范围,然后根据另一个条件在该范围内找到一个单元格
【发布时间】:2016-07-26 17:32:48
【问题描述】:

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

在这种情况下,我有一个工作表,您可以根据需要添加任意数量的商业房地产,然后在其中传播财务数据。您可以为每处房产拥有长达三年的财务状况。因此,在 cell("G2") 中,您将是第一个属性名称,然后在 range("G3:I3") 中将是每个语句传播的语句日期,并且 range("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,然后在下一个用户表单的列表框中找到从列表框中选择的任何报表数据的净收入。

【问题讨论】:

  • 我认为(?)Index/Match 的多个标准应该会有所帮助。到目前为止,您尝试过什么?
  • 在不提取整个信息数据库的情况下,是否可以提供一些可用于表示相同问题的简化示例数据?我对文字描述有点迷失了。
  • @Forwarded 我创建了一个示例。我该如何附加它?
  • 如果你是用excel做的,你可以剪切和粘贴。它的格式看起来很难看,但我们可以对其进行编辑以使其看起来更好。有助于复制和过去的一件事是在空单元格中具有唯一字符(-、*、+、“空白”等)。在复制和粘贴过程中帮助保持格式。
  • @BruceWayne 你完全走在了正确的轨道上。我想使用 OFFSET,但我一直在脑后听到 Scott Craner 的声音说不要使用 volatile 函数,所以我选择多次使用 NON-volatile INDEX。我认为偏移量虽然 8(

标签: excel userform data-extraction vba


【解决方案1】:

概念证明

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

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

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 返回与提供给它的信息相匹配的地址/范围。我通过硬编码数值或使用 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 存在有两个原因。由于范围是二维的,因此您似乎需要在此处指定一些值,否则尽管它被标记为可选,但您会收到错误消息。第二个原因是 0 告诉索引使用所有列或行,具体取决于它是否用于 INDEX 公式的列或行部分。第二个 0 告诉 index 寻找完全匹配。

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

INDEX():INDEX()

示例数据最终被评估为:

M2:O2

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

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

【讨论】:

  • 哇,好长啊!我想一旦我得到你的示例设置,我将能够完成它并将其应用到我的实际数据库中。我需要将“属性名称”放入哪个单元格?希望这能帮助我继续前进。
  • F2 有单词属性名称。第 2 行将在某个时候包含所有属性名称。
  • G10 应该有所需的属性名称,而 G 11 应该有所需的年份?
  • 你对G10和G11的解释是正确的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多