我正在尝试通过第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
答案 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