Hỏi cách xác định vùng tiếp theo tính từ mảng đã có

Liên hệ QC

pinklove

Thành viên thường trực
Tham gia
21/1/08
Bài viết
336
Được thích
42
Mình có code như sau:

Mã:
Sub Macro1()
Dim R1, R2, R3, R4 As Range

With Sheet2
    ActiveSheet.Range([A511], [F599].End(xlUp)).Clear
    Set R1 = Range([A4], [F500].End(xlUp))
    Set R2 = Range("A511")
    R1.Copy R2
    Set R3 = Range("A600:A603")
    Set R4 = ?????
    R3.Copy R4
End With

End Sub

Mình muốn copy cái mảng R3 sang vị trí ngay dưới mảng R2 (sau khi copy từ mảng R1 sang R2) mà mình không biết cách xác định mảng R4 như thế nào. Nhờ các bạn chỉ giúp
 
Mình có code như sau:

Mã:
Sub Macro1()
Dim R1, R2, R3, R4 As Range

With Sheet2
    ActiveSheet.Range([A511], [F599].End(xlUp)).Clear
    Set R1 = Range([A4], [F500].End(xlUp))
    Set R2 = Range("A511")
    R1.Copy R2
    Set R3 = Range("A600:A603")
    Set R4 = ?????
    R3.Copy R4
End With

End Sub

Mình muốn copy cái mảng R3 sang vị trí ngay dưới mảng R2 (sau khi copy từ mảng R1 sang R2) mà mình không biết cách xác định mảng R4 như thế nào. Nhờ các bạn chỉ giúp
nên sửa lại thế này

Dim R1 As Range, R2 As Range, R3 As Range, R4 As Range
With Sheet2
ActiveSheet.Range([A511], [F599].End(xlUp)).Clear
Set R1 = .Range([A4], [F500].End(xlUp))
Set R2 = .Range("A511")
R1.Copy R2
Set R3 = .Range("A600:A603")
Set R4 = R2.(1).Offset(65000-R2.Rows.Count).End(Xlup)
R3.Copy R4
End With

Chú ý các màu đỏ xem lại và thay đổi cho thích hợp

Mã:
Dim R1  As Range, R2 As Range, R3 As Range, R4 As Range
With Sheet2
    ActiveSheet.Range([A511], [F599].End(xlUp)).Clear
    Set R1 = .Range([A4], [F500].End(xlUp))
    Set R2 = .Range("A511")
    R1.Copy R2
    Set R3 = .Range("A600:A603")
    Set R4 = R2.(1).Offset(65000-R2.Rows.Count).End(Xlup)
    R3.Copy R4
End With
 
Lần chỉnh sửa cuối:
Upvote 0
nên sửa lại thế này

Dim R1 As Range, R2 As Range, R3 As Range, R4 As Range
With Sheet2
ActiveSheet.Range([A511], [F599].End(xlUp)).Clear
Set R1 = .Range([A4], [F500].End(xlUp))
Set R2 = .Range("A511")
R1.Copy R2
Set R3 = .Range("A600:A603")
Set R4 = R2.(1).Offset(65000-R2.Rows.Count).End(Xlup)
R3.Copy R4
End With

Chú ý các màu đỏ xem lại và thay đổi cho thích hợp

Mã:
Dim R1  As Range, R2 As Range, R3 As Range, R4 As Range
With Sheet2
    ActiveSheet.Range([A511], [F599].End(xlUp)).Clear
    Set R1 = .Range([A4], [F500].End(xlUp))
    Set R2 = .Range("A511")
    R1.Copy R2
    Set R3 = .Range("A600:A603")
    Set R4 = R2.(1).Offset(65000-R2.Rows.Count).End(Xlup)
    R3.Copy R4
End With
Mình thực hiện theo code của bạn nhưng nó báo lỗi bạn ạ. Đã đổi 65000 thành 600
 
Upvote 0
Mình đã làm được rồi ạ
Mã:
Sub Macro1()
Dim R1  As Range, R2 As Range, R3 As Range, R4 As Range
With Sheet2
    .Range("A512:F599").Clear
    Set R1 = .Range([A4], [F500].End(xlUp))
    Set R2 = .Range("A512")
    R1.Copy R2
    Set R3 = .Range("A600:A603")
    Set R4 = [A599].End(xlUp).Offset(1)
    R3.Copy R4
End With
End Sub
 
Upvote 0
Array <= office 2010 được 65536
 
Upvote 0
Array <= office 2010 được 65536
Về lý thuyết giới hạn kích thước 1 chiều của array là 2^31 - 1.
Còn trên mỗi máy tính thì phụ thuộc vào RAM nhưng luôn nằm trong khoảng trên.

MS Excel 2003 trở xuống có 65536 dòng, MS Excel 2007 trở lên có 1048576 dòng. Không liên quan gì tới array.
 
Upvote 0
Về lý thuyết giới hạn kích thước 1 chiều của array là 2^31 - 1.
Còn trên mỗi máy tính thì phụ thuộc vào RAM nhưng luôn nằm trong khoảng trên.

MS Excel 2003 trở xuống có 65536 dòng, MS Excel 2007 trở lên có 1048576 dòng. Không liên quan gì tới array.
mình không biết giải thích mình test thì thấy vậy :(
 
Upvote 0
Bạn đã test như nào, gửi bài test đó lên đây được không?
Hihi minh test cong thức mãng lớn hơn 65536 office 2010 value (array vẫn nhận đủ giá trị, công thức mảng của excel thi khong bị, mò hoài không hiểu tại sao ), còn cài office 2013 chung với Offices 2010 thì code chạy bình thường.
 
Upvote 0
Web KT
Back
Top Bottom