【发布时间】:2017-04-05 15:10:39
【问题描述】:
我有 3 张纸,我必须比较第一张和第二张纸中单元格的值,并在第三张中写出不同之处。
这里是代码
Dim keyRangeSh1 As String
Dim keyRangeSh2 As String
Dim keyRangeSh3 As String
Dim cellSh1 As Range
Dim cellSh2 As Range
Dim cellSh3 As Range
rowSh1 = 2
rowSh2 = 2
rowSh3 = 2
keyRangeSh1 = "C" & rowSh1
keyRangeSh2 = "C" & rowSh2
keyRangeSh3 = "C" & rowSh3
For Each cellSh1 In Sh1.Range(keyRangeSh1)
For Each cellSh2 In Sh2.Range(keyRangeSh2)
'if
'rowsh1 = rowsh1 + 1
'keyRangeSh1 = "C" & rowsh1
'endif
Next cellSh2
Next cellSh1
它进入了第一轮,但它没有回到第二个单元格
【问题讨论】:
-
keyRangeSh1 = "C" & rowSh1 keyRangeSh2 = "C" & rowSh2 keyRangeSh3 = "C" & rowSh3这些都是单个单元格(C2),因此不会发生循环。 -
我增加keyRangeSh1:rowsh1 = rowsh1 + 1 keyRangeSh1 = "C" & rowsh1
-
但是当您使用
For Each cellSh1 In Sh1.Range(keyRangeSh1)设置循环时,keyRangeSh1已经设置为"C" & rowSh1,因此您的递增不起作用。 -
此外,即使您增加 keyRangeSh1,您仍然指的是一个单元格。 C2 是一个单元格,C3 也是如此,C4 和 C5 也是如此。
-
最好在开始循环之前计算出范围。如果您知道它从第 2 行开始并在变量
rowSh1中的某个点结束,您可以使用keyRangeSh1 = "C2:C" & rowSh1和 thenFor Each cellSh1 In Sh1.Range(keyRangeSh1)