将数组转换为列出并复制同一行上的行 VBA

Convert Array to list and copy rows that are on the same row VBA

我正在努力复制具有 2 种不同格式的数组:一种是水平的,另一种是对角线的。我想获取列 c-F 并将其转换为列表格式,对于它在 c-f 中找到的每个数字,我希望它复制 a-b 中的相应值。它还会复制 c-f 中的每个 header 值,并放置在新的 sheet 旁边 transposes/copies 这些值。

请看下面的照片:

这就是我的

您可以看到日期是水平的,但在第 8-11 行中,它们变成了垂直的。

我想转换此数据以复制并粘贴每个单元格值以及 a-b 中的相应记录。请查看我正在尝试创建的内容:

请注意 sheet 2 中的新列 headers 在 sheet 1 中不存在。

所有帮助将不胜感激。我不确定如何开始。我相信这些是步骤:

  1. 设置a-f作为范围在sheet1
  2. 将 a-b 从 sheet 1 复制并粘贴到 sheet 2 的第 3 行
  3. 复制第 3 行 c-f 之间每一行中的每个单元格,并为每个值重复 a-b
  4. 移到下一行
  5. 删除 sheet 2 中第 4 列中没有值的所有空白行。

谢谢。

Power Query 可从 Microsoft add-in 免费获得 Excel 2010。 您需要做的就是:

  • 将光标放入table
  • 输入电源查询UI
    • 不确定 2010 年,但在 2016 年以后你会 select Data --> Get&Transform-->From Table/Range
    • 在 2010 年,您必须先下载并安装 add/in,然后按照 PQ
    • 的说明进行操作
  • 曾经在UI,只是
    • Select ColorFood
    • Select 到 Unpivot Other Columns
    • 重命名 Attribute 列 --> Date
    • 关闭并加载

M代码 由以上过程生成

let

//Change table name to reflect your reality
    Source = Excel.CurrentWorkbook(){[Name="Table18"]}[Content],
    
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Color", type text}, {"Food", type text}, {"1-Jan", Int64.Type}, {"1-Feb", Int64.Type}, {"1-Mar", Int64.Type}, {"1-Apr", Int64.Type}}),
    #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"Color", "Food"}, "Attribute", "Value"),
    #"Renamed Columns" = Table.RenameColumns(#"Unpivoted Other Columns",{{"Attribute", "Date"}})
in
    #"Renamed Columns"