Thay dòng cuối i trong Arr = Range([I12], [I65536].End(4))

Liên hệ QC

AnhThu-1976

Thành viên tích cực
Tham gia
17/10/14
Bài viết
1,058
Được thích
170
Em chào các Thầy, cô & anh chị
Em có
Mã:
Arr = Range([I12], [I65536].End(4))
bây giờ em đã xác định được dòng cuối là
Mã:
Dim Rng As Range, i As Long
    Set Rng = ActiveSheet.UsedRange
    i = Cells.Find("*", Rng(1, 1), , , xlByRows, xlPrevious).Row
Bây giờ em muốn thay 65536 là i thì
Mã:
Arr = Range([I12], [I65536].End(4))
sẽ được sửa như thế nào. Em cảm ơn!
 
Em chào các Thầy, cô & anh chị
Em có
Mã:
Arr = Range([I12], [I65536].End(4))
bây giờ em đã xác định được dòng cuối là
Mã:
Dim Rng As Range, i As Long
    Set Rng = ActiveSheet.UsedRange
    i = Cells.Find("*", Rng(1, 1), , , xlByRows, xlPrevious).Row
Bây giờ em muốn thay 65536 là i thì
Mã:
Arr = Range([I12], [I65536].End(4))
sẽ được sửa như thế nào. Em cảm ơn!
Arr= Range("I12:I"& i).value

ps:
Tại sao lại là End(4), mình nghĩ chắc là End(3)
1 qua trái, 2 qua phải, 3 từ dưới lên, 4 từ trên xuống
 
Upvote 0
Range([I12], [I65536].End(4))
Bỏ kiểu viết [ ... ] đó đi. Nhìn phát ngán.

Thống nhất gọi tới Range thì cứ bắt đầu là chữ Range, kế đó là chuỗi địa chỉ trên bảng tính - được xác định bằng thao tác như sau:
Gõ dấu =, rồi quét chuột một vùng cần lấy (vài cell mẫu cũng được rồi chỉnh lại sau). Ví dụ =A1: D4
Chép khúc A1: D4 vào là được.
Range("A1: D4")

Từ khúc chuẩn chỉ kia muốn biến đổi thế nào cũng rất dễ dàng, dễ hiểu, tự làm được, không phải théc méc hỏi ai sứt.
 
Upvote 0
Code trong bài #1 là dạng code thông dụng của GPE trên 5 năm về trước.
Dấu ngoặc vuông là lối viết tắt của hàm Evaluate (*1), chỉ khác rằng bên trong dấu ngoặc bắt buộc phải là hằng thuần (literal). Hàm evaluate ở dạng này sẽ theo đúng tinh thần Excel, cứ thấy cái gì có dạng giống địa chỉ ô thì nó cho là range, và trả về range đó.

Lối code này ngày xưa rất phổ biến trênn GPE vì trông nó gọn và "chuyên nghiệp". Về sau này ít dùng hơn vì dân code nhận ra rằng nó không dễ debug và chỉnh sửa. Tôi chưa tìm ra nguyên do tại sao dân GPE trọng tốc độ lại không ngần ngại dùng evaluate, ai cũng biết [A1] chậm hơn Range("A1").

Trả lời cho thớt:
[địa chỉ ô] nên thay bằng Cells(số dòng, số hoặc tên cột)
Như vậy:
Arr = Range([I12], [I65536].End(4))
sẽ thay bằng:
Arr = Range(Cells(12, "I"), Cells([65536, "I").End(4))
Và lúc ấy, muốn thay 65536 bằng cái gì thì thay.

(*1) viết tắt không có nghĩa là đi tắt (trình dịch không hề bảo đảm dịch nhanh, code không hề bảo đảm chạy ít)
 
Upvote 0
Híc hỏi từ đầu thì có nhiều người nói " Có đầy trên mạng, tìm đi"
Trên mạng có ít lắm. Một trong những cách chỉnh chính thống tôi đã dẫn cho ở bài trên.
Đây là kinh nghiệm lập trình vài chục năm. Những gì không thấy rõ lợi trước mắt thì nó cũng là lợi lâu dài.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom