【发布时间】:2023-01-24 15:30:53
【问题描述】:
我有从供应商处获取的 Excel 数据。
我想改变布局的格式,这样我就可以更容易地将这些数据提取到数据库中,例如(Postgre / Mysql)
这种格式有数千个文件,因为一个文件只包含一个日期的销售信息。
是否有更好或更快的方法来转换这些数据,或者创建 VBA 是唯一的方法?
【问题讨论】:
-
您可以尝试通过 power query 取消数据透视 - 不确定是否有效
我有从供应商处获取的 Excel 数据。
我想改变布局的格式,这样我就可以更容易地将这些数据提取到数据库中,例如(Postgre / Mysql)
这种格式有数千个文件,因为一个文件只包含一个日期的销售信息。
是否有更好或更快的方法来转换这些数据,或者创建 VBA 是唯一的方法?
【问题讨论】:
我们绝对可以在 VBA 中做到这一点! 另一方面,既然可以使用 excel 公式轻松完成,为什么还要费心呢?
我的假设:
第1步)确定我们有多少区域和项目:
第2步)列出项目,重复区域数。
使用本地行号而不是工作表行号以使其更便于携带。
为了让它重复,我们将把行号除以总区域,汇总,然后使用它来索引项目。不要忘记错误处理以确定何时停止列出项目。从现在开始,我们所有其他的公式都会有一个 If( *item column* <> "", *show stuff* , *don't show stuff* ) 。我们可以在以后的步骤中掩盖这一点。
=IFERROR(INDEX($C$6:$C$100,MATCH(ROUNDUP(M5/$P$1,0),$B$6:$B$100,0)),"")
步骤 3)约会超级简单:
=IF($O5<>"",$C$2,"")
第四步)我们将使用 Mod() 函数来创建我们区域的循环动作。
=IF($O5<>"",INDEX($D$4:$K$4,2*(MOD($M5-1,$P$1)+1)-1),"")
步骤 5)“数量”和“价格”是同一个公式,只是“价格”多了一个“+1”
=IFERROR(INDEX($D$6:$K$100,MATCH($O5,$C$6:$C$100,0),MATCH($P5,$D$4:$K$4,0)),"")
=IFERROR(INDEX($D$6:$K$100,MATCH($O5,$C$6:$C$100,0),MATCH($P5,$D$4:$K$4,0)+1),"")
最终产品:
【讨论】: