帮你设置了一个表格,希望帮到你
使用VBA是最好的
但是这个方法也不错而且比较方便,不是吗
数据量大,可以用VBA处理。
你的原数据的记录,一般是按时间为顺序记录数据的,不可能象你示例中的数据一样排序好的,从姓名列来说也许就是乱序的,但时间列是有序的。
此代码用数组+字典完成,不管你姓名是什么顺序,都可以得到结果,且自动添加边框、写入标题。一键搞定!
(代码好不好,关键看结果准确与运行速度,数组+字典的方法,极大减少了代码的运算时间)。
请启用宏,点表中转换按钮就完成了。
Sub tt()
Dim i, j, k, c, tag As Integer
i = 1
j = 1
k = 1
c = 1
tag = 0
Do While Sheets(1).Cells(i, 1) <> ""
If i = 1 Then
Sheets(2).Cells(i, 2) = Sheets(1).Cells(i, 1)
Sheets(2).Cells(i, 3) = Sheets(1).Cells(i, 2)
Sheets(2).Cells(i, 4) = Sheets(1).Cells(i, 3)
Sheets(2).Cells(i, 1) = 4
j = j + 1
End If
If i > 1 Then
tag = 0
For k = 1 To j - 1
If Sheets(1).Cells(i, 1) = Sheets(2).Cells(k, 2) Then
c = Sheets(2).Cells(k, 1)
Sheets(2).Cells(k, c + 1) = Sheets(1).Cells(i, 2)
Sheets(2).Cells(k, c + 2) = Sheets(1).Cells(i, 3)
Sheets(2).Cells(k, 1) = c + 2
tag = 1
End If
Next k
If tag = 0 Then
Sheets(2).Cells(j, 2) = Sheets(1).Cells(i, 1)
Sheets(2).Cells(j, 3) = Sheets(1).Cells(i, 2)
Sheets(2).Cells(j, 4) = Sheets(1).Cells(i, 3)
Sheets(2).Cells(j, 1) = 4
j = j + 1
End If
End If
i = i + 1
Loop
End Sub
会用VBA吧,把你的数据放到sheet1中,A列放姓名,B列放时间,C列放药物剂量,然后运行宏,sheet2中就可以得到你想要的结果。
不知道您导出来表格:
A 2013.1.8 20MG
A 2013.2.8 30MG
A 2013.3.8 40MG
B 2013.2.6 70MG
B 2013.2.28 60MG
是不是分了三列还是在一列,我粘贴到EXCEL中是5行1列;
针对这种情况,我先选择复制了A到一个新的Sheet中
A 2013.1.8 20MG
A 2013.2.8 30MG
A 2013.3.8 40MG
然后对A进行分列,A 单独一列,时间和药物剂量一列,
A 2013.1.8 20MG
A 2013.2.8 30MG
A 2013.3.8 40MG
然后把:时间和药物进行复制---选择性粘贴--转置为下列各式,
2013.1.8 20MG 2013.2.8 30MG 2013.3.8 40MG
然后再插入下列内容即可:
患者 第一次随访时间 第一次药物剂量 第二次随访时间 第二次药物剂量 第三次随访时间 .........
B如法炮制,不知道您有没有看明白。
楼上说对,还因为你的数据不“整齐”,如有点患者来该一次,再有点访问3次。
对于在数据量来说,使用VBA来解决才是正道。