公式中的列引用

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

– 我已经使用匹配functionfind相应的列号。
恩。 “XYZ”与Column 3相匹配,相当于C1:Cxxxxxx

– 现在将C1:Cxxxxxxinput到一个公式中以获取特定列的数据,我希望能够直接引用Column 3部分,因为我打算将来使用此工作簿,并且需要运行列下次我使用它时,计算可能是也可能不是第3列。
– 有什么办法告诉excel使用公式来告诉excel哪个列用于方程?

所以稍微详细一点,我有这个等式

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

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

编辑:更多的额外信息; “我基本上运行相当于一个SQL语句,其中foo和bar是真实的,我想要excel吐出所有baz值的连接列表,其中foo和bar是真实的。理想情况下,我希望它只返回baz值那么我会把它们分别连接在一起,现在我得到它的方式,expression式将单独testing每一行,看看是否是真的;如果有18K行,将会有18K个单独的testing..它的工作,但它不太干净了,目标是尽可能地实现自动化* 我不想在每次添加新的数据排列时都进入并更改列引用 * y“

谢谢

您可以使用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)

您可以使用ADDRESS来生成文本,然后您需要使用INDIRECT因为您正在向string传递一个string而不是范围

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

显然,用您用来获取列号的MATCH函数replaceADDRESS公式中的3s和2s。 以上假定$ B $ 1:$ B $ 25000的列也是使用MATCH来find的,否则只是:

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

请注意几件事情:

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

编辑

鉴于额外的信息也许使用先进的filter会让你接近你想要的。 好教程在这里 。 根据教程进行设置以熟悉它,然后当您放入新数据集时,可以使用一些基本代码自动进行设置:

粘贴到数据集中,然后使用VBA获取数据集使用的范围,然后应用如下的filter:

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

您也可以将结果复制到新表中,但必须与原始数据位于同一张表中。 我的build议是将数据粘贴到左侧的隐藏列中,并在可见列的行1:5中放置标准空间,然后使用一个button来获取数据的使用范围,应用filter并复制下面的数据标准:

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

button将需要清除目标单元格等,确保你有足够的隐藏列等,但这一切都有可能。 希望这可以帮助。