Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 索引/匹配公式中的动态工作表名称_Excel_Excel Formula - Fatal编程技术网

Excel 索引/匹配公式中的动态工作表名称

Excel 索引/匹配公式中的动态工作表名称,excel,excel-formula,Excel,Excel Formula,背景 美国政府发布了我用于工作的每日报告。最近,政府改变了他们发布报告的方式。他们不再以文本文件的形式发布报告,而是以pdf的形式发布。不幸的是,这影响了我从报告中获取信息的方式。以前,我从网站中提取信息,因为它被保存为文本文件。现在,我下载pdf并将其转换为excel文件 我有一份工作簿,其中包含保存在各个工作表上的报告副本,例如4月30日、4月29日、4月28日等。不幸的是,由于转换,每页上的信息可能会有一行或两行变化,例如4月30日工作表上的信息可能在第30行,4月29日工作表上的信息可能

背景

美国政府发布了我用于工作的每日报告。最近,政府改变了他们发布报告的方式。他们不再以文本文件的形式发布报告,而是以pdf的形式发布。不幸的是,这影响了我从报告中获取信息的方式。以前,我从网站中提取信息,因为它被保存为文本文件。现在,我下载pdf并将其转换为excel文件

我有一份工作簿,其中包含保存在各个工作表上的报告副本,例如4月30日、4月29日、4月28日等。不幸的是,由于转换,每页上的信息可能会有一行或两行变化,例如4月30日工作表上的信息可能在第30行,4月29日工作表上的信息可能在第33行

在工作簿的第一页,我有一个摘要页面,它从上一页提取关键信息,例如摘要将从4月30日的工作表中提取信息

问题

现在的问题来自我如何从excel文件中提取信息。由于信息不在同一行,我认为这种方法最好。我的公式如下。参考名称Information_A位于A列中,我需要从Information_A获得的值位于P列中

=(索引('April 30'!p:p,MATCH('Information_A','April 30'!A:A,0))

由于我的工作表不断变化,我想我可以提取工作表的最后一个名称,然后像这样将其输入公式中

=(索引(“[上一页]”p:p,匹配(“信息”、“[上一页]”!A:A,0))

因此,我试图找出如何提取上一张图纸的名称。我尝试了几种不同的方法,最终使用了ChrisB的解决方案

我已将他提供的公式(如下)保存为上表2

=IF(MATCH(wsName,wsNamesArray,0)-1=0,ERROR.TYPE(7),INDEX(wsNamesArray,MATCH(wsName,wsNamesArray,0)+1))

其中,WSNameArray和WSNameArray如下所示

wsNamesArray:
=RIGHT(GET.WORKBOOK(1)、LEN(GET.WORKBOOK(1))-FIND(“])、GET.WORKBOOK(1))&T(NOW())

wsName:
=MID(单元格(“文件名”),间接(“A1”)、查找(“]”)、单元格(“文件名”,间接(“A1”))+1255)和T(现在())

最终得出了

=(索引(“”&PrevSheet_2&“!p:p”,匹配(信息“&PrevSheet_2&”!A:A”,0))

这个公式给了我一个#值!错误

我在没有使用PrevSheet_2的情况下测试了公式,并输入了工作表名称(例如4月30日),得到了正确的值,因此我知道该部分正在工作。我还在单元格中测试PrevSheet_2,也得到了正确的前一张表,因此我知道问题在于2的组合

那么,我的问题是如何做到这一点

=(索引(“”&PrevSheet_2&“!p:p”,匹配(信息“&PrevSheet_2&”!A:A”,0))

公式工作

我感觉PrevSheet_2的数据类型不正确,但我不知道如何修复它

编辑:

我也尝试过使用间接法(见下文),得到了一个#REF!错误

=索引(间接(“”“&PrevSheet_2&“!p:p”),匹配(“信息”,间接(“”“&PrevSheet_2&“!A:A”),0))
参考。。将SheetNames数组(在公式>定义名称中)定义为
SheetNames=MID(GET.WORKBOOK(1),FIND(“]),GET.WORKBOOK(1),1)+1,LEN(GET.WORKBOOK(1))
。。然后,在excel公式中,您可以以
索引(SheetNames,sheet()-1)

您还可以定义
PreviousSheetName=INDEX(MID(GET.WORKBOOK(1)、FIND(“])、GET.WORKBOOK(1)、1)+1、LEN(GET.WORKBOOK(1))、SHEET()-1)

您可以按照@BigBen的建议将其放入间接函数中

因此,公式将是
=索引(间接(“'”和PreviousSheetName&“!p:p”),匹配(“信息A”,间接(“'”和PreviousSheetName&“!A:A”),0))

看<代码>工作表函数为我们提供当前工作表的索引。因此,
Sheet()-1
为我们提供了上一页的索引


在我的回答之后,我注意到你已经在间接公式中加了两次单引号。因此,#REF错误

使用
INDIRECT
…我也尝试了
=索引(INDIRECT(“”“&PrevSheet_2&“!p:p”),匹配(“Information_A”,INDIRECT(“”“&PrevSheet_2&“!A:A”),0))
,得到了一个#REF!非常感谢你的帮助!我根据你的建议调整了我的配方,效果很好!我一定看了很久了,错过了!我一定会查看您提供的资源!再次感谢!:)