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

Create a new row for each cell containing a value

我有一个 table 类似于:

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 来实现吗?

使用详细描述的技术 here 得到如下所示的 Table:

删除 ColumnC 为 (Blanks)X 的位置。 Select ColumnB 和主页 > 编辑 - 查找并 Select、替换...、查找内容:Qty、全部替换。调整列标签并全部居中。然后你应该有一个 Table 像这样:

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

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

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

  • 单击顶部的数据选项卡。
  • Select "From Other Sources" 按钮。
  • Select "From Microsoft Query" 来自菜单。
  • 选择 "Excel Files" 数据源。
  • 找到并select您将工作簿保存为的数据文件。
  • 如果您收到未找到 table 的错误消息,请单击“确定”,然后 select "Options..." 按钮在底部,确保勾选 显示所有类型的 tables.
  • Select 您的数据所在的 table 或 sheet 并移动所有列 转到右侧框,然后单击下一步。
  • 在过滤器对话框中再次单击下一步。
  • 在排序对话框中再次单击下一步。
  • Select 在 Microsoft Query 中查看数据或编辑查询,然后单击“完成”。
  • 单击 Microsoft Query 中的视图菜单,然后 select "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')

  • 点击确定
  • Select 文件菜单,然后 "Return Data to Microsoft Excel"。
  • Select 数据的目标单元格,然后单击“确定”。