【发布时间】:2016-06-08 13:06:51
【问题描述】:
如果 2 个字段相同(将这两个字段视为标识每条记录的键),我正在尝试将值从一张小表“带 ID 的 MD”复制到更大的表“带 ID 的 D”。
这是我的第一次尝试:
Sub CopyIDCells()
Set i = Sheets("MD with ID")
Set e = Sheets("D with ID")
Dim d
Dim j
d = 1
j = 2
Do Until IsEmpty(e.Range("B" & j))
d = 2
Do Until IsEmpty(i.Range("A" & d))
If e.Range("C" & j).Value = i.Range("D" & d).Value Then
If e.Range("M" & j).Value = i.Range("J" & d).Value Then
e.Range("A" & j).Value = i.Range("B" & d).Value
End If
End If
d = d + 1
Loop
j = j + 1
Loop
End Sub
这是我的第二次尝试:
Sub CopyIDCells2()
Set i = Sheets("MD with ID")
Set e = Sheets("D with ID")
Dim d
Dim j
d = 1
j = 2
Do Until j = 20886
d = 2
Do Until d = 1742
If e.Cells(j, 3).Value = i.Cells(d, 4).Value Then
If e.Cells(j, 13).Value = i.Cells(d, 10).Value Then
e.Cells(j, 1).Value = i.Cells(d, 2).Value
End If
End If
d = d + 1
Loop
j = j + 1
Loop
End Sub
此代码运行时,excel 工作表中没有任何变化,尽管运行需要几分钟 -_-"。
.. 样本被移除
【问题讨论】:
-
你能提供至少一个输入样本吗?比如,“带有 ID 的 MD”表中的
A1到A10是什么,“带有 ID 的 D”表中的B2到B10是什么?其他输入也可能有用。 -
在访问单元格中的数据时尝试使用 Value2 属性而不是 Value。根据数据的样子,它可能会修复它。 stackoverflow.com/questions/17359835/…
-
还可以尝试插入一些调试语句,以查看您的代码进行了哪些比较以及逻辑是如何工作的。我会在你的第一个
If声明之后放一个:Debug.Print "e.Cells(" & j & ",3) equals i.Cells(" & d & ",4) --> " & e.Cells(j,3).value & " = " & i.Cells(d,4).value。然后在下一个If语句之后可能还会有另一个调试打印。如果您可以直观地检查您知道应该复制的等效项的位置,然后在测试时调整您的循环参数以专注于该区域。 -
你为什么有这个?如果 e.Cells(j, 3).Value = i.Cells(d, 4).Value Then If e.Cells(j, 13).Value = i.Cells(d, 10).Value Then 。为什么不将其更改为 If (e.Cells(j, 3).Value = i.Cells(d, 4).Value) And (e.Cells(j, 13).Value = i.Cells(d, 10 ).Value) 然后为您节省一个 if 和可能的时间执行。另外,为什么有2个直到?不应该更快地确定哪一个是两者中最长的,然后根据它进行循环吗?
-
我确实在最后添加了一个样本,