我正在尝试通过第6行以及从第1列到第26列,并搜索句子“已赚取的累积时间”。完成此操作后,我将尝试从第8行转到第6行中已赚取累积小时数的列的最后一行(在本例中为30)。然后,我尝试将此列中单元格的值粘贴到同一行中还剩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
循环并一次设置值的范围,但是下次我们将保存它!
我没有测试此代码,但应该没问题。
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句