我尝试使用以下代码查找不是日期而不是空单元格的值,并将该值复制到最多6行和4行,直到原始定位的值和偏移量。
这是我的代码:
Sub copy_value()
Dim Srchcust As Range, cust As Range
Set Srchcust = Range("C:C")
For Each cust In Srchcust
If Not IsEmpty(cust) And Not IsDate(cust) Then
cust.Offset(-6, 4).Value = cust.Value
End If
Next cust
End Sub
由于某种原因,如果偏移设置为负数,它会给我一个错误1004,但是一旦我将-6更改为0,它就可以工作,但我需要将值复制到6行以上价值的当前位置。
我很感激任何人的帮助,你可以让我知道我在这里做错了什么。
答案 0 :(得分:1)
您的代码几乎没有问题。
首先,错误 - 当你尝试引用一个不存在的单元格时会发生错误。您可以使用一对正整数来处理工作表中的单元格,例如Cells(1, 1)
(A1
单元格),Cells(3, 4)
(D3
单元格)等。
当你使用偏移量时,它就像你在减去特定的坐标一样。当您尝试从单元格B2(-1, -1
)按对Cells(2, 2)
进行偏移时,由于A
,您将获得Cells(1, 1)
单元格(2-1=1
)。当您尝试通过-6, 4
和循环throguh C
列进行偏移时,从C1到C6的单元格会发生什么?然后,例如,其中一个坐标为1-6=-5
,这不是,因此是错误。
另一个问题是,您遍历整个C
列!这不是必需和低效的!您应该使用以下代码找到该列的最后一行:
Dim lastRow As Long
lastRow = Cells(Rows.Count, 3).End(xlUp).Row
然后通过定义它来限制范围:
Dim rng As Range
Set rng = Range("C1:C" & lastRow)
'or you should do like this, it won't give you error
'Set rng = Range("C7:C" & lastRow)