如何根据一定的条件将列数据转化为列数据

我有一个excel,它有考试数据(理论,会话,实践等)行明智。 我必须把相同的基于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 | IA(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) | IA(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 | +-------+--------+--------------------+--------------+--------------+--------------------+--------------------------+---------------------+-----------+-----------+---------------------------+------------+------------+---------------------------+------------+------------+---------------------------+------------+------------+ 

使用VBA来做到这一点更简单。 但我想看看是否可以使用数据透视表来完成。 所以这是我遵循的四个步骤。

第1步:清理数据

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

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

    • ID
    • subject_paper_code
    • subject_code
    • SUBJECT_NAME
    • subject_paper_name
    • subject_paper_group

它们在摘要中没有任何用途,而且与具体logging有关则不太合适。 但是,如果你确实需要这些,你可以使用一个简单的VLOOKUP来获得这些。

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

  1. 您将需要一个帮助器列来replace原始的qpcode列,以便问题代码是连续的,并且没有任何空白单元格。

为此,您可以在列A(包含qpcode )的左侧插入一列,将此公式粘贴到A2并向下拖动:

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

这将使每个logging重复qpcodes。

  1. 复制该列并将其粘贴为值。 删除每个logging集只包含一个代码的原始qpcode列(B列)。

你的表应该是这样的:

 ╔════════╦══════════════════════════╦═══════════╦═══════════╗ ║ 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步:创build数据透视表

  1. 创build一个数据透视表

  2. qpcode拖到行区域

  3. 将这些字段按此顺序依次拖到“列”区域

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

    • 点击字段; select“字段设置”
    • Subtotals & Filters选项卡中selectNone
    • 转到Layout & Print选项卡,然后选中Repeat item labels选项

注意:仅在“列”区域中的前两个项目中需要应用上一步中的设置。 将它们应用到第三个( max_marks )没有区别。

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

    • subject_paper_short_code
    • min_marks
    • max_marks
  2. 在“汇总值字段依据”设置中select“计数”选项。 这只是为了使清洁部分在最后更容易一些。

第3步:操纵结果

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

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

数据透视表的副本

我已经加强了列标题。

  1. 将该公式粘贴到B10 ,并将其复制到整个范围(在这种情况下, B10:V12 ):
 =IF(NOT(ISBLANK(B5)),INDIRECT(ADDRESS(MOD(COLUMN()-1,3)+3*(MOD(COLUMN()-1,3)=0),COLUMN()))) 

保持这个范围select为下一个指示。

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

  2. 在仍然select范围的情况下,按下Ctrl + H (replace对话框),然后将FALSEreplace为空白。

  3. F5 ,然后selectGoto Special 。 然后,selectBlank单元格选项,然后按Enter键 。 现在,只有范围内的空白单元格将被选中。

  4. 按下Ctrl + -并从popup的对话框中selectShift cells left

第四步:清理

  • 注意列标题​​前面的“计数”。 select该行并用空白replaceCount of (包括尾随空格)。

  • qpcodereplaceRow Label

  • 最后还会有一些额外的专栏。 删除它们。

而已。 这应该留给你所需要的数据。

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

 ╔════════╦══════════════════════════╦═══════════╦═══════════╦══════════════════════════╦═══════════╦═══════════╦══════════════════════════╦═══════════╦═══════════╦══════════════════════════╦═══════════╦═══════════╗ ║ 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 ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ╚════════╩══════════════════════════╩═══════════╩═══════════╩══════════════════════════╩═══════════╩═══════════╩══════════════════════════╩═══════════╩═══════════╩══════════════════════════╩═══════════╩═══════════╝