excel间接函数来读取date并返回dynamic值

通过论坛看,无法find我所需要的。 我在B列中有100多张带有唯一表格名称和数据的工作表.B列将包含各种结束date。 有些工作表会有1或2个结束date,其他的则有30个结束date。 。 我想创build一个摘要页面,其中包含一个表格,该表格将自动更新,以显示在B列中有结束date的所有工作表名称,在未来30天内过期。 这是需要编码的东西吗? 或使用Excel的间接公式,也许是一个查找缠绕它?

 Private Sub ChkEndDates() Dim ws As Worksheet Dim cell As Range Dim rowCount as Long For Each ws in Worksheets If ws.Name <> '"summary page" Then rowCount = WorksheetFunction.CountA(ws.Range("B:B")) For i = 1 To rowCount If (ws.Cells(i, 2).Value - Date < 30) And (ws.Cells(i, 2).Value > Date) Then MsgBox ws.Name 'And maybe push into the summary page End If Next i End If Next ws End Sub 

这个问题不需要VLOOKUPINDIRECT

假设您的B列中的date是Excel的序列号格式,则此公式将计算Sheet2的B列中距当天date30天内的单元格数量:

 = SUMPRODUCT((Sheet2!B:B>=TODAY())+0,(Sheet2!B:B<=(TODAY()+30))+0) 

你可以复制这个公式,无论你需要多less张,例如

 = SUMPRODUCT((Sheet2!B:B...))+SUMPRODUCT((Sheet3!B:B...)) 

编辑

Per @ Jeeped的评论,build议将这个范围( B:B )缩小到数据的末尾。 (例如,如果最多有30行数据, B1:B30改为B1:B30

为了完整起见,如果您使用Excel 2013或更高版本,请使用PowerQuery / Get&Transform来完成此操作。

首先,将工作簿中的每个数据区域转换为Excel表格(也称为ListObjects),方法是使用function区中的插入>表格命令,或者使用键盘快捷键[Ctrl] + [T] 。 理想情况下,你会给他们一个名字,表明他们是什么。 (我已经使用前缀“Input_”,然后运行计数,因为后来这个“句柄”将帮助我忽略任何我不想在我的最终结果表,只要看看它的名称前缀为“input_“)。

然后从“数据”选项卡中select“新build查询”>“其他来源”>“空白查询:

在这里输入图像说明

一个叫做PowerQuery窗口的神秘的用户界面将会打开,没有太多的兴趣。 如果您在编辑栏中键入= Excel.CurrentWorkbook并按Enter键,那么工作簿中的各个表的列表将填充到该窗口中,如下所示。 如果您单击Content列右侧的双箭头图标,则会出现一个菜单,让您展开这些表以在每个列中包含实际列,并将它们带入PowerQuery窗口:

在这里输入图像说明

这里是数据转储的样子,当你按下OK时:

在这里输入图像说明

如果您已经有工作簿中的其他表已经不想在最终混搭中显示,那么只需要这一点。 在下面的屏幕截图中,我将结果集过滤为只包含带有Input_前缀的表:

在这里输入图像说明

在这里输入图像说明

然后,我将通过select相关列,然后从“ 变换”选项卡中select“ 数据types”>“date” ,将该DateTime列的数据types更改为简单date。

在这里输入图像说明

然后我要从右上angular的菜单中selectclosures和加载到

在这里输入图像说明

然后从结果对话框中select“仅创build连接”和“添加到数据模型”选项:

在这里输入图像说明

现在回到Excel中,创build数据透视表,并选中“使用此工作簿的数据模型”选项:

在这里输入图像说明

…这会带来一个稍微不同的数据透视表字段列表比你通常看到:

在这里输入图像说明

我现在将名称(表名)和结束date字段添加到我的数据透视表中,并将datefilter设置为在接下来的30天内显示date:

在这里输入图像说明

在这里输入图像说明

在这里输入图像说明

最后的结果是一个数据透视表,它显示了那些在未来30天内有结束date的表格:

在这里输入图像说明

这种方法的好处在于,如果以后添加了更多的带有更多input表的选项卡,那么在前缀“Input_”的前提下,它们将在下次刷新数据透视表时自动显示。 此外,而不是有一个报告,只是告诉你哪些选项卡适用于结束date,数据透视表还告诉你这些选项卡中的哪些单独的logging是涉及。

还有更多的东西,我没有显示的方式,如通过抛弃“内容”给列更友好的名字。 后缀,我可能会写一个简单的macros来自动重新过滤数据透视表从当前date30天。 但是,这至less会向您展示升级到Excel 2013的好处,并使用PowerPivot / Get和Transform来彻底自动执行此类任务。