【问题标题】:Change Data layout in Excel在 Excel 中更改数据布局
【发布时间】:2023-01-24 15:30:53
【问题描述】:

我有从供应商处获取的 Excel 数据。
我想改变布局的格式,这样我就可以更容易地将这些数据提取到数据库中,例如(Postgre / Mysql)

这种格式有数千个文件,因为一个文件只包含一个日期的销售信息。

是否有更好或更快的方法来转换这些数据,或者创建 VBA 是唯一的方法?

【问题讨论】:

  • 您可以尝试通过 power query 取消数据透视 - 不确定是否有效

标签: excel vba


【解决方案1】:

我们绝对可以在 VBA 中做到这一点! 另一方面,既然可以使用 excel 公式轻松完成,为什么还要费心呢?

我的假设:

  • 您正在处理可变大小的数据(区域和项目的数量)
  • 显示为合并的单元格在实际数据上合并。
  • 我将其设置为使用第 100 行的最大数据范围,但更改它很容易。

第1步)确定我们有多少区域和项目:

  • =COUNTA($D$4:$K$4)(地区)

  • =COUNTA($C$6:$C$100)(物品)

第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),"")

最终产品:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    • 2019-01-24
    • 2017-08-28
    • 2023-03-21
    • 1970-01-01
    • 2021-05-30
    • 2023-03-24
    相关资源
    最近更新 更多