excel:如何将重复记录结构的名称-值列表转换为表/交叉表?

阿道夫大蒜

“文本到列”和数据透视表不是解决方案!

源数据

myval: value1
mydate: 11:11:2001
myname: bob diamond
mynum: 5648
endmarker
myval: value2
mydate: 10:10:2008
myname: jimmy knapp
mynum: 6661
endmarker

进入

myval            mydate           myname            mynum
value 1          11:11:2001       bob diamond       5648
value 2          10:10:2008       jimmy knapp       6661

第一部分很好,其中在日期中还带有分隔符,可以通过以下方式实现:

 =IFERROR(LEFT(A1,FIND(":",A1,1)-1),"")     
 =IFERROR(RIGHT(A1,LEN(A1)-FIND(":",A1,1)),"")

仅在第一个定界符上很好地拆分

谷歌烦人的“列表到表格”或“列表到交叉表”返回完全相反的结果

编辑:每条记录中大约有200个字段,值始终以相同的顺序出现,但其中某些值并不总是存在,这意味着无法直接使用OFFSET命令之类的方法来解决该问题,否则该命令将起作用

加里的学生

让我们假设你的源数据列一个工作表Sheet1

在此处输入图片说明

首先将列标题放在Sheet2中

然后运行以下简短宏:

Sub DataReOrganizer()
   Dim s1 As Worksheet, s2 As Worksheet
   Dim N As Long, i As Long, K As Long, v As String
   Set s1 = Sheets("Sheet1")
   Set s2 = Sheets("Sheet2")
   N = s1.Cells(Rows.Count, "A").End(xlUp).Row
   K = 2

   For i = 1 To N
      v = s1.Cells(i, "A").Text
      If v = "endmarker" Then
         K = K + 1
      Else
         ary = Split(v, ": ")
         MsgBox ary(1)
         If ary(0) = "myval" Then s2.Cells(K, 1) = ary(1)
         If ary(0) = "mydate" Then s2.Cells(K, 2) = Chr(39) & ary(1)
         If ary(0) = "myname" Then s2.Cells(K, 3) = ary(1)
         If ary(0) = "mynum" Then s2.Cells(K, 4) = ary(1)
      End If
   Next i
End Sub

Sheet2中生成此代码

在此处输入图片说明

CHR(39)是用来保存你的数据格式,并防止Excel改变它变成一个时间。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章