VBA-将值从一个单元格复制到另一个单元格

时间:2015-02-06 19:51:47

标签: excel vba loops google-sheets offset

我正在尝试通过第6行和第1列到第26行,并搜索“累计小时数”句子。一旦完成,那么我试图从第8行到最后一行(在本例中为30),对于第6行中已获得累计小时数的列。 然后我尝试将此列中的单元格值粘贴到同一行中剩余的2个单元格中。但我不断收到错误,但代码不起作用。

有人可以指出我正确的方向吗?谢谢

 Sub project()

    Dim lastrow As Long
    Dim i As Long
    Dim j As Long

    lastrow = Sheets("Progress").Cells(Rows.Count, 26).End(xlUp).Row

    For j = 1 To 26
        If Cells(6, j) = "Earned Cumulative Hours" Then
            For i = 8 To lastrow
                Cells(i, j).Copy
                Cells(i, j).Offset(0, -2).Select
                Selection.PasteSpeical Paste:=xlPasteValues
            Next i
        End If
    Next j
End Sub

2 个答案:

答案 0 :(得分:2)

我可以立即看到您的代码存在的一些问题。首先,如果要抵消两列.Cells(i, j).Offset(0, -2),那么您将覆盖现有值。如果这是你打算做的那么奇怪但是没问题。

下一个问题是,如果“获得的累计小时数”在A列中,则会出现问题。如果是这种情况,Excel将最不开心尝试将两列向左偏移并产生错误。

在这种情况下,不是复制和粘贴,而是将一列中的值设置为另一列,这在您的代码中可以看到。最后,您的Cell引用仅对活动工作表有效。您需要限定您感兴趣的工作表,如我的代码所示。我通常把它放在代码的开头,如果它是一个自包含的块。

您也可以消除i循环并一次设置值范围,但我们会在下次保存它!

我没有测试过这段代码,但应该没问题。

Sub projectawesome()

    Dim lastrow as Long, i as Long, j as Long

    'Qualify the sheet (assuming its in the activeworkbook)
    With Sheets("Progress")
        lastrow = .Cells(.Rows.Count, 26).End(xlUp).Row

        'I've changed this to column three to prevent offset errors.
        For j = 3 to 26
            If .Cells(6, j) = "Earned Cumulative Hours" Then
                For i = 8 to lastrow
                   'Assuming overwriting data is ok.
                   'No need to copy and paste
                   .Cells(i, j - 2).Value = .Cells(i, j).Value
                Next i
            End If
        Next 
    End With
End Sub

答案 1 :(得分:0)

试试这个,我们可以摆脱那些选择

Sub project()

Dim lastrow As Long
Dim i As Long
Dim j As Long

lastrow = Sheets("Progress").Cells(Rows.Count, 26).End(xlUp).Row

For j = 1 To 26

    If Cells(6, j) = "Earned Cumulative Hours" Then

        For i = 8 To lastrow

            Cells(i, j).Copy
            With Cells(i, j)
                .Offset(0, -2).PasteSpecial xlPasteValues
            End With
        Next i ' next row
    End If
Next j ' next col
End Sub