Excel VLOOKUP的动态范围和标准

Excel VLOOKUP的动态范围和标准,excel,Excel,我正在尝试创建一个VLOOKUP,它可以利用列编号作为标准和范围起始位置,同时从列计数中获取索引编号 我有一个电子表格,我将数据集导入其中进行分析。我在顶部添加了几行,并使用其中一行将特定列标记为包含固定值-如中所示,这些值来自预定义的选择,如订单状态将具有固定值,即创建、提交、完成、支付等 当我将每个列标记为固定时,上面的行将递增地为每个列指定一个数值。如果我有16个固定值,就会有从1增加到16的列 在分析表中,我有16列用于执行一些分析。它对数据集中的每一行所做的第一件事是为数据集列中的每一

我正在尝试创建一个VLOOKUP,它可以利用列编号作为标准和范围起始位置,同时从列计数中获取索引编号

我有一个电子表格,我将数据集导入其中进行分析。我在顶部添加了几行,并使用其中一行将特定列标记为包含固定值-如中所示,这些值来自预定义的选择,如订单状态将具有固定值,即创建、提交、完成、支付等

当我将每个列标记为固定时,上面的行将递增地为每个列指定一个数值。如果我有16个固定值,就会有从1增加到16的列

在分析表中,我有16列用于执行一些分析。它对数据集中的每一行所做的第一件事是为数据集列中的每一个唯一值分配一个唯一标识符,或者,如果该值以前存在于它前面的行中,则查找上次分配给它的编号。然后,我可以根据这些唯一的数字查找不同的值,并将它们的计数关联起来,以显示这些值在数据集中存在的频率

我已经创建了这个分析表,它已经知道了列的位置。示例如下所示:

=IF(B5="",0,IF(COUNTIF(B$3:B4,B5)>0,VLOOKUP(B5,B:AB,27,FALSE),MAX(AB$3:AB4)+1))
我的问题是如何使公式的标准和起始位置动态化,这样我就可以更改我归类为固定的列,而无需调整分析公式

因此,对于上面的示例,B列是一个固定值列。我已经有了以下公式:

formula=MATCH(AB2,$A2:$Z2,0)
这告诉我第2列(也称为B)是第一个固定值

如果我使用我所知道的动态复制公式,它将是:

=IF(COUNTIF($column(formula)+row (=3): column(formula)+ current_row(5)-1
           , column(formula)+ current_row(5)>0
               , VLOOKUP (column(formula)+current_row(5), column(formula):AB
               , COLUMNS(column(formula):AB)
               , false)
           , MAX(AB$3:AB4)+1))
然而,我这样做公式是行不通的——我不知道如何在公式中显式设置行号。我希望我已经提供了足够的信息来解释我想做什么,提前谢谢

这是一张它看起来像什么的图片——出于敏感的原因,我不得不模糊某些信息。谢谢

您可以使用间接函数将生成的字符串转换为范围引用

=COUNTIF(间接(*公式生成范围字符串*),间接(*公式生成单元格字符串*)

但是,INDIRECT是一个易失性函数,每次对工作簿进行任何更改时都会重新计算。如果你有一整列它们,你的工作簿可能会慢很多,特别是如果把它们与精确查找结合起来的话

另一种选择是使用选择功能,如果您从已知的固定可能范围中进行选择,则可以使用该功能:

选择(*rangenumber*,*range1*,*range2*,*range3*,…)

Choose非常好,因为它不是一个易失性函数

如果范围的数量或大小不固定,则可以使用偏移功能:

OFFSET(*起点*,*行偏移*,*列偏移*,*行数*,*列数*)

这使您可以从定位点开始,然后计算到所需范围的距离以及所需范围的大小


偏移量也是易变的,但是您可以将其保存为定义的名称,然后在公式列中重新使用该定义的名称,要求在所有公式中使用它之前只计算一次,而不必在每个公式中计算。

仍然不起作用,下面是我最新的尝试
=IF(column(AQ$1)&ROW(5)=“”,0,IF(COUNTIF(COLUMN(AQ$1)和“$3:”&COLUMN(AQ$1)和“4”,“COLUMN(AQ$1)”和“5”&>0,VLOOKUP(COLUMN(AQ$1)和“:AQ,”&COLUMN(COLUMN(AQ$1),AQ),FALSE),MAX(AQ$3:AQ4)+1))
ooh,我知道我可能需要
=替换(地址(1,AQ1,4),“1”
在那里,因为它给了我一个字母,我可以用它作为公式中的插入文本。仍然在处理它。我如何让它读取结果,就像我在公式中键入它一样?这个
=countIF(替换(地址(1,AQ1,4),“1”,“1”)&“&替换(地址(1,AQ1,4),“1”,“1”),替换(地址(1,AQ1,4),“1”,“1”)&AA10)
不是解析为“COUNTIF”(Z:Z,Z10)-它只是一个破公式谢谢,终于成功地让间接版本工作了,哇,这是一项多么艰巨的任务。我需要一些时间来使用CHOOSE或OFFSET来恢复我的头脑。这就是它现在看起来的样子
=IF(INDIRECT(AQ1&AA5)=“”,0,IF(COUNTIF)(INDIRECT(AQ$1&“$3:&AQ$1&$AA5-1),INDIRECT(AQ$1和$AA5))>0,VLOOKUP(间接(AQ$1和$AA5),间接(AQ$1和“:”)和替换(地址(1,列(AQ$1)*1,4),“1”,列(间接(AQ$1和“:”)和替换(地址(1,列(AQ$1)*1,4),“1”,假),最大(AQ$3:AQ4)+1)