2013-06-18 312 views
0

我在複製/粘貼乾淨時遇到問題。目前我有這個:在Excel VBA中使用.Rows

If distanceValue <= distanceParameter Then 
    sh2.Rows(i).Copy _ 
    sh3.Rows(i).Offset(0, 1) 
End If 

sh2和sh3被正確定義,它在一個for循環中;這不是問題。範圍似乎很難使用,因爲我不得不定義一個lastcolumn變量等。有無論如何與.Rows做到這一點?

目標是複製一行,如果它滿足條件到另一個工作表,但留下列A空白。任何對清潔解決方案的反饋(我知道這是錯誤的)將不勝感激。

+0

複製整行 - >完成運行宏,然後插入一列。 – 2013-06-18 13:49:41

回答

1

如果您偏​​移了一列,則您的複製範圍(如果複製整行)將大於粘貼範圍。你不能粘貼16384列到16383,沒有足夠的空間。

如果你不想使用範圍函數,你將不得不復制整行,然後在前面添加一列。

或者您可以在複製粘貼之前將該列添加到源數據,如果需要,在完成時刪除列。

Sub Sample() 
Dim sh2 As Worksheet, sh3 As Worksheet 

Set sh2 = Worksheets("Sheet1") 
Set sh3 = Worksheets("Sheet2") 

If distanceValue <= distanceParameter Then 
    sh2.Rows(i).Copy _ 
    sh3.Rows(i) 
End If 

sh3.Columns("A").insert 
End Sub 

OR

Sub Sample() 
Dim sh2 As Worksheet, sh3 As Worksheet 

Set sh2 = Worksheets("Sheet1") 
Set sh3 = Worksheets("Sheet2") 

sh2.Columns("A").insert 

If distanceValue <= distanceParameter Then 
    sh2.Rows(i).Copy _ 
    sh3.Rows(i) 
End If 

'The next line is to return the source data back to the original format remove if not needed 

sh2.Columns("A").Delete 

End Sub 

你最後的選擇和最有活力的將是具有的ListObject /數據表,而不是一個Excel範圍內工作。如果可能的話。

如果你有一個表已經然後,你可以簡單地使用:

Sub Sample() 
Dim sh2 As Worksheet, sh3 As Worksheet 
Dim rngCurrentRow As Range 

Set sh2 = Worksheets("Sheet1") 
Set sh3 = Worksheets("Sheet2") 

Set rngCurrentRow = sh2.ListObjects("YourTableNameHere").ListRows(i).Range 

If distanceValue <= distanceParameter Then 
    rngCurrentRow.Copy _ 
    sh3.Cells(i, 2) 
End If 

End Sub 

製作範圍到表是很容易的,如果你的數據不包含空格它一樣簡單點擊在第一個單元格你的範圍和按Ctrl+L然後這將選擇你的範圍,如果你需要增加範圍的大小,因爲它確實包含空格,那麼簡單地改變輸入框來選擇所有的數據。

,如果你有heade3rs檢查複選框不要忘記

注:如果你不確定你的表名只需單擊表,然後在功能區的新選項卡會彈出最後稱爲表工具/設計。在該選項卡上,最左側的區域包含您的表名,您可以將其更改爲任何您想要的內容。

+0

這是有道理的。謝謝! –

+0

@ Al.Sal我用另一個可能的解決方案更新了我的答案,我使用了自己的答案,因爲我的所有數據都包含在表中。 – user2140261