簡體   English   中英

在Excel VBA中使用.Rows

[英]Using .Rows In Excel VBA

我在使復制/粘貼清潔方面遇到問題。 目前我有這個:

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

sh2和sh3已正確定義,並且位於for循環內; 那不是問題。 使用Range似乎很麻煩,因為我必須定義一個lastcolumn變量,等等。無論如何,.rows可以做到這一點嗎?

目標是將滿足條件的行復制到另一張工作表,但將A列留空。 任何對干凈解決方案的反饋(我知道這是錯誤的)將不勝感激。

復制范圍(如果復制整個行)將大於粘貼范圍(如果您偏移一列)。 您無法將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

要么

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 / DataTable而不是Excel范圍。 如果可能的話。

如果已經有一個Table,那么您可以簡單地使用:

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選中該復選框

注意:如果不確定表名,只需單擊表,然后在功能區上將彈出一個新選項卡,其末尾稱為表工具/設計。 在該標簽的最左側區域包含表名,您可以將其更改為所需的任何名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM