excel中如何将一行数据根据属性拆分成多行数据

具体描述见附件图例,不知道能否用函数实现,求助各路大神
2024-11-21 21:25:25
推荐回答(3个)
回答1:

你好!这题目是一个典型的将一个交叉表(二维表)数据转换为数据库记录(一行一行的记录)表的操作过程,我可以给你一个操作,稍等。

1、先将表整理一下,取消合并单元格,为了唯一值,在每个科目前加一个科目代码列(如图),

2、以身份证号加科目代码为唯一值,在表前加三空列,A2=H2&I2,B2=H2&M2,C2=H2&Q2, 下拉,得到全部值,然后复制这3列值,再选择性粘贴为数值(因公式所得值不能当参数);    

3、复制前三列值(不包括表头),粘贴---选择性粘贴为数值---转置,

4、列公式,错位相等,再下拉公式,直到值为0出现时,这样就把原来的交叉数据变成一列唯一的记录。

5、再复制得到的新列A,选择粘贴为数值,原表后面的列值全部可以用vlookup( )函数实现。B30=vlookup(A30, $A$1:$T$6, 6, 0), C30=vlookup(A30, $A$1:$T$6, 7, 0),

因本人经常与数据库打交道,常用EXCEL转换数据,这个方法当你面对海量数据进行加工时,特别实用,希望对你用。谢谢

回答2:

【代码和图片已更新过,开始上传的答案有点问题,现在正确了。】

你这个问题,公式不好解决。用VBA代码吧。

先看下图:

方法:

点顶部的“开发者工具”,点“VisualBasic”打开VB编辑器,

在画蓝色框的区域内的任意位置,点右键---插入模块,

点击模块,在右侧输入代码,

点击画粉色圆圈的按钮执行代码,即可得出结果。

代码中加了注释文字,方便你看懂,

代码如下:

Sub 拆分数据()
    Dim i, t As Integer '定义i和t的类型
    For i = 3 To 4 '遍历原数据所在行,从第3行到第4行
        x = Evaluate("COUNTA(F" & i & ",I" & i & ",L" & i & ")") '统计Fi、Ii、Li非空单元格个数
        If [A10] = "" Then '数据从A10单元格开始写
            s = 10 '如果A10格是空的,则s=10
        Else
            s = [A65536].End(3).Row + 1 '否则s=A列最后一个数据的行号+1
        End If
        For t = s To s + x - 1 '遍历该同学需写数据的行,从第s行到第s+x-1行
            Range("A" & t) = Range("A" & i)
            Range("B" & t) = Range("B" & i)
            Range("C" & t) = Range("C" & i)
            Range("D" & t) = Range("D" & i)
            Range("E" & t) = Range("E" & i)
            Range("F" & t) = Cells(i, 5 + (t - s) * 3 + 1) '5指原数据中第一个科目左侧列的列序数
            Range("G" & t) = Cells(i, 5 + (t - s) * 3 + 2) '例图上第一个科目左列为E列的列序数是5
            Range("H" & t) = Cells(i, 5 + (t - s) * 3 + 3) '3指原数据科目列序数等差,F、I、L的列等差为3
        Next t
    Next i
End Sub

回答3:

这个

个可以的

后面成绩的部分没写,思路是这样,后面的index里面地址要么手动换,要么你自己加一个offset

然后下拉拖动

注意第一行需要手动

=IF(COUNTIF($C$9:C11,C11)