问题:本公司收到一个汇总待支付发票的数据集。对于每张未清发票,只有一行数据。每张发票都有不同数量的待支付项目,这些项目列在同一行中。每张项目在发票行中都有四列。因此,每张发票的列数可能会变得很难处理。
我们需要 * 上传此数据,每个项目占一行 *,目前需要会计人员将每个项目手动复制/粘贴到新行。
请求:请帮我找到一种方法来复制每个项目(四列),并粘贴到一个新的一行与发票列在第一位。
附件:“RAW”工作表是原始数据。
- 以灰色突出显示的A-D列是发票详细信息。
- 以橙子突出显示的列J-M为第一项,以蓝色突出显示的列N-Q为第二项,依此类推"RAW" Screenshot
“输出”工作表是预期结果(当前通过手动复制/粘贴完成)
"Output" Screenshot
Link to Google Doc for data
**尝试:**我是一个相当缺乏经验的Excel用户,但我尝试了一系列的if/then、转置、透视和偏移,都没有成功。
我认为这个问题需要一个VBA来检查每一行并确定
1.如果有非零的四栏项目。对于每个非零的四栏项目,它会将周期摘要(A-D栏)和非零项目(例如J-M栏)贴到新列。
1.如果有一个零值的四列项目,VBA将移动到下一行(发票)。
这是我最好的猜测,我还不知道如何编写VBA脚本。感谢您的帮助!!
2条答案
按热度按时间laximzn51#
是的,仅使用公式即可完成:
起始数据:
输出数据:
...
首先,我从3个辅助列开始:
A)#s(这可以代替ROW(),但我发现这更容易。1到1000,但请随意继续至少比您的最大预期数据集大5倍。
B)计算RAW工作表上“过帐状态”列右侧的非空单元格的数量
C)这就不那么清楚了。第一个单元格(C2)必须是数字1,然后后面的每个单元格,一直到第1000行,都有这个公式:
=IF(COUNTIF($C$1:C2,C2)=INDEX(B:B,MATCH(C2,A:A,0)),C2+1,C2)
接下来,我们从重复常规数据集开始:
=IF($C2<INDEX($A:$A,MATCH(0,$B:$B,0)),INDEX(RAW!A:A,$C2+1),"")
x1c4d 1x指令集
(this整个蓝色部分的公式完全相同:D2:K1000)
现在!真正有趣的部分:
在发票列中:
=IF($C3<INDEX($A:$A,MATCH(0,$B:$B,0)),OFFSET(RAW!$I$1,$C3,((COUNTIF($C$1:$C3,$C3)-1)*4),1,4),"")
确保所有的东西都填到了第1000行(或者你选择的任何一行),鲍勃就是你的阿姨!
注意:
zf2sa74q2#
转换数据(VBA)