如何使用VBA在excel中重塑数据
我有一个如下所示的数据集:如何使用VBA在excel中重塑数据,vba,excel,Vba,Excel,我有一个如下所示的数据集: ID | Date1| Thing1| Date2| Thing2| Date3| Thing3| Date4| Thing4| 1 | a | xx | b | xx | c | xx | d | xx | 2 | e | xx | f | xx | g | xx | h | xx | ID | Date| Thing| 1 | a | x
ID | Date1| Thing1| Date2| Thing2| Date3| Thing3| Date4| Thing4|
1 | a | xx | b | xx | c | xx | d | xx |
2 | e | xx | f | xx | g | xx | h | xx |
ID | Date| Thing|
1 | a | xx |
1 | b | xx |
1 | c | xx |
1 | d | xx |
2 | e | xx |
2 | f | xx |
2 | g | xx |
2 | h | xx |
我想把它改成这样一张长桌子:
ID | Date1| Thing1| Date2| Thing2| Date3| Thing3| Date4| Thing4|
1 | a | xx | b | xx | c | xx | d | xx |
2 | e | xx | f | xx | g | xx | h | xx |
ID | Date| Thing|
1 | a | xx |
1 | b | xx |
1 | c | xx |
1 | d | xx |
2 | e | xx |
2 | f | xx |
2 | g | xx |
2 | h | xx |
我知道如何在R中做到这一点,但在excel中我真的很困惑
有人能帮我设置一些vba代码吗
提前感谢有3个问题与您的问题非常相似 我会根据你的情况调整答案,这很容易。您需要的一些细微更改:
rng_all
ncases=(工作表函数CountA(rng\u curr)-1)/2
icase=1至NCASE的
如果非VBA正常,则可以使用。有3个问题与您的问题非常相似 我会根据你的情况调整答案,这很容易。您需要的一些细微更改:
rng_all
ncases=(工作表函数CountA(rng\u curr)-1)/2
icase=1至NCASE的
如果非VBA正常,可以使用。这里是我这边的一个变体
Sub test()
Dim Key, Dic As Object, cl As Range, Data As Range, i&, n&
Set Dic = CreateObject("Scripting.Dictionary")
Dic.CompareMode = vbTextCompare
i = Cells(Rows.Count, "A").End(xlUp).Row
n = 1
Set Data = Range("B2:B" & i & "," & "D2:D" & i & "," & "F2:F" & i & "," & "H2:H" & i)
Dic.Add "|ID", "Date|Thing"
For Each cl In Data
If Cells(cl.Row, "A") <> "" Then
Dic.Add n & "|" & Cells(cl.Row, "A"), cl.Text & "|" & cl.Offset(, 1).Text
n = n + 1
End If
Next cl
n = 1
For Each Key In Dic
Cells(n, "K") = Split(Key, "|")(1)
Cells(n, "L") = Split(Dic(Key), "|")(0)
Cells(n, "M") = Split(Dic(Key), "|")(1)
n = n + 1
Next Key
End Sub
子测试()
尺寸键,Dic作为对象,cl作为范围,数据作为范围,i&,n&
设置Dic=CreateObject(“Scripting.Dictionary”)
Dic.CompareMode=vbTextCompare
i=单元格(Rows.Count,“A”)。结束(xlUp)。行
n=1
设置数据=范围(“B2:B”&i&“,”和“D2:D”&i&“,”和“F2:F”&i&“,”和“H2:H”&i)
Dic.添加“| ID”、“日期|事物”
对于数据中的每个cl
如果单元格(第1行,“A”)“则
Dic.添加n&“|”和单元格(第1行,“A”)、第1行文本和第1行偏移(,1).Text
n=n+1
如果结束
下一个cl
n=1
对于Dic中的每个键
单元格(n,“K”)=拆分(键“|”)(1)
单元格(n,“L”)=拆分(Dic(键),“|”)0
单元格(n,“M”)=拆分(Dic(键),“|”)单元格(1)
n=n+1
下一键
端接头
输出
这里是我这边的一个变体
Sub test()
Dim Key, Dic As Object, cl As Range, Data As Range, i&, n&
Set Dic = CreateObject("Scripting.Dictionary")
Dic.CompareMode = vbTextCompare
i = Cells(Rows.Count, "A").End(xlUp).Row
n = 1
Set Data = Range("B2:B" & i & "," & "D2:D" & i & "," & "F2:F" & i & "," & "H2:H" & i)
Dic.Add "|ID", "Date|Thing"
For Each cl In Data
If Cells(cl.Row, "A") <> "" Then
Dic.Add n & "|" & Cells(cl.Row, "A"), cl.Text & "|" & cl.Offset(, 1).Text
n = n + 1
End If
Next cl
n = 1
For Each Key In Dic
Cells(n, "K") = Split(Key, "|")(1)
Cells(n, "L") = Split(Dic(Key), "|")(0)
Cells(n, "M") = Split(Dic(Key), "|")(1)
n = n + 1
Next Key
End Sub
子测试()
尺寸键,Dic作为对象,cl作为范围,数据作为范围,i&,n&
设置Dic=CreateObject(“Scripting.Dictionary”)
Dic.CompareMode=vbTextCompare
i=单元格(Rows.Count,“A”)。结束(xlUp)。行
n=1
设置数据=范围(“B2:B”&i&“,”和“D2:D”&i&“,”和“F2:F”&i&“,”和“H2:H”&i)
Dic.添加“| ID”、“日期|事物”
对于数据中的每个cl
如果单元格(第1行,“A”)“则
Dic.添加n&“|”和单元格(第1行,“A”)、第1行文本和第1行偏移(,1).Text
n=n+1
如果结束
下一个cl
n=1
对于Dic中的每个键
单元格(n,“K”)=拆分(键“|”)(1)
单元格(n,“L”)=拆分(Dic(键),“|”)0
单元格(n,“M”)=拆分(Dic(键),“|”)单元格(1)
n=n+1
下一键
端接头
输出
使用宏记录器开始。它将记录您手动执行的操作,并将其转换为代码,然后您可以在VBA编辑器中查看这些代码。简单的复制和粘贴就可以了。如果列
ID
也被重复,您可以使用公式方法。使用宏记录器开始。它将记录您手动执行的操作,并将其转换为代码,然后您可以在VBA编辑器中查看这些代码。简单的复制和粘贴就可以了。如果列ID
也被重复,您可以使用公式方法。谢谢我会尝试这样的方法谢谢我会尝试这样的方法