【发布时间】:2019-01-24 17:56:04
【问题描述】:
我制作了我正在使用的 2 个电子表格的虚拟版本(假名和极短的)this spread sheets
背景:
我正在自动化合同和我们会计团队模板之间的数据。请注意,这些电子表格的格式都不能改变,所以我被卡住了。这是一个笨重的过程,我正在尝试自动化。数据的主要来源是“合同”选项卡。假设在 300 个分包商项目中,在 2019 年 1 月 24 日这一周,我的同事批准了 130 个项目。我想要完成的逻辑:
- 在“合同”选项卡中,如果 R 列是“是”--
- 在“会计模板”选项卡(带有公式的选项卡)B 列中,拉出我们要支付的供应商的 Contracts!A 的所有单元格。
- 同样适用于模板! (路径的昵称)M列,从Contracts!C中拉取已批准的Contract ID的具体合同ID。
请注意,我故意表明我的假小狗计划未获批准以获得他们的付款,这将有助于演示如何解决我的问题
我的关键问题是会计模板每 3 行跳过项目,而合同行每行都有项目日。因此,对于 Template!A5,我正在从 Contracts!A2 中提取数据,而 Template!A8 我正在从 Contracts!A3 中提取数据,等等。
我能够(在某种程度上)通过偏移量、行和索引匹配来完成这项工作:
=OFFSET(INDEX(Contracts!$C$2:$C$167,MATCH(ROWS(Contracts!$A$2:A17),Contracts!$AB$2:$AB$167,0)),-10,0)
看到那个否定的-10了吗?对于我从模板开始的每个新的第 3 行,我手动将其更改为 -10、-12、-14 等。并不完全复杂。
看看 offset 和 row 的工作原理,看起来它们在很大程度上依赖于 Contracts 工作簿中单元格的坐标。但是,理想情况下,我希望这样做:
=IF(Contracts!R2="Yes",OFFSET(INDEX(Contracts!$C$2:$C$167,MATCH(ROWS(Contracts!$A$2:A5),Contracts!$AB$2:$AB$167,0)),-2,0))
但是,一旦我在混合中加入条件 (IF),就会重新定向我的偏移匹配的行。对于我要完成的工作,是否有更好的公式?一个可以实现我的 IF、INDEX、MATCH、OFFSET、ROW 梦想的 VBA 脚本?我没有与这些公式中的任何一个结婚。 我仔细阅读了一些 VBA,但似乎没有像 IF 这样的条件作为组件。
编辑:
根据请求,添加屏幕截图。还有一个 Google Sheet 链接: 合同选项卡,故意隐藏不相关的列:
会计模板选项卡:
【问题讨论】:
-
你的帖子有点长。或许你可以看看minimal reproducible example。
-
@SJR,我取出了一些非必要的句子来缩短它。希望现在好多了。
-
对不起,我还是有点失落。也许发布一个显示一小部分数据样本的屏幕截图。
-
@SJR--Stack 不允许我上传图片,因为我是新手,但我提供了链接。另外,还有一个指向我在第一段中制作的虚拟电子表格的链接。 “理想模板”第三个选项卡只是用来显示“草稿”应该是什么样子的公式/VBA 让我无法理解。
标签: excel vba templates indexing offset