Nhờ viết code tìm số cột có dữ liệu (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

langtuchungtinh360

Thành viên đã dừng hoạt động
Tham gia
7/10/13
Bài viết
1,062
Được thích
334
Mọi người viết hộ mình code xác định được cột cuối cùng có dữ liệu được không
mình có tìm được code thế này
Mã:
[COLOR=#000000]Lc = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column[/COLOR]
nhưng khi áp dụng vào file của mình thì chạy chậm vô cùng
http://www.mediafire.com/download/f92xs5r3xrkgi28/HoSoKCS+CKGTB+16-10-15.rar
Trên thanh Ribbon/Hồ sơ KCS/Tiện ích/Trang2 <=code nằm tại aGroupTienich/Sub Trang2Bt()
khi nhấn F8 để chạy từng dòng thì tại dòng
Mã:
[COLOR=#000000]Lc = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column[/COLOR]

chạy rất lâu
trong khi code
Mã:
[COLOR=#000000]Lr = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).[/COLOR][COLOR=#000000]Row[/COLOR]
1 phát là xong

mình cần code có thể trả về số cột cứ không phải địa chỉ của cột cuối cùng
ví dụ
dữ liệu xuất hiện ở cột I là hết thì trả về là số 9 tương ứng với cột I trong tham chiếu R1C1
 
1. Dữ liệu nằm ở cột I
2. Liệu bạn có biết trước là nằm ở dòng nào không? Vì khi xây dựng dữ liệu thì ng thường thiết kế trường tiêu đề là nhiều nhất (có thể bản ghi không có dữ liệu)

Nếu giả sử dòng tiêu đề bạn làm từ dòng 5. Thì code đơn giản như sau:

Mã:
Lc = [IV5].End(xlLeft).Column

P/s: tôi nhớ mang mang cột cuối cùng trong cel 2003 là IV. Ko có máy tính mong bạn thông cảm.
 
Upvote 0
1. Dữ liệu nằm ở cột I
2. Liệu bạn có biết trước là nằm ở dòng nào không? Vì khi xây dựng dữ liệu thì ng thường thiết kế trường tiêu đề là nhiều nhất (có thể bản ghi không có dữ liệu)

Nếu giả sử dòng tiêu đề bạn làm từ dòng 5. Thì code đơn giản như sau:

Mã:
Lc = [IV5].End(xlLeft).Column

P/s: tôi nhớ mang mang cột cuối cùng trong cel 2003 là IV. Ko có máy tính mong bạn thông cảm.
không biết dữ liệu nằm ở cột nào chả thầy ạ
em tính làm add in chỉnh trang để thao tác nhanh lúc làm biên bản thầy ạ
trang 1 là em định dạng khổ giấy dọc và số cột cố định 27 cột
còn trang 2 em định dạng khổ giấy ngang
số cột không cố định.
có biên bản thì tầm 10 cột
có biên bản thì 12 cột
em có tìm được code chọn được vùng có dữ liệu nhưng không biết chỉnh sửa thế nào
#21
http://www.giaiphapexcel.com/forum/showthread.php?22175-Lấy-địa-chỉ-ô-đầu-ô-cuối-vùng-dữ-liệu/page3
cụ thể em có nêu trong file đính kèm.
 

File đính kèm

Upvote 0
Dùng usedrange xem sao.
Thử code này cho sheet2
Mã:
Public Sub vd()
Dim dong, cot
With Sheet2
dong = .UsedRange.Rows.Count
cot = .UsedRange.Columns.Count
.Cells(dong, cot).Select
End With
End Sub
 
Upvote 0
Dùng usedrange xem sao.
Thử code này cho sheet2
Mã:
Public Sub vd()
Dim dong, cot
With Sheet2
dong = .UsedRange.Rows.Count
cot = .UsedRange.Columns.Count
.Cells(dong, cot).Select
End With
End Sub
cảm ơn bác. áp dụng vào file tại #1 thì ra sai bác à. dòng với cột ra số sai
 
Upvote 0
cảm ơn bác. áp dụng vào file tại #1 thì ra sai bác à. dòng với cột ra số sai
Cụ thể như sheet "NTBT" thì kết quả yêu cầu là cột nào
---
Bạn thử code này cho sheet "NTBT" xem có khả thi không

Mã:
Public Sub vd()
Dim dong, cot, Cll As Range
With Sheets("NTBT")
For Each Cll In .UsedRange.SpecialCells(xlCellTypeConstants)
If cot < Cll.Column Then cot = Cll.Column
If dong < Cll.Row Then dong = Cll.Row
Next Cll
.Cells(dong, cot).Select
End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Cụ thể như sheet "NTBT" thì kết quả yêu cầu là cột nào
---
Bạn thử code này cho sheet "NTBT" xem có khả thi không

Mã:
Public Sub vd()
Dim dong, cot, Cll As Range
With Sheets("NTBT")
For Each Cll In .UsedRange.SpecialCells(xlCellTypeConstants)
If cot < Cll.Column Then cot = Cll.Column
If dong < Cll.Row Then dong = Cll.Row
Next Cll
.Cells(dong, cot).Select
End With
End Sub
cảm ơn bác nhiều. vẫn không đạt theo yêu cầu bác à
thôi thì thế này
đếm số ô có dữ liệu tại dòng 49 thì thế nào bác.
------------------------------------------------------
đành xử dụng cách cùi bắp này vậy (chả tìm đc cách tổng quát)
LastCol = ActiveSheet.Cells(49, ActiveSheet.Columns.Count).End(xlToLeft).Column
 
Lần chỉnh sửa cuối:
Upvote 0
cảm ơn bác nhiều. vẫn không đạt theo yêu cầu bác à
thôi thì thế này
đếm số ô có dữ liệu tại dòng 49 thì thế nào bác.
------------------------------------------------------
đành xử dụng cách cùi bắp này vậy (chả tìm đc cách tổng quát)
LastCol = ActiveSheet.Cells(49, ActiveSheet.Columns.Count).End(xlToLeft).Column

Dòng 49, sheet NTBT cột cuối cùng là cột N, nhưng nếu chạy code của bài trước sẽ nhảy tới cột W.
Nguyên nhân ở đây là do các dòng từ 1 - 10 bạn đã merge cell tới cột W, vì vậy code sẽ tìm cột cuối là W
Nếu tháo bỏ merge cell từ dòng 1-10 và chạy code sẽ thấy cột cuối là N là kết quả đúng.
Nếu merge cell tới cột N, tức là chỉ định dạng trong vùng dữ liệu thì đâu sẽ vào đó.

Việc format có lẽ cũng nên phù hợp với dữ liệu bảng tính sẽ thuận tiện cho nhiều việc.
Thân chào
 
Upvote 0
Web KT

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

Back
Top Bottom