Nhờ anh chị viết Code thay thế code Xlookup

Liên hệ QC
Tham gia
30/7/06
Bài viết
370
Được thích
360
Nghề nghiệp
GTVT
1. File copy sang máy khác hàm Xlookup không chạy được
2. Hàm load hơi nặng
Do vậy nhờ anh chị viết giúp Code tự đông lấy dữ liệu từ 02 sheet vào 1 Sheet
Vậy nhờ anh chị hỗ trợ viết giúp Code để thay Code Xlookup
 

File đính kèm

  • Danh sách phù hiệu (T10) VBA_Xlookup (hoi).xlsm
    820.5 KB · Đọc: 13
Mình vòng vo 1 chút, bạn kiểm trong file, sau khi thấy dữ liệu OK ta tiếp tục xíu nữa!
 

File đính kèm

  • Array.rar
    675.7 KB · Đọc: 16
Copy cái ni & chép đè lên macro cũ & kiểm lại lần chót, nha!
PHP:
Sub TongHopDuLieu()
 Dim Rws As Long, J As Long, W As Long, Tmr As Double, jJ As Long
 Dim Arr()
 
 Sheets("DuLieu").Select
 Rws = [f5].CurrentRegion.Rows.Count:   Tmr = Timer()
 Arr() = [E5].Resize(Rws, 4).Value:     ReDim aKQ(1 To Rws, 1 To 7)
 
 For J = 1 To UBound(Arr())
    W = W + 1:                          aKQ(W, 1) = W
    aKQ(W, 2) = Arr(J, 2):              aKQ(W, 4) = Arr(J, 4)
    aKQ(W, 7) = Arr(J, 1)
 Next J
 Sheets("TB_GSHT").Select:      W = 0
 Rws = [B5].CurrentRegion.Rows.Count
 Arr() = [B5].Resize(Rws, 6).Value
 ReDim aRes(1 To UBound(Arr()), 1 To 3)
 For J = 1 To UBound(aKQ())   'Bien Kiêm Soát (2)   '
    W = W + 1
    For jJ = 1 To UBound(Arr())
        If aKQ(J, 2) = Arr(jJ, 1) Then
            aKQ(J, 3) = Arr(jJ, 3):     aKQ(J, 5) = Arr(jJ, 5)
            aKQ(J, 6) = Arr(jJ, 6)
            Exit For
        End If
    Next jJ
 Next J
 With Sheets("Data")
    .[A5].Resize(2 * W, 7).Value = ""
    .[A5].Resize(W, 7).Value = aKQ()
    .[O9999].End(xlUp).Offset(1).Value = Timer() - Tmr
    .Select
 End With
End Sub
 
Em chân thành cám ơn anh nhiều Code chạy rất nhanh và chính xác
 
1. . . . . .
2. Hàm load hơi nặng
. . . . . . .

Mục 2 này cũng có thể do thiết kế trang tính của bạn chưa tối ưu; Mình xin vài ví dụ sau:

(1) Tại trang 'DuLieu' có 1 cột/trường hoàn toàn chỉ 1 thông tin duy nhất (cột C); Theo mình cột này có cách bớt đi

(1.1) Cũng ở trang này bạn có trường 'Phù Hiệu' chứa tên các loại phương tiện;
Nếu là mình thì mình sẽ đưa vô danh mục gồm mã PH như ví dụ trong bảng dưới đây:

Phù hiệu
HD_Xe Hợp đồng
339​
TaxXe Taxi
390​
TaiXe Tải
1752​
DK_Xe Đầu kéo
450​
ConXe Container
100​
CD_Xe chạy tuyến cố định
246​
BytXe Buýt
25​
XTCXe Trung chuyển
1​
XDLXe Du lịch
53​

Làm vậy sẽ gọn gàng lại CSDL của bạn (bằng cách xài mã của danh mục thay vì tên danh mục)
Tương tự như vậy với trường 'Hiệu lực' ta nên xài 'Yes/No'
(2.) Bạn xài tên quá dài; Người ta có thể viết tắc các cụm từ thông dụng như CTi (thay cho 'Công ty'; TNHH thay cho 'Trách nhiệm hữu hạn',. . . . . . .
Nếu bạn chịu khó thêm thì file sẽ nhẹ & mượt thêm hơn!

& chúc vui nha!
 
Dạ không anh ạ 02 Sheet gồm "Dulieu" và "TB_GSHT" là xuất từ phần mềm ra, nên em để nguyên định dạng file đó anh
Bài đã được tự động gộp:

Copy cái ni & chép đè lên macro cũ & kiểm lại lần chót, nha!
PHP:
Sub TongHopDuLieu()
 Dim Rws As Long, J As Long, W As Long, Tmr As Double, jJ As Long
 Dim Arr()
 
 Sheets("DuLieu").Select
 Rws = [f5].CurrentRegion.Rows.Count:   Tmr = Timer()
 Arr() = [E5].Resize(Rws, 4).Value:     ReDim aKQ(1 To Rws, 1 To 7)
 
 For J = 1 To UBound(Arr())
    W = W + 1:                          aKQ(W, 1) = W
    aKQ(W, 2) = Arr(J, 2):              aKQ(W, 4) = Arr(J, 4)
    aKQ(W, 7) = Arr(J, 1)
 Next J
 Sheets("TB_GSHT").Select:      W = 0
 Rws = [B5].CurrentRegion.Rows.Count
 Arr() = [B5].Resize(Rws, 6).Value
 ReDim aRes(1 To UBound(Arr()), 1 To 3)
 For J = 1 To UBound(aKQ())   'Bien Kiêm Soát (2)   '
    W = W + 1
    For jJ = 1 To UBound(Arr())
        If aKQ(J, 2) = Arr(jJ, 1) Then
            aKQ(J, 3) = Arr(jJ, 3):     aKQ(J, 5) = Arr(jJ, 5)
            aKQ(J, 6) = Arr(jJ, 6)
            Exit For
        End If
    Next jJ
 Next J
 With Sheets("Data")
    .[A5].Resize(2 * W, 7).Value = ""
    .[A5].Resize(W, 7).Value = aKQ()
    .[O9999].End(xlUp).Offset(1).Value = Timer() - Tmr
    .Select
 End With
End Sub
Nhờ bác xem tiếp giúp em dùng hàm Xlookop và Vlookup đối sánh thấy dữ liệu có khác. Nhơ bác giúp tiếp ạ
 

File đính kèm

  • DS_TH.xlsm
    1.1 MB · Đọc: 4
Lần chỉnh sửa cuối:
Dạ không anh ạ (1) 02 Sheet gồm "Dulieu" và "TB_GSHT" là xuất từ phần mềm ra, nên em để nguyên định dạng file đó anh
(2)Nhờ bác xem tiếp giúp em dùng hàm Xlookop và Vlookup đối sánh thấy dữ liệu có khác
Người viết phần mềm đã chưa chú í đến vì 1 hay vài lý do nào đó , thì bạn cứ để vậy ư?
Cái tối thiểu mà bạn có thể làm ngay là:
(1) Cụm từ "Sở Giao thông Vận tải Quảng Bình" bạn có thể thay ngày & toàn bộ bỡi 'SGT QB'
(Thử ngay đi xem file giảm được bao nhiêu K!)
(1.1) Thay thử tiếp 'Yes/No' xem giảm bao nhiêu.
(1.2) Thay thử Mã PH cho 'Phù hiệu', . . . . .
[Chắc bạn dư khả năng tạo ra macro này chứ nhỉ,. . . .?]

(2) Cần gì phải Vlookup() hay XLooKup(); Cứ phương thức FIND() cũng thấy ngay kết quả & tự trả lời rồi, rõ chán!
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom