简体   繁体   中英

Dynamic discontinuous excel ranges in VBA

How can I dynamically extend the number of rows in two columns that I need to copy to another sheet?

First, I identify the number of rows I need to include and store in totrows :

Dim totrows As Integer
With ThisWorkbook.Worksheets("Sheet1")
    totrows = .Range("A" & .Rows.Count).End(xlUp).Row
End With

Next, I am trying to extend the two columns of interest ("B" and "G") so that the range includes that totrows rows. For a static example, if totrows =100 then I would have:

With ThisWorkbook.Worksheets("Sheet1")
    .Range("B2:B102,G2:G102").copy
End With

I then paste them into my second sheet with:

ThisWorkbook.Worksheets("Sheet2").Range("A2").Paste
.Range("B2:B102,G2:G102").copy

可写成

.Range("B2:B" & totrows & ",G2:G" & totrows).Copy

Another way without using .Copy or .Paste would be this:

Sub Copy()
    Dim wb As Workbook
    Dim wsCopy As Worksheet
    Dim wsPaste As Worksheet
    Dim totrows As Integer

    Set wb = Workbooks("Book1.xlsm")
    Set wsCopy = wb.Worksheets("Sheet1")
    Set wsPaste = wb.Worksheets("Sheet2")
    totrows = wsCopy.Range("A" & wsCopy.Rows.Count).End(xlUp).Row

    wsPaste.Range("A1:B" & totrows) = wsCopy.Range("A2:A" & totrows, "G2:G" & totrows).Value


End Sub

This way your directly putting the Values into the Range you want.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM