2015-02-06 161 views
2

我正在嘗試通過第6行並從第1列到第26列並搜索句子已累積的小時數。一旦完成,那麼我試圖從第8行到最後一行(在這種情況下爲30),以獲得第6行累積小時數的列。 然後,我嘗試粘貼此列中單元格的值到2個單元格留在同一行。但我不斷收到錯誤,代碼不起作用。VBA-將數值從一個單元格複製到另一個偏移單元格

有人可以請指出我在正確的方向嗎?由於

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

爲什麼[google-spreadsheet]標記? – pnuts 2015-02-06 20:46:11

回答

2

的有幾個問題,我可以看到你的代碼,立竿見影。首先,如果你抵消了兩列.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 
+0

謝謝你的作品。這個聲明應該做什麼?它的目的是什麼?隨着表(「進展」) 非常感謝。 – JA16 2015-02-06 22:23:14

+0

當你使用'With'時,它允許你使用任何屬性或方法,而不用再次明確地聲明對象。您將在代碼中看到'.Cells',前面的'.'告訴代碼您想使用'With With Sheets(「Progress」)'定義的工作表。希望是有道理的! – CuberChase 2015-02-06 23:11:42

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 
+0

非常感謝!有用。 with功能的目的是什麼? – JA16 2015-02-06 22:24:04

+0

看起來像cuberchase,我在同一時間回答,也回答你有問題。讓我們現在,如果你需要任何其他 – jamesC 2015-02-09 01:57:45

相關問題