为包含值的每个单元格创建一个新行

时间:2015-10-09 16:26:34

标签: sql excel excel-vba excel-formula unpivot vba

我有一张类似的表:

ID | Item 1 | Item 2 | Item 3 | Qty 1 | Qty 2 | Qty 3
1  |        |    X   |    X   |       |   3   |   4 
2  |    X   |        |    X   |   2   |       |   1
3  |        |        |    X   |       |       |   9

我需要找到一种方法为每个ID为每个项目创建一个新行:

ID | Item | Qty
1  |   2  |  3
1  |   3  |  4
2  |   1  |  2

有没有办法通过公式,原生Excel工具或VBA来实现这一目标?

2 个答案:

答案 0 :(得分:2)

使用详细描述here中描述的技术来获得如下所示的表:

SO33043100 first example

删除ColumnC为(Blanks)X的位置。选择ColumnB和HOME>编辑 - 查找&选择,替换...,查找内容:Qty,全部替换。调整列标签并居中。那么你应该有一个像这样的表:

SO33043100 second example

您可以选择通过右键单击其中一个单元格,表格,转换为范围来转换为Rage。

答案 1 :(得分:1)

您可以使用Microsoft Query指向数据表。选择您的数据,然后在顶部的公式栏左侧的框中键入名称,为其命名范围。

将工作簿保存到某个目录。然后选择它作为数据源:

  • 点击顶部的数据标签。
  • 选择"来自其他来源"按钮。
  • 选择"来自Microsoft Query"从菜单中。
  • 选择" Excel文件"数据来源。
  • 查找并选择保存工作簿的数据文件。
  • 如果您收到没有找到表的错误,请单击“确定”,然后单击“确定” 选择"选项..."底部的按钮,一定要检查 显示所有类型的表格。
  • 选择数据所在的表格或工作表,然后移动所有列 在右侧框中,然后单击“下一步”。
  • 在过滤器对话框中再次单击下一步。
  • 在排序对话框中再次单击下一步。
  • 在Microsoft Query中选择查看数据或编辑查询,然后单击完成。
  • 单击Microsoft Query中的视图菜单,然后选择" SQL ..."
  • 输入此SQL语句(并更改要匹配的目录路径) 你保存文件的地方:


    SELECT `Sheet1$`.ID, 
    `Sheet1$`.Qty1
    FROM `C:\Users\MyName\Desktop\data.xlsx`.`Sheet1$` `Sheet1$`
    WHERE (`Sheet1$`.Item1='x')
    union
    SELECT `Sheet1$`.ID, 
    `Sheet1$`.Qty2
    FROM `C:\Users\MyName\Desktop\data.xlsx`.`Sheet1$` `Sheet1$`
    WHERE (`Sheet1$`.Item2='x')
    union
    SELECT `Sheet1$`.ID, 
    `Sheet1$`.Qty3
    FROM `C:\Users\MyName\Desktop\data.xlsx`.`Sheet1$` `Sheet1$`
    WHERE (`Sheet1$`.Item3='x')

  • 点击确定
  • 选择文件菜单,然后选择"将数据返回到Microsoft Excel"。
  • 选择数据的目标单元格,然后单击“确定”。