gpt4 book ai didi

excel - "Flatten"多行包含不同的数据,但对单​​行有共同的引用

转载 作者:行者123 更新时间:2023-12-02 17:04:19 25 4
gpt4 key购买 nike

我尝试在 Stackoverflow 和 Google 上搜索此问题的答案,但尚未找到。我认为我的部分问题是我不确定我想要做的事情的关键字是什么。

我的数据看起来像这样:

ID    Var1    Var2    Name
01 0001 0002 Bill
01 0001 0002 Jim
01 0001 0002 Sally
02 0003 0004 Sam
02 0003 0004 Kyle

您将看到我有多行具有相同的 ID 和相同的 Var1 和 Var2,但每行都有唯一的名称。我想“展平”这些行,这样每个 ID 只有一行,并且每行都有适合所有数据所需的尽可能多的“名称”列。

像这样:

ID    Var1    Var2    Name1    Name2    Name3
01 0001 0002 Bill Jim Sally
02 0003 0004 Sam Kyle

有谁知道如何做到这一点或它叫什么?

谢谢!

根据评论更新:我的数据源是 .csv 文件,我正在尝试使用 Excel 对其进行操作。 Excel 宏或 VBA 解决方案是最好的。不幸的是,我的 SQL 非常初级,因此学习应用 SQL 解决方案会非常耗时。

最佳答案

使用变体数组和字典对象,这样的事情非常快

代码将输出从 A1:Dx 转储到 F1

更新:固定名称数字

enter image description here

Sub ReCut()
Dim X
Dim Y
Dim C

Dim lngRow As Long
Dim lngCol As Collection
Dim lngCnt1 As Long
Dim lngCnt As Long
Dim objDic As Object

Set objDic = CreateObject("scripting.dictionary")
X = Range([a1], Cells(Rows.Count, "C").End(xlUp)).Value2
Y = X

ReDim Y(1 To UBound(Y), 1 To 100)

For lngCnt1 = 1 To (UBound(Y, 2) - 3)
Y(1, lngCnt1) = "Name" & lngCnt1
Next

For lngRow = 1 To UBound(X, 1)
If objDic.exists(X(lngRow, 1) & X(lngRow, 2) & X(lngRow, 3)) Then
'find first blank entry in relevant array row
C = Split(Join(Application.Index(Y, lngCnt), "| "), "|")
Y(lngCnt, Application.Match(" ", C, 0)) = X(lngRow, 4)
Else
lngCnt = lngCnt + 1
Y(lngCnt, 1) = X(lngRow, 1)
Y(lngCnt, 2) = X(lngRow, 2)
Y(lngCnt, 3) = X(lngRow, 3)
Y(lngCnt, 4) = X(lngRow, 4)
objDic.Add X(lngRow, 1) & X(lngRow, 2) & X(lngRow, 3), lngCnt
End If
Next

[f1].Resize(UBound(Y, 1), UBound(Y, 2)) = Y

End Sub

关于excel - "Flatten"多行包含不同的数据,但对单​​行有共同的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17748781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com