我正在使用
我需要修改一个文件(从salesforce导出),其中行具有唯一ID,名称和一个列,该列具有此表中另一行的唯一ID,并将其标识为该项的“子”。 / p>
未受影响的数据图片:
我需要完成的工作
我的目标是遍历整个电子表格(55,000行)并将ParentID更改为父级名称列中的值。
我的伪代码解决方案
foreach row starting from the top {
varA = [current row number for this loop];
varX = [value in varA:columnC];
if (varX == [regex value]) {
foreach row starting from the top {
varB = [current row number for this loop];
if ([value in varB:columnA] == varX) {
foreach row starting from the top {
varC = [current row number for this loop];
if (varC:columnC = varB:columnA) {
[varC:columnC] = [varB:columnB];
}
}
break second foreach loop;
}
}
}
}
手动修复后的数据图片:
到目前为止我做过的研究
我正在使用excel,我发现资源讨论如何创建一个新的宏,有些甚至有例子,但我不相信它会成为正确的地方。我也有一位朋友建议使用Pandas修改文件会更好,但这也不是我熟悉的。
我的问题:
我从哪里开始? ...编写脚本来修改所有这些内容的正确工具是什么?
另外,如果可能的话,在使用适合此工作的工具时,您是否可以建议我使用资源作为参考?
答案 0 :(得分:2)
改变这一点,
..使用此代码,
Option Explicit
Sub wqweqrteq()
Dim d As Long, dict As Object, vals As Variant
Set dict = CreateObject("Scripting.Dictionary")
With Worksheets("salesforce")
With .Range(.Cells(2, "A"), .Cells(.Rows.Count, "C").End(xlUp))
vals = .Value2
End With
For d = LBound(vals, 1) To UBound(vals, 1)
dict.Item(vals(d, 1)) = vals(d, 2)
Next d
For d = LBound(vals, 1) To UBound(vals, 1)
If dict.exists(vals(d, 3)) Then
vals(d, 3) = dict.Item(vals(d, 3))
End If
Next d
With .Range(.Cells(2, "A"), .Cells(.Rows.Count, "C").End(xlUp))
.Value = vals
End With
End With
End Sub
..进入这个。
答案 1 :(得分:0)
以下 For循环可以解决您的问题:
Sub UpdateID()
Dim lastrow As Long
Dim x As Long, y As Long, z As Long
Dim ParentName As String
lastrow = Cells(Rows.Count, "A").End(xlUp).Row
For x = 2 To lastrow
If Left(Cells(x, 3), 2) = 0 Then
For y = 2 To lastrow
If Cells(x, 3).Value = Cells(y, 1).Value Then
ParentName = Cells(y, 2).Value
Exit For
End If
Next y
End If
For z = 2 To lastrow
If Cells(z, 3).Value <> "" And Cells(x, 3).Value = Cells(z, 3).Value Then
Cells(z, 3).Value = ParentName
End If
Next z
Next x
End Sub