Excel 从范围宏复制单个单元格

Excel 从范围宏复制单个单元格,excel,vba,Excel,Vba,我在表1上有数量不同的数据。我需要一个宏来循环所有范围,如果单元格有值,那么将其复制到Sheet2上的特定列。我不能简单地复制整个范围,因为我不想进入。我需要逐个循环遍历每个单元格,并将值以特定格式粘贴到Sheet2上 我有下面的代码,它给了我 错误“1004”方法“对象范围”“工作表”失败 完全忘记rng对象。对于每个语句,在中更为必要,但您只是在工作表中的行之间循环 为i创建一个简单的For语句,该语句只循环您需要的行: Dim ws1 As Worksheet, ws2 As Worksh

我在表1上有数量不同的数据。我需要一个宏来循环所有范围,如果单元格有值,那么将其复制到Sheet2上的特定列。我不能简单地复制整个范围,因为我不想进入。我需要逐个循环遍历每个单元格,并将值以特定格式粘贴到Sheet2上

我有下面的代码,它给了我

错误“1004”方法“对象范围”“工作表”失败


完全忘记
rng
对象。对于每个语句,在
中更为必要,但您只是在工作表中的行之间循环

为i创建一个简单的
For
语句,该语句只循环您需要的行:

Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = ThisWorkbook.Worksheets("Sheet1")
Set ws2 = ThisWorkbook.Worksheets("Sheet2")

Dim i As Long
For i = 4 To 17
    If Not IsEmpty(ws1.Cells(i, 2)) Then
        ws1.Cells(i, 4).Copy ws2.Range("A1")
    End If
Next i

正如我已经指出的,您的拷贝目的地
ws2.Range(“A1”)
是静态的,因此每次满足您的条件时,它都会继续覆盖您的数据。但是你似乎已经处理好了,所以我不会假设你想用它做什么。

完全忘记
rng
对象。对于每个
语句,在
中更为必要,但您只是在工作表中的行之间循环

为i创建一个简单的
For
语句,该语句只循环您需要的行:

Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = ThisWorkbook.Worksheets("Sheet1")
Set ws2 = ThisWorkbook.Worksheets("Sheet2")

Dim i As Long
For i = 4 To 17
    If Not IsEmpty(ws1.Cells(i, 2)) Then
        ws1.Cells(i, 4).Copy ws2.Range("A1")
    End If
Next i

正如我已经指出的,您的拷贝目的地
ws2.Range(“A1”)
是静态的,因此每次满足您的条件时,它都会继续覆盖您的数据。但是您似乎已经处理了这个问题,所以我不会假设您正在尝试如何处理它。

您的
rng
变量正在引用活动工作表,因为您在设置
范围时没有限定
对象。@braX我尝试将我的设置更新为:set rng=Worksheets(“Sheet1”).Range(“B4:D17”)还是相同的错误ws1.Range(rng.Cells(i,3))发生了什么事
rng.Cells()
已经返回了一个range对象,那么为什么要将它放入另一个函数中,而这个函数基本上执行相同的操作呢?@K.Dᴀᴠɪs我需要宏在一个范围内循环。然后当它遇到一个有值的单元格时。我需要它将下一列中的值复制到另一个工作表上的下一个空单元格。我想我需要放弃这个范围。@K.Dᴀᴠɪs我最初使用ws1/ws2,但在进行故障排除时,我使用了完整的工作表名称。您的
rng
变量正在引用活动工作表,因为您在设置
Range
对象时没有限定它。@braX我尝试将我的集合更新为:set rng=Worksheets(“Sheet1”).Range(“B4:D17”)还是相同的错误ws1.Range(rng.Cells(i,3))发生了什么事
rng.Cells()
已经返回了一个range对象,那么为什么要将它放入另一个函数中,而这个函数基本上执行相同的操作呢?@K.Dᴀᴠɪs我需要宏在一个范围内循环。然后当它遇到一个有值的单元格时。我需要它将下一列中的值复制到另一个工作表上的下一个空单元格。我想我需要放弃这个范围。@K.Dᴀᴠɪs我最初使用ws1/ws2,但在进行故障排除时,我使用了完整的工作表名称。请注意我对
ws1.Cells(I,1)
ws1.Cells.(I,4)
-您将代码中的1,3作为相对于
rng
对象的第一列的编辑,我已经将我的答案更正为您需要的实际列数。请注意我对
ws1.Cells(I,1)
ws1.Cells.(I,4)
-您在代码中以1,3作为相对于
rng
对象的第一列的编辑,我已经将我的答案更正为您需要的真实列数。