Vba index và match nhiều dữ kiện

Liên hệ QC

sky007

Thành viên mới
Tham gia
15/12/11
Bài viết
6
Được thích
0
Em mới học làm vba.viết chương trình thấy ko báo lỗi nhưng sao nó ko hiện ra kết quả vây. Anh chị chỉ hộ e với ạ.e cám ơn nhiều
 

File đính kèm

  • 1.xlsm
    22.2 KB · Đọc: 8

File đính kèm

  • 22.xlsm
    24.1 KB · Đọc: 13
Upvote 0
Cám ơn bác đã tư vấn.nhưng bác hiểu sai ý e.lệnh của bác là lệnh copy.ko đúng mục đích e sử dụng.
 
Upvote 0
Ủa.em nói sai điều gì à
Bạn chat chit quen rồi nên viết không đúng tục lệ của dân GPE.
ạ.e , e.lệnh , cope.ko là kiểu viết rất rất sai tiếng Việt.
1. Em là em chứ không e
2. Không là không chứ không ko
3. Chấm câu xong phải cách ra 1 khoảng trắng và viết hoa chữ cái đầu tiên.
 
Upvote 0
Ủa.em nói sai điều gì à
Muốn học lập trình thì bỏ cái thói viết tắt. Có ba lý do:
1. Từ viết tắt chỉ dùng để đặt tên biến.
2. Từ ngữ viết tắt buộc người trả lời phải đoán. Bạn nghĩ là thôg dụng, dễ đoán, những chưa chắc người khác đã thấy nó là thông dụng.
3. Người viết tắt thường có tính hời hợt, cẩu thả. Chịu khó tập viết từ ngữ kỹ lưỡng sẽ giúp cho việc giải bài dễ hơn.
 
Upvote 0
Vâng lần sau em rút kinh nghiệm. Các bác hộ em đoạn code xem em bị lỗi gì với ạ
 
Lần chỉnh sửa cuối:
Upvote 0
Không có kết quả gì vì code trong vòng FOR bị lỗi. Bạn bỏ dòng On Error Resume Next thì sẽ thấy lỗi ở dòng
Mã:
wsVO.Cells(x, y) = WorksheetFunction.Index(SourceRange, _
WorksheetFunction.Match(wsVO.Cells(x, 1) & wsVO.Cells(x, 2), WorksheetFunction.Index(LookRange1 & LookRange2, 0), 0), 3)

Tôi hiểu là bạn muốn dùng WorksheetFunction.Index(LookRange1 & LookRange2, 0) để tạo bảng dò cho MATCH. Có lẽ VBA không cho phép kiểu đó đâu. Tức bạn không thể bắt chước cách làm trên sheet.

Bạn nên tạo một bảng dò từ 2 cột A và E.

Bạn có
Mã:
Set SourceRange = wsD.Range("A:E")
Set LookRange1 = wsD.Range("A:A")
Set LookRange2 = wsD.Range("e:e")

Đây là thói quen rất xấu. Trên sheet và cả trong VBA không bao giờ tham chiếu cả cột. Hãy lấy đủ lớn, thậm chí 100 000 dòng chứ không phải hàng triệu dòng. Nếu ông thầy nào dậy thế thì bỏ ngay ông thầy đó.

Code trong vòng FOR sai
wsVO.Cells(x, y) = WorksheetFunction.Index(SourceRange, _
WorksheetFunction.Match(wsVO.Cells(x, 1) & wsVO.Cells(x, 2), WorksheetFunction.Index(LookRange1 & LookRange2, 0), 0), 3)

Tức cả 3 cột kết quả cho y = 3, 4, 5 đều lấy từ cột 3 (cột C - Designation) của sheet Data. Đúng thì phải là lấy lần lượt từ cột D, B, C
 
Upvote 0
Không có kết quả gì vì code trong vòng FOR bị lỗi. Bạn bỏ dòng On Error Resume Next thì sẽ thấy lỗi ở dòng
Mã:
wsVO.Cells(x, y) = WorksheetFunction.Index(SourceRange, _
WorksheetFunction.Match(wsVO.Cells(x, 1) & wsVO.Cells(x, 2), WorksheetFunction.Index(LookRange1 & LookRange2, 0), 0), 3)

Tôi hiểu là bạn muốn dùng WorksheetFunction.Index(LookRange1 & LookRange2, 0) để tạo bảng dò cho MATCH. Có lẽ VBA không cho phép kiểu đó đâu. Tức bạn không thể bắt chước cách làm trên sheet.

Bạn nên tạo một bảng dò từ 2 cột A và E.

Bạn có
Mã:
Set SourceRange = wsD.Range("A:E")
Set LookRange1 = wsD.Range("A:A")
Set LookRange2 = wsD.Range("e:e")

Đây là thói quen rất xấu. Trên sheet và cả trong VBA không bao giờ tham chiếu cả cột. Hãy lấy đủ lớn, thậm chí 100 000 dòng chứ không phải hàng triệu dòng. Nếu ông thầy nào dậy thế thì bỏ ngay ông thầy đó.

Code trong vòng FOR sai


Tức cả 3 cột kết quả cho y = 3, 4, 5 đều lấy từ cột 3 (cột C - Designation) của sheet Data. Đúng thì phải là lấy lần lượt từ cột D, B, C
Em làm được rồi thay đổi thuật toán. Em cám ơn bác đã tư vấn giúp em. Cái này e tự học để làm việc nên các ý kiến của bác đã giúp e hiểu rất nhiều
 
Upvote 0
Web KT

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

Back
Top Bottom