如何根据特定条件将行方式数据转换为列方式

时间:2017-10-31 08:47:22

标签: excel excel-formula pivot-table excel-2007

我有一个excel,其中包含考试数据(Theory,Sessional,Practical等)。我必须将相同的基于QPCODE的数据放在一行中 我的数据是 -

 +-------+--------+--------------------+--------------+---------------------------+--------------------+--------------------------+---------------------+-----------+-----------+
    |  id   | qpcode | subject_paper_code | subject_code |       subject_name        | subject_paper_name | subject_paper_short_code | subject_paper_group | min_marks | max_marks |
    +-------+--------+--------------------+--------------+---------------------------+--------------------+--------------------------+---------------------+-----------+-----------+
    | 37790 |  10032 |                  0 | A47          | GEOGRAPHY                 | THEORY             | GEOG1                    | A                   |        21 |        60 |
    | 37791 |        |                  1 | A47          | GEOGRAPHY                 | I.A.(THEORY)       | GE1IA                    | A                   |         0 |        10 |
    | 37792 |        |                  2 | A47          | GEOGRAPHY                 | PRACTICAL          | GE1PR                    | B                   |         9 |        20 |
    | 37793 |        |                  3 | A47          | GEOGRAPHY                 | RECORD             | GE1RC                    | B                   |         0 |        10 |
    | 37794 |  10033 |                  0 | A50          | HINDI (OPT)               | THEORY             | HINO1                    | A                   |        40 |        80 |
    | 37795 |        |                  1 | A50          | HINDI (OPT)               | I.A.(THEORY)       | HI1IA                    | A                   |         0 |        20 |
    | 37796 |  10034 |                  0 | A51          | HISTORY(PRIOR TO 2008-09) | THEORY             | HIST1                    | A                   |        40 |        80 |
    +-------+--------+--------------------+--------------+---------------------------+--------------------+--------------------------+---------------------+-----------+-----------+

我必须将相同的qpcode数据放在单行中,以便我可以在所有qpcodes的单行中获得相同的qpcode数据。

+-------+--------+--------------------+--------------+--------------+--------------------+--------------------------+---------------------+-----------+-----------+---------------------------+------------+------------+---------------------------+------------+------------+---------------------------+------------+------------+
|  id   | qpcode | subject_paper_code | subject_code | subject_name | subject_paper_name | subject_paper_short_code | subject_paper_group | min_marks | max_marks | subject_paper_short_code2 | min_marks2 | max_marks2 | subject_paper_short_code3 | min_marks3 | max_marks3 | subject_paper_short_code4 | min_marks4 | max_marks4 |
+-------+--------+--------------------+--------------+--------------+--------------------+--------------------------+---------------------+-----------+-----------+---------------------------+------------+------------+---------------------------+------------+------------+---------------------------+------------+------------+
| 37790 |  10032 |                  0 | A47          | GEOGRAPHY    | THEORY             | GEOG1                    | A                   |        21 |        60 | GE1IA                     |          0 |         10 | GE1PR                     |          9 |         20 | GE1RC                     |          0 |         10 |
+-------+--------+--------------------+--------------+--------------+--------------------+--------------------------+---------------------+-----------+-----------+---------------------------+------------+------------+---------------------------+------------+------------+---------------------------+------------+------------+

1 个答案:

答案 0 :(得分:0)

使用VBA执行此操作更简单。但我想知道是否可以使用数据透视表完成。所以这是我遵循的四个步骤。

第1步:清理数据

  1. 将您的数据复制到新工作表。

  2. 有一些不必要的列。删除它们:

    • ID
    • subject_paper_code
    • subject_code
    • SUBJECT_NAME
    • subject_paper_name
    • subject_paper_group
  3. 它们在摘要中不起任何作用,并且因为它们与特定记录有关而相当不合适。但是,如果您确实需要这些,那么您可以使用简单的VLOOKUP来获取这些内容。

    删除这些列后,您将剩下四个。假设这些包含在A:D列中。

    1. 您需要一个帮助列,它将替换原始的qpcode列,以便问题纸代码是连续的,并且它们之间没有任何空白单元格。
    2. 为此,您可以在A列的左侧插入一列(包含qpcode),将此公式粘贴到A2并向下拖动:

      =IF(ISBLANK(B2),A1,B2)
      

      这将使每个记录重复qpcodes。

      1. 复制该列并将其粘贴为值。删除原始qpcode列(B列),其中只包含每组记录的一个代码。
      2. 您的表格应如下所示:

        ╔════════╦══════════════════════════╦═══════════╦═══════════╗
        ║ qpcode ║ subject_paper_short_code ║ min_marks ║ max_marks ║
        ╠════════╬══════════════════════════╬═══════════╬═══════════╣
        ║  10032 ║ GEOG1                    ║        21 ║        60 ║
        ║  10032 ║ GE1IA                    ║         0 ║        10 ║
        ║  10032 ║ GE1PR                    ║         9 ║        20 ║
        ║  10032 ║ GE1RC                    ║         0 ║        10 ║
        ║  10033 ║ HINO1                    ║        40 ║        80 ║
        ║  10033 ║ HI1IA                    ║         0 ║        20 ║
        ║  10034 ║ HIST1                    ║        40 ║        80 ║
        ╚════════╩══════════════════════════╩═══════════╩═══════════╝
        

        第2步:创建数据透视表

        1. 创建数据透视表

        2. qpcode拖到行区域

        3. 将这些字段按此顺序逐个拖动到“列”区域

          • subject_paper_short_code
          • min_marks
          • max_marks
        4. 在您在上一步的“列”区域中放置的所有三个字段中使用以下设置

          • 点击该字段;选择“字段设置”
          • None标签
          • 中选择Subtotals & Filters
          • 转到Layout & Print标签,然后查看Repeat item labels选项
        5. 注意:仅对“列”区域中的前两个项目应用上一步中的设置。将它们应用到第三个(max_marks)没有任何区别。

          1. 将这些拖动到“值”区域(这些与您在上一步中的“列”区域中放置的相同):

            • subject_paper_short_code
            • min_marks
            • max_marks
          2. 在“Summarize value field field”设置中选择“Count”选项。这只需要在最后使清洁部件更容易。

          3. 第3步:操纵结果

            1. 复制数据透视表并在新工作表中,使用“选择性粘贴”选项中的“粘贴为值”选项将其粘贴

            2. 从数据透视表的副本中复制“列”和“行”标签,然后将其粘贴到下面。这是一个更清晰的屏幕截图:

            3. Copy of PivotTable

              我对列标题进行了加粗。

              1. 将此公式粘贴到B10中,并将其复制到整个范围(在本例中为B10:V12):
              2. =IF(NOT(ISBLANK(B5)),INDIRECT(ADDRESS(MOD(COLUMN()-1,3)+3*(MOD(COLUMN()-1,3)=0),COLUMN())))
                

                保留此范围以供下一步说明使用。

                1. 再次复制此范围,并将其粘贴为值(位于相同位置)。

                2. 在仍然选择范围的情况下,按 Ctrl + H (替换对话框),并用空格替换FALSE

                  < / LI>
                3. F5 ,然后选择Goto Special。然后,选择Blank单元格选项,然后按 Enter 。现在,只会选择范围内的空白单元格。

                4. Ctrl + - ,然后在弹出的对话框中选择Shift cells left

                5. 第4步:清理

                  • 请注意列标题​​前面的'Count of'。选择行并将Count of(包括尾随空格)替换为空白。

                  • Row Label替换为qpcode

                  • 最后还会留下一些额外的列。也可以删除它们。

                  就是这样。这应该可以为您提供所需的数据。

                  以下是您提供的数据的输出:

                  ╔════════╦══════════════════════════╦═══════════╦═══════════╦══════════════════════════╦═══════════╦═══════════╦══════════════════════════╦═══════════╦═══════════╦══════════════════════════╦═══════════╦═══════════╗
                  ║ qpcode ║ subject_paper_short_code ║ min_marks ║ max_marks ║ subject_paper_short_code ║ min_marks ║ max_marks ║ subject_paper_short_code ║ min_marks ║ max_marks ║ subject_paper_short_code ║ min_marks ║ max_marks ║
                  ╠════════╬══════════════════════════╬═══════════╬═══════════╬══════════════════════════╬═══════════╬═══════════╬══════════════════════════╬═══════════╬═══════════╬══════════════════════════╬═══════════╬═══════════╣
                  ║  10032 ║ GE1IA                    ║         0 ║        10 ║ GE1PR                    ║         9 ║        20 ║ GE1RC                    ║         0 ║        10 ║ GEOG1                    ║        21 ║        60 ║
                  ║  10033 ║ HI1IA                    ║         0 ║        20 ║ HINO1                    ║        40 ║        80 ║                          ║           ║           ║                          ║           ║           ║
                  ║  10034 ║ HIST1                    ║        40 ║        80 ║                          ║           ║           ║                          ║           ║           ║                          ║           ║           ║
                  ╚════════╩══════════════════════════╩═══════════╩═══════════╩══════════════════════════╩═══════════╩═══════════╩══════════════════════════╩═══════════╩═══════════╩══════════════════════════╩═══════════╩═══════════╝