遍历列并将值粘贴到现有工作簿

时间:2019-04-03 20:23:38

标签: excel vba loops copy-paste

嗨,这是我的第一篇文章,谈到VBA时,我是新手。 所以我尝试了最后6个小时来完成一项任务。

我已经设法获取For Each循环的代码,并且可以正常工作并将其值复制到现有工作簿中。但是我无法找出为什么总是将值复制到A2而不复制到A3 / A4 / A5等等。

我尝试了这段代码“ range = range + 1”,但我不断遇到运行时错误,它仍然将值复制到A2并在从循环中获取新值时将其覆盖。

我认为只需要一点零钱,但我无法弄清楚。 :(

Sub copie1()

Dim ws As Worksheet
Dim cell As Range
Dim targetsheet As Worksheet
Dim target As Range
Dim rngTemp As Range

Set wkba = ActiveWorkbook

Worksheets("cop1").Activate
LR = Cells(Rows.Count, "A").End(xlUp).Row
LT = Cells(Rows.Count, "X").End(xlUp).Row

    Set rngTemp = Range("X2:X" & LT)

   Workbooks.Open Filename:="C:\Users\path......."
        Set targetsheet = Worksheets("Data")
     Set target= targetsheet.Range("A1")

For Each cell In rngTemp
If cell > 0 Then

target.Offset(1, 0) = cell.Value

        End If


      target = target+1  '// is this right? 

Next cell





End Sub

我的目标是循环遍历工作簿中的列X,并复制每个大于0的数据(因为有空单元格和值为0的单元格) 并将其粘贴到A2 / A3 / A4范围内的现有工作簿中,依此类推

2 个答案:

答案 0 :(得分:0)

您不能将数字1添加到Range对象。

尝试将target = target+1 '// is this right?替换为:

Set target = target.Offset(1)

这可以解决问题吗?

答案 1 :(得分:0)

SibSib1903,我在下面添加了一个简单的示例,您可以轻松地适应自己的要求。它查看A列中的所有单元格值,并且任何大于零的数值都将从第1行开始复制到C列。例如,如果A列包含45行数据,并且其中只有三行的数值大于零,这三个值将复制到前三行的C列中。

Public Sub copieTest()
Dim ws As Worksheet, cell As Range, rngX As Range
Dim tmpVal As Variant, counter As Long

Set ws = ThisWorkbook.Worksheets("cop1")
Set rngX = ws.Range("A1:A" & ws.Cells(ws.Rows.count, 1).End(xlUp).Row)

counter = 1
For Each cell In rngX
    tmpVal = Val(Trim(cell.Value))
    If tmpVal > 0 Then
        ws.Range("C" & counter).Value = tmpVal
        counter = counter + 1
    End If
Next cell
Set rngX = Nothing: Set ws = Nothing

End Sub