当前位置: 代码迷 >> VBA >> 求excel使用
  详细解决方案

求excel使用

热度:5934   发布时间:2013-02-26 00:00:00.0
求excel应用
姓名 班级 数学 语文
张三 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的函数,不过还是得写函数方法
------解决方案--------------------------------------------------------
数据透视表
------解决方案--------------------------------------------------------
使用数据透视表可能会更快一点
  相关解决方案