Mình bị kẹt lâu quá về cách tìm dòng cuối ae chỉ giúp mình vì đâu mình sai để mình hiểu đc bản chất của vấn đề. lúc redim nó nhận hết cả mảng mặc dù mảng chỉ có 1 dòng.
Mã:
Sub voisheet1()
Dim lr As Long
Dim arr()
lr = Sheet1.Range("BK").End(xlDown).Row
arr = Sheet1.Range("B2:D" & lr).Value
MsgBox lr
' tai sao dong cuoi cua bang tinh la la dong cuoi cung cua Excel
End Sub
Sub voisheet2()
Dim lr2 As Long
Dim arr2()
lr2 = Sheet2.Range("BangKe").End(xlDown).Row
arr2 = Sheet2.Range("A2:E" & lr2).Value
MsgBox lr2
'dong cuoi lai là 6 ma ko phai là 2
End Sub
Mình bị kẹt lâu quá về cách tìm dòng cuối ae chỉ giúp mình vì đâu mình sai để mình hiểu đc bản chất của vấn đề. lúc redim nó nhận hết cả mảng mặc dù mảng chỉ có 1 dòng.
Mã:
Sub voisheet1()
Dim lr As Long
Dim arr()
lr = Sheet1.Range("BK").End(xlDown).Row
arr = Sheet1.Range("B2:D" & lr).Value
MsgBox lr
' tai sao dong cuoi cua bang tinh la la dong cuoi cung cua Excel
End Sub
Sub voisheet2()
Dim lr2 As Long
Dim arr2()
lr2 = Sheet2.Range("BangKe").End(xlDown).Row
arr2 = Sheet2.Range("A2:E" & lr2).Value
MsgBox lr2
'dong cuoi lai là 6 ma ko phai là 2
End Sub
Sub voisheet1()
Dim lr As Long
Dim arr()
lr = Sheet1.Range("BK").End(xlDown).Row
arr = Sheet1.Range("B2:D" & lr).Value
MsgBox lr
' tai sao dong cuoi cua bang tinh la la dong cuoi cung cua Excel
End Sub
Bạn lấy chuột bấm chọn vùng 'BK'; Sau đó bấm tiếp tổ hợp {CTRL} +{Mũi tên xuống} sẽ thấy ô tới của bạn là ô nào
PHP:
Sub voisheet2()
Dim lr2 As Long
Dim arr2()
lr2 = Sheet2.Range("BangKe").End(xlDown).Row
arr2 = Sheet2.Range("A2:E"& lr2).Value
MsgBox lr2
'dong cuoi lai là 6 ma ko phai là 2
End Sub
Mình bị kẹt lâu quá về cách tìm dòng cuối ae chỉ giúp mình vì đâu mình sai để mình hiểu đc bản chất của vấn đề. lúc redim nó nhận hết cả mảng mặc dù mảng chỉ có 1 dòng.
Mã:
Sub voisheet1()
Dim lr As Long
Dim arr()
lr = Sheet1.Range("BK").End(xlDown).Row
arr = Sheet1.Range("B2:D" & lr).Value
MsgBox lr
' tai sao dong cuoi cua bang tinh la la dong cuoi cung cua Excel
End Sub
Sub voisheet2()
Dim lr2 As Long
Dim arr2()
lr2 = Sheet2.Range("BangKe").End(xlDown).Row
arr2 = Sheet2.Range("A2:E" & lr2).Value
MsgBox lr2
'dong cuoi lai là 6 ma ko phai là 2
End Sub
Mình bị kẹt lâu quá về cách tìm dòng cuối ae chỉ giúp mình vì đâu mình sai để mình hiểu đc bản chất của vấn đề. lúc redim nó nhận hết cả mảng mặc dù mảng chỉ có 1 dòng.
Mã:
Sub voisheet1()
Dim lr As Long
Dim arr()
lr = Sheet1.Range("BK").End(xlDown).Row
arr = Sheet1.Range("B2:D" & lr).Value
MsgBox lr
' tai sao dong cuoi cua bang tinh la la dong cuoi cung cua Excel
End Sub
Sub voisheet2()
Dim lr2 As Long
Dim arr2()
lr2 = Sheet2.Range("BangKe").End(xlDown).Row
arr2 = Sheet2.Range("A2:E" & lr2).Value
MsgBox lr2
'dong cuoi lai là 6 ma ko phai là 2
End Sub
Hix nhờ các bạn giải thích giúp mình. Chứ loanh quanh 1 hồi mình vẫn như lúc mới đăng, thậm chí còn rối rắm hơn.
Mình muốn lấy arr() theo lr nhưng lr luôn luôn sai, khi Redim theo mảng 1 chiều nó luôn nhẩy max dòng excel hoặc max dòng của Bảng đã tạo.
Mã:
Sub voisheet1()
Dim lr As Long
Dim arr()
lr = Sheet1.Range("BK").End(xlDown).Row
arr = Sheet1.Range("B2:D" & lr).Value
Dim arr2()
Dim lr2
ReDim arr2(1 To UBound(arr, 1) * UBound(arr, 2))
lr2 = Sheet3.Cells(Rows.Count, 1).End(xlUp).Row + 1
Dim i, j, k As Integer
For i = 1 To UBound(arr, 1)
For j = 1 To UBound(arr, 2)
k = k + 1
arr2(k) = arr(i, j)
Next j
Next i
Sheet3.Range(lr2, 1).Resize(1, k).Value = arr2
Hix nhờ các bạn giải thích giúp mình. Chứ loanh quanh 1 hồi mình vẫn như lúc mới đăng, thậm chí còn rối rắm hơn.
Mình muốn lấy arr() theo lr nhưng lr luôn luôn sai, khi Redim theo mảng 1 chiều nó luôn nhẩy max dòng excel hoặc max dòng của Bảng đã tạo.View attachment 227523
Mã:
Sub voisheet1()
Dim lr As Long
Dim arr()
lr = Sheet1.Range("BK").End(xlDown).Row
arr = Sheet1.Range("B2:D" & lr).Value
Dim arr2()
Dim lr2
ReDim arr2(1 To UBound(arr, 1) * UBound(arr, 2))
lr2 = Sheet3.Cells(Rows.Count, 1).End(xlUp).Row + 1
Dim i, j, k As Integer
For i = 1 To UBound(arr, 1)
For j = 1 To UBound(arr, 2)
k = k + 1
arr2(k) = arr(i, j)
Next j
Next i
Sheet3.Range(lr2, 1).Resize(1, k).Value = arr2
Bạn muốn lấy trong Vùng hay lấy dòng cuối trong Sheet1
Sheet1.Range("BK").End(xlDown).Row
Vùng BK xlDown dòng dưới không có dữ liệu thì nó phải xuống dòng cuối củng trên bàng tính chứ
Hix nhờ các bạn giải thích giúp mình. Chứ loanh quanh 1 hồi mình vẫn như lúc mới đăng, thậm chí còn rối rắm hơn.
Mình muốn lấy arr() theo lr nhưng lr luôn luôn sai, khi Redim theo mảng 1 chiều nó luôn nhẩy max dòng excel hoặc max dòng của Bảng đã tạo.
Theo mình hiểu thì Ir là tham biến chứa dòng cuối nào đó mà bạn đang cần?
& Tham biến này đang chứa kết quả chưa mong muốn của bạn, chứ gì?
Vậy hãy mô tả bằng lời đi, Ở Sheet1 bạn muốn Ir sẽ phải là dòng nào (1 cách cụ thể nhất, như còng cuối của cột nào?)
& tương tự ở Sheet2:. . . ?
Bạn đang phức tạp hóa tự mình & chưa thể ra khỏi bùng nhùng!
Theo mình hiểu thì Ir là tham biến chứa dòng cuối nào đó mà bạn đang cần?
& Tham biến này đang chứa kết quả chưa mong muốn của bạn, chứ gì?
Vậy hãy mô tả bằng lời đi, Ở Sheet1 bạn muốn Ir sẽ phải là dòng nào (1 cách cụ thể nhất, như còng cuối của cột nào?)
& tương tự ở Sheet2:. . . ?
Bạn đang phức tạp hóa tự mình & chưa thể ra khỏi bùng nhùng!
Tôi muốn lấy dòng cuối trong "BK" để Mảng arr() nó sẽ thay đổi theo lr.
Bạn xem lại ví dụ của tôi. trong file đính kèm. Hiện tại nó hoạt động đc theo ý tôi muốn. nhưng nếu tôi xóa dữ liệu dòng thứ 3 trong excel thì code lại lỗi.
Bản chất của vấn đề vẫn chưa hiểu đc, nên mới phải hỏi để mọi người chỉ giúp, chứ ko làm theo thói quen mà chả hiểu nó vì sao.
Tôi muốn lấy dòng cuối trong "BK" để Mảng arr() nó sẽ thay đổi theo lr.
Bạn xem lại ví dụ của tôi. trong file đính kèm. Hiện tại nó hoạt động đc theo ý tôi muốn. nhưng nếu tôi xóa dữ liệu dòng thứ 3 trong excel thì code lại lỗi.
Bản chất của vấn đề vẫn chưa hiểu đc, nên mới phải hỏi để mọi người chỉ giúp, chứ ko làm theo thói quen mà chả hiểu nó vì sao.
Bạn chạy macro này & tự rút ra kết luận & khoan hãy nhận xét 1 khi chưa rõ ý định của người khác có nhã ý với mình.
PHP:
Sub VoiTrang01()
Dim lr As Long, Dm As Long, Dg As Long
Dim arr()[B7:B789].ClearContents
For Dm =1 To 3
Dg =99-10* Dm
Cells(Dg,"B").Value ="GPE.COM"
lr = Sheet1.Range("BK").End(xlDown).Row
MsgBox lr
Next Dm
End Sub
Tôi xin lỗi, mình nghĩ bạn nhầm ý mình, mình nói mình muốn hiểu chứ ko phải để nó theo thói quen.Mình không có ý xúc phạm ai ở đây cả, bạn có biết trc khi đăng bài tôi cũng phải tìm chán trc khi hỏi. Tôi kẹt ko hiểu khoảng 10 ngày rồi, tôi đọc đi đọc lại trong blog.excel rồi. lúc nó đc lúc nó lại lỗi mà tôi k biết lỗi từ đâu.
Giới thiệu luôn với bạn mình tên Nguyễn Khánh Lộc 35 tuổi, mình đọc VBA của Phan Tự Hướng, tự cày Excel khoảng 2 tháng nay. cái nào kẹt mình search google. xem clip của Gà Excel. Blueshop. vv mây mây, mình tham gia diễn đàn để học ko phải đi chửi lộn. Mình kinh doanh Vật liệu xây dựng. đang tự đọc thêm cả VB.Net nữa mà mông lung quá, VB6 thì nhiều người nói đã quá cũ mặc dù có vẻ dễ tiếp thu.
Tôi xin lỗi, mình nghĩ bạn nhầm ý mình, mình nói mình muốn hiểu chứ ko phải để nó theo thói quen.Mình không có ý xúc phạm ai ở đây cả, bạn có biết trc khi đăng bài tôi cũng phải tìm chán trc khi hỏi. Tôi kẹt ko hiểu khoảng 10 ngày rồi, tôi đọc đi đọc lại trong blog.excel rồi. lúc nó đc lúc nó lại lỗi mà tôi k biết lỗi từ đâu.
Giới thiệu luôn với bạn mình tên Nguyễn Khánh Lộc 35 tuổi, mình đọc VBA của Phan Tự Hướng, tự cày Excel khoảng 2 tháng nay. cái nào kẹt mình search google. xem clip của Gà Excel. Blueshop. vv mây mây, mình tham gia diễn đàn để học ko phải đi chửi lộn. Mình kinh doanh Vật liệu xây dựng. đang tự đọc thêm cả VB.Net nữa mà mông lung quá, VB6 thì nhiều người nói đã quá cũ mặc dù có vẻ dễ tiếp thu.
- Nếu Range là 1 ô thì "ô xuất phát" sẽ là ô ở cùng cột với Range và dưới 1 dòng. Tức ô dưới ô Range. Nếu Range là vùng nhiều cột / hoặc (và) nhiều dòng thì "ô xuất phát" là ô ở dưới ô nằm ở dòng 1 và cột 1 của vùng. Tức ô ở dưới ô nằm ở góc trên bên trái của vùng.
- từ "ô xuất phát" đi xuống cho tới khi gặp ô ĐẦU TIÊN KHÁC RỖNG MÀ SAU NÓ LÀ Ô RỖNG, và trả về chỉ số dòng của ô này. Nếu đi tới dòng cuối cùng của trang tính mà không gặp ô KHÁC RỖNG MÀ SAU NÓ LÀ Ô RỖNG thì trả về chỉ số của dòng cuối cùng trong trang tính. Tức 1048576 trong Excel >= 2007.
thì "ô xuất phát" là B3 (ô ở góc trên bên trái là B2).
- Trong trường hợp 1 B3 = Rubi và dưới nó là ô rỗng. B3 thỏa điều kiện là ô ĐẦU TIÊN KHÁC RỖNG MÀ SAU NÓ LÀ Ô RỖNG, vậy trả về chỉ số dòng của B3 là 3.
- Trong trường hợp 2 B3 = rỗng, và dưới B3 không có ô nào khác rỗng nên đi tới dòng cuối cùng của trang tính không có ô nào thỏa điều kiện là ô ĐẦU TIÊN KHÁC RỖNG MÀ SAU NÓ LÀ Ô RỖNG. Vậy trả về 1048576.
Lưu ý:
Nếu dữ liệu của bạn có những dòng trống, tức dữ liệu không liên tục, mà bạn muốn lấy dòng cuối cùng có dữ liệu thì bạn không dùng xlDown được. Vd. B3 = Rubi, B4 rỗng, B5 = hichic. Nếu bạn muốn lấy kết quả 5 thì không dùng xlDown được. Vì xlDown trả về 3. Vì sao? Vì chỉ có B3 thỏa điều kiện là ô ĐẦU TIÊN KHÁC RỖNG MÀ SAU NÓ LÀ Ô RỖNG. Ô B5 cũng thỏa điều kiện KHÁC RỖNG MÀ SAU NÓ LÀ Ô RỖNG nhưng không là ô ĐẦU TIÊN như thế. Ô B3 là ô ĐẦU TIÊN thỏa điều kiện KHÁC RỖNG MÀ SAU NÓ LÀ Ô RỖNG.
------------
Trong trường hợp dữ liệu không liên tục, tức có dòng trống xen kẽ thì để lấy dòng cuối cùng có dữ liệu bạn phải dùng xlUp như sau:
Mã:
lr = Sheet1.Range("B1000").End(xlUp).Row
Nhưng nếu có hơn 1000 dòng dữ liệu thì tèo. Có thể thay bằng 10000, 100000, nhưng tốt nhất là
Mã:
lr = Sheet1.Range("B" & Rows.Count).End(xlUp).Row
hoặc
lr = Sheet1.Cells(Rows.Count, "B").End(xlUp).Row
-----
Nếu dữ liệu của bạn nằm trong bảng (Table) thì cả xlDown và xlUp đều có thể trả về không chính xác. Vì với xlDown hay xlUp luôn trả về dòng cuối cùng của bảng cho dù bảng có hay không có dữ liệu. Thử như sau: nhập dữ liệu trong bảng, vd. Table1, cho tới dòng 20. Tiếp theo xóa hết dữ liệu. Sau cùng chạy code. Dù với xlDown hay xlUp thì kết quả là 20 cho dù Table1 đã không còn dữ liệu.
Sub hocdot()
Dim lr As Long
Dim arr()
lr = Sheet1.Range("BK").Rows(Sheet1.Range("BK").Rows.Count + 1).End(xlUp).Row
If lr < Sheet1.Range("BK").Rows(1).Row Then Exit Sub
arr = Sheet1.Range("B2:D" & lr).Value
lr2 = Sheets("Data").Cells(Sheets("Data").Rows.Count, 1).End(xlUp).Row + 1
Sheets("data").Cells(lr2, 1).Resize(UBound(arr, 1), UBound(arr, 2)) = arr
End Sub
Cảm ơn các bạn và đặc biệt là bạn, sáng mình đã đưa Cả tiêu đề vào trong Table và đều cho kết quả ngay từ dòng minh cần lấy dữ liệu.
Mình cần xldown vì mình thấy khi arr() của mình chuyển sang Sheets khác nó đếm đủ số Mảng 1 chiều mình cần.