负偏移出错

时间:2018-04-04 01:15:07

标签: excel vba excel-vba

我尝试使用以下代码查找不是日期而不是空单元格的值,并将该值复制到最多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行以上价值的当前位置。

我很感激任何人的帮助,你可以让我知道我在这里做错了什么。

1 个答案:

答案 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)