姓名 班级 数学 语文
张三 2 95 97
李四 2 66 77
王五 1 99 95
转换后变成
姓名 班级 课程 分数
张三 2 数学 95
张三 2 语文 97
李四 2 数学 66
李四 2 语文 77
王五 1 数学 99
王五 1 语文 95
备注:
姓名很多,不固定
课程很多,不固定。
多谢
------解决方案--------------------------------------------------------
Sheets(1)为原数据表格
Sheets(2)为转换出的新表格
Sub Score()
Dim TotalRow As Long, TotalCol As Integer
Dim CurRow1 As Long, CurRow2 As Long, CurCol1 As Integer
Dim S1 As Worksheet, S2 As Worksheet
TotalRow = [A65536].End(xlUp).Row
TotalCol = [IV1].End(xlToLeft).Column
Set S1 = Sheets(1)
Set S2 = Sheets(2)
S2.Cells(1, 1) = "姓名"
S2.Cells(1, 2) = "班级"
S2.Cells(1, 3) = "课程"
S2.Cells(1, 4) = "分数"
CurRow2 = 2
For CurRow1 = 2 To TotalRow
For CurCol1 = 3 To TotalCol
S2.Cells(CurRow2, 1) = S1.Cells(CurRow1, 1)
S2.Cells(CurRow2, 2) = S1.Cells(CurRow1, 2)
S2.Cells(CurRow2, 3) = S1.Cells(1, CurCol1)
S2.Cells(CurRow2, 4) = S1.Cells(CurRow1, CurCol1)
CurRow2 = CurRow2 + 1
Next CurCol1
Next CurRow1
End Sub
------解决方案--------------------------------------------------------
第一步:添加一个辅助列(“姓名及班级”列),用公式=A2&" "&B2,把“姓名”、“ 班级”两列合并。(“姓名”和“ 班级”的内容之间加一个空格,是为了第三步 “分列”,容易将它们还原)
第二步:利用数据透视表,把二维表转换为一维列表,即:
1、“数据”-“数据透视表”-“多重合并计算数据区域”-“下一步”
2、选定区域:将二维表选中,包括第一行的数据名,第一列是“姓名及班级”列,-“下一步”,形成数据透视表
3、选中数据透视表最右下角的单元格,双击即可得到:
行 列 值
李四 2 数学 66
李四 2 语文 77
王五 1 数学 99
王五 1 语文 95
张三 2 数学 95
张三 2 语文 97
第三步:把“姓名及班级”分列,单击菜单“数据”-“分列”即可
------解决方案--------------------------------------------------------
数据透视表试试
------解决方案--------------------------------------------------------
使用excel的函数,不过还是得写函数方法
------解决方案--------------------------------------------------------
数据透视表
------解决方案--------------------------------------------------------
使用数据透视表可能会更快一点