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

我正在尝试通过第6行,从第1列到第26列,并search“累计工时”。 一旦完成,那么我试图从第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 

有几个问题我可以直接看到你的代码。 首先,如果你偏移两列.Cells(i, j).Offset(0, -2)那么你将覆盖现有的值。 如果这是你打算做的那么奇怪,但确定。

下一个问题是,如果“已累计工时”在列A中,则会出现问题。如果这是您的情况,则Excel将最不高兴地尝试向左偏移两列,并提供错误。

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

你也可以消除i循环,并设定值的范围,但我们将保存下一次!

我没有testing这个代码,但应该没问题。

 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 

试试这个,我们可以摆脱这些select

 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