如何根据一定的条件将列数据转化为列数据
我有一个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步:清理数据
-
将您的数据复制到新工作表。
-
有一些不必要的列。 删除它们:
- ID
- subject_paper_code
- subject_code
- SUBJECT_NAME
- subject_paper_name
- subject_paper_group
它们在摘要中没有任何用途,而且与具体logging有关则不太合适。 但是,如果你确实需要这些,你可以使用一个简单的VLOOKUP
来获得这些。
删除这些列之后,您将剩下四个。 假设这些包含在A:D
列中。
- 您将需要一个帮助器列来replace原始的
qpcode
列,以便问题代码是连续的,并且没有任何空白单元格。
为此,您可以在列A(包含qpcode
)的左侧插入一列,将此公式粘贴到A2
并向下拖动:
=IF(ISBLANK(B2),A1,B2)
这将使每个logging重复qpcodes。
- 复制该列并将其粘贴为值。 删除每个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数据透视表
-
创build一个数据透视表
-
将
qpcode
拖到行区域 -
将这些字段按此顺序依次拖到“列”区域
- subject_paper_short_code
- min_marks
- max_marks
-
在上一步中“列”区域中放置的所有三个字段中使用以下设置
- 点击字段; select“字段设置”
- 在
Subtotals & Filters
选项卡中selectNone
- 转到
Layout & Print
选项卡,然后选中Repeat item labels
选项
注意:仅在“列”区域中的前两个项目中需要应用上一步中的设置。 将它们应用到第三个( max_marks
)没有区别。
-
将它们拖到“值”区域(这些与您在上一步中的“列”区域中放置的相同):
- subject_paper_short_code
- min_marks
- max_marks
-
在“汇总值字段依据”设置中select“计数”选项。 这只是为了使清洁部分在最后更容易一些。
第3步:操纵结果
-
将数据透视表复制并粘贴到新工作表中,然后在“select性粘贴”选项中使用“作为值粘贴”
-
从数据透视表副本中复制“列”和“行”标签,并将其粘贴到下面。 这是一个截图,使其更清晰:
我已经加强了列标题。
- 将该公式粘贴到
B10
,并将其复制到整个范围(在这种情况下,B10:V12
):
=IF(NOT(ISBLANK(B5)),INDIRECT(ADDRESS(MOD(COLUMN()-1,3)+3*(MOD(COLUMN()-1,3)=0),COLUMN())))
保持这个范围select为下一个指示。
-
再次复制该范围,并将其粘贴为值(位于同一位置)。
-
在仍然select范围的情况下,按下Ctrl + H (replace对话框),然后将
FALSE
replace为空白。 -
按F5 ,然后select
Goto Special
。 然后,selectBlank
单元格选项,然后按Enter键 。 现在,只有范围内的空白单元格将被选中。 -
按下Ctrl + -并从popup的对话框中select
Shift cells left
。
第四步:清理
-
注意列标题前面的“计数”。 select该行并用空白replace
Count of
(包括尾随空格)。 -
用
qpcode
replaceRow 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 ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ╚════════╩══════════════════════════╩═══════════╩═══════════╩══════════════════════════╩═══════════╩═══════════╩══════════════════════════╩═══════════╩═══════════╩══════════════════════════╩═══════════╩═══════════╝