1

我现在有点卡住了。我正在处理一组数据,需要找到一种将列号输入公式的方法。

- 我使用了 match 函数来找到一个值对应的列号。
前任。"XYZ" 与 匹配Column 3,相当于C1:Cxxxxxx

-现在为了将 输入C1:Cxxxxxx到公式中以获取该特定列的数据,我希望能够直接引用该Column 3部分,因为我计划将来使用此工作簿,并且运行计算所需的列可能会也可能不会下次我使用它时成为第 3 列。
- 有没有办法告诉excel使用公式来告诉excel哪一列用于方程?

所以更详细一点,我有等式

=AND(Sheet3!$C$1:$C$250000=$A$4,Sheet3!$B$1:$B$250000=$B$4)

有没有办法使用公式告诉它使用 C,而不是指定使用 C 列?

编辑:更多附加信息;“我基本上运行相当于 foo 和 bar 为真的 SQL where 语句,我希望 excel 吐出 foo 和 bar 为真的所有 baz 值的串联列表。理想情况下,我希望它只返回 baz 值是真的,那么我将它们分别连接在一起。按照我现在得到的方式,表达式将分别测试每一行以查看是否为真;如果有 18K 行,则将有 18K 单独测试.. 有效,但不是太干净了。目标是尽可能地自动化。*我不想每次添加新数据时都必须进入并更改列引用*y"

谢谢

4

2 回答 2

1

您可以ADDRESS用来生成文本,然后您需要在INDIRECT将字符串而不是范围传递给公式时使用

=AND(INDIRECT(ADDRESS(1,3,,,"Sheet3") & ":" & ADDRESS(250000,3))=$A$4 ,INDIRECT(ADDRESS(1,2,,,"Sheet3") & ":" & ADDRESS(250000,2))=$B$4)

显然,用您用来获取列号的函数替换ADDRESS公式中的 3s 和 2s 。MATCH上面假设 $B$1:$B$25000 的列也是使用 `MATCH' 找到的,否则它只是:

=AND(INDIRECT(ADDRESS(1,3,,,"Sheet3") & ":" & ADDRESS(250000,3))=$A$4 ,Sheet3!$B$1:$B$25000=$B$4)

注意几件事:

  1. 您只需要在第一部分使用“Sheet3”INDRECT
  2. 公式中的条件 3 和 4ADDRESS保留为默认值,这意味着它们返回绝对 ($C$1) 引用并且是 A1 样式而不是 R1C1

编辑

鉴于附加信息,使用高级过滤器可能会让您接近您想要的。很好的教程在这里。根据教程设置它以熟悉它,然后您可以使用一些基本代码在您放入新数据集时自动设置它:

粘贴到数据集中,然后使用 VBA 获取数据集使用的范围,然后使用以下内容应用过滤器:

Range("A6:F480").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _ Sheets("Sheet1").Range("A1:B3"), Unique:=False

您也可以将结果复制到一个新表中,尽管这必须与原始数据在同一张表中。我的建议是将您的数据粘贴到左侧的隐藏列中,并在可见列的 1:5 行中为您的条件放置空间,然后有一个按钮可以获取数据的使用范围,应用过滤器并复制下面的数据标准:

Range("A6:F480").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Sheets _ Range("H1:M3"), CopyToRange:=Range("H6"), Unique:=False

按钮需要首先清除目标单元格等,确保您有足够的隐藏列等,但这一切都是可能的。希望这可以帮助。

于 2013-11-14T00:58:31.197 回答
1

您可以使用INDEX,例如,如果您有从 A 到 Z 的 26 个可能的列,那么此公式将为您提供 C 列范围(您可以在另一个公式中使用)

=INDEX(Sheet3!$A$1:$Z$250000,0,3)

0 表示要整列,3 表示要哪一列。如果你想 3 可以由另一个公式(如MATCH函数)生成

注意:小心 AND in

=AND(Sheet3!$C$1:$C$250000=$A$4,Sheet3!$B$1:$B$250000=$B$4)

AND只返回一个结果而不是数组,如果你想要一个数组,你可能需要像这样使用 *

=(Sheet3!$C$1:$C$250000=$A$4)*(Sheet3!$B$1:$B$250000=$B$4)

于 2013-11-14T00:35:01.983 回答