我为正在使用的this spread sheets的两个电子表格制作了一个虚拟版本(虚假名称和极短的缩写)
背景:
我正在自动执行合同和会计团队模板之间的数据。请注意,这些电子表格的格式都无法改变,所以我被困住了。我正在尝试自动化这是一个笨拙的过程。数据的主要来源是“合同”标签。假设在300个分包商项目中,在1/24/2019的一周中,我的同事批准了130个项目。我要完成的工作的逻辑:
请注意,我故意表明我的假Puppies程序未获得付款的批准,这将有助于演示如何解决我的问题
我的关键问题是,会计模板会为项目跳过每三行,而合同行的每一行都有项目日。因此,对于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
吗?对于每个新的第三行,我都从模板开始,我正在将其手动更改为-10,-12,-14等。并非完全复杂。
查看偏移量和行的工作方式,看起来它们似乎严重依赖于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),就会重新定位偏移量匹配的行。有什么更好的公式可以帮助我实现目标吗?一个VBA脚本可以实现我的IF,INDEX,MATCH,OFFSET,ROW梦想吗?我没有嫁给这两个公式。 我细读了一些VBA,但似乎没有像IF这样的条件组件。
编辑:
根据请求,添加屏幕截图。还有一个Google表格链接: 合同标签,故意隐藏不相关的列:
“会计模板”标签:
答案 0 :(得分:1)
我会用VBA做到这一点,但是这个公式示例可能会帮助您入门。如果您的问题基本上是将水平数据转换为垂直数据,并且有3行的固定间隔。您将需要根据实际设置调整公式。
使用的公式是:
F1以下=IF(MOD(ROW()-1,3)=0,INDEX($A$1:$A$3,(ROW()+2)/3),"")
G1以下=INDEX($B$1:$D$3,CEILING(ROW(),3)/3,1+MOD(ROWS($G$1:G1)-1,3))
我相信还有更好的方法...