Hàm Vlookup không chạy ?

Liên hệ QC

Nguyen Rem

Tất cả chỉ là đưa ra quyết định đúng đắn
Tham gia
23/2/22
Bài viết
211
Được thích
30
Giới tính
Nữ
Em chào các anh chị ^^ . Vẫn là cái file revenue nhưng em lại có một số chỗ khúc mắc sau muốn nhờ các anh chị giải đáp giúp em.
Hiện tại ý tưởng của em là muốn tìm ra
1. Thành phố có thu nhập lớn nhất rồi in ra ô D2
2. Thành phố có lượng khách lớn nhất rồi in ra ô D3
3. Thành phố có doanh thu trung bình trên một khách hàng lớn nhất rồi in ra ô D4

CÂU HỎI 1
Lúc đầu em định làm theo kiểu Vlookup nhưng không biết tại sao "nó" lỗi (Sub Test7). Các anh chị xem giải thích cho em tại sao nó lỗi và sửa nó giúp em
1652329981180.png


CÂU HỎI 2
Lúc sau do sửa mãi không được nên em chuyển qua dùng for each :> . Nhưng đến câu 3 em không biết làm thế nào nữa . Anh chị giúp em viết nốt câu số 3 cho em , cũng dùng vòng lặp và không dùng hàm
1652329765735.png

CÂU HỎI 3
Hmm còn một số cái nữa . Do hôm qua em chưa có thời gian đọc bài về dic và mảng để tăng tốc chạy code nên em dùng tạm hàm
sumif để tính cái vụ tính tổng theo lương và khách hàng nó như sau:

1652330681799.png


Nhưng sau khi đổi định dạng bằng tay tất cả các cột của city như hình sau:
1652330959619.png
Em chạy lại Sub Sumrevenue2() thì nó bị ra thế này:
1652331032104.png
Vậy lỗi này do đâu và cách khắc phục nó thế nào ?
Mong các anh chị giúp em .
Lần này do nhiều câu hỏi nên em gộp chung hết vào nên nó có thể dài , mong anh chị thông cảm :> . Em cảm ơn anh chị nhiều lắm <3
 

File đính kèm

  • revdata.xlsm
    1 MB · Đọc: 11
Lần chỉnh sửa cuối:
Mình thấy bạn nên có thói quen khai báo trực tiếp sheet nào của vùng luôn và không dùng "*.Select" nếu không cần thiết, thay vì ghi .Worksheets("rev") ... thì bạn có thể ghi thẳng Sheets("rev") hoặc sheets1

Còn các lỗi của bạn ở Module5 sub Sumrevenue2() và Test7() mình đã sửa lại và ghi chú ra lỗi sai trong file đính kèm rồi
 

File đính kèm

  • revdata.xlsm
    1 MB · Đọc: 6
Upvote 0
Mình thấy bạn nên có thói quen khai báo trực tiếp sheet nào của vùng luôn và không dùng "*.Select" nếu không cần thiết, thay vì ghi .Worksheets("rev") ... thì bạn có thể ghi thẳng Sheets("rev") hoặc sheets1

Còn các lỗi của bạn ở Module5 sub Sumrevenue2() và Test7() mình đã sửa lại và ghi chú ra lỗi sai trong file đính kèm rồi
Em cảm ơn anh nhiều ^^ . Em đã xem file của anh gửi rồi ạ .
Do bài viết này nhiều câu hỏi nên em có sắp xếp lại bố cục bài viết của mình như ở trên ạ . Và sẽ cập nhật những câu hỏi chưa được trả lời thường xuyên ạ ^^
Bài viết viết của anh johnylinhanh nêu ra lỗi của CÂU HỎI 1 . Thực hiện CÂU HỎI 2 bằng cách dùng hàm.
Những vấn đề chưa được giải đáp:
1. CÂU HỎI 3
2. CÂU HỎI 2 nhưng theo cách không dùng hàm để xử lý (cái này em yêu cầu có vẻ hơi quá đáng nhưng mà em nghĩ nó cần thiết ^^ )
 
Upvote 0
Em chào các anh chị ^^ . Vẫn là cái file revenue nhưng em lại có một số chỗ khúc mắc sau muốn nhờ các anh chị giải đáp giúp em.
Hiện tại ý tưởng của em là muốn tìm ra
1. Thành phố có thu nhập lớn nhất rồi in ra ô D2
2. Thành phố có lượng khách lớn nhất rồi in ra ô D3
3. Thành phố có doanh thu trung bình trên một khách hàng lớn nhất rồi in ra ô D4

CÂU HỎI 1
Lúc đầu em định làm theo kiểu Vlookup nhưng không biết tại sao "nó" lỗi (Sub Test7). Các anh chị xem giải thích cho em tại sao nó lỗi và sửa nó giúp em
View attachment 275836


CÂU HỎI 2
Lúc sau do sửa mãi không được nên em chuyển qua dùng for each :> . Nhưng đến câu 3 em không biết làm thế nào nữa . Anh chị giúp em viết nốt câu số 3 cho em , cũng dùng vòng lặp và không dùng hàm
View attachment 275835

CÂU HỎI 3
Hmm còn một số cái nữa . Do hôm qua em chưa có thời gian đọc bài về dic và mảng để tăng tốc chạy code nên em dùng tạm hàm
sumif để tính cái vụ tính tổng theo lương và khách hàng nó như sau:

View attachment 275838


Nhưng sau khi đổi định dạng bằng tay tất cả các cột của city như hình sau:
View attachment 275840
Em chạy lại Sub Sumrevenue2() thì nó bị ra thế này:
View attachment 275841
Vậy lỗi này do đâu và cách khắc phục nó thế nào ?
Mong các anh chị giúp em .
Lần này do nhiều câu hỏi nên em gộp chung hết vào nên nó có thể dài , mong anh chị thông cảm :> . Em cảm ơn anh chị nhiều lắm <3
Thử bằng code khác xem có ra kết quả đúng không ...?!...
 

File đính kèm

  • revdata11.xlsm
    699.7 KB · Đọc: 9
Upvote 0
Em cảm ơn anh nhiều ^^ . Em đã xem file của anh gửi rồi ạ .
Do bài viết này nhiều câu hỏi nên em có sắp xếp lại bố cục bài viết của mình như ở trên ạ . Và sẽ cập nhật những câu hỏi chưa được trả lời thường xuyên ạ ^^
Bài viết viết của anh johnylinhanh nêu ra lỗi của CÂU HỎI 1 . Thực hiện CÂU HỎI 2 bằng cách dùng hàm.
Những vấn đề chưa được giải đáp:
1. CÂU HỎI 3
2. CÂU HỎI 2 nhưng theo cách không dùng hàm để xử lý (cái này em yêu cầu có vẻ hơi quá đáng nhưng mà em nghĩ nó cần thiết ^^ )
Câu 3 mình có add thêm trong Sub Test7() rồi thây bạn kiểm tra kỹ xem đúng ô D4 là Tokyo không nhé
Theo cách không dùng hàm thì dùng ADO mà làm, chứ dùng vòng lặp như bạn ngồi đếm từng giây mệt mỏi lắm à
 
Upvote 0
Thử bằng code khác xem có ra kết quả đúng không ...?!...
owa :))) Nhìn code của anh kiểu giống hệt cú pháp SQL Server ấy nhưng mà nghe vẻ nó không đúng trọng tâm câu hỏi em đặt ra lắm anh nhỉ :>
Nhưng mà cho em hỏi là học những chủ đề gì trong VBA để viết được giống anh vậy ạ
Bài đã được tự động gộp:

Câu 3 mình có add thêm trong Sub Test7() rồi thây bạn kiểm tra kỹ xem đúng ô D4 là Tokyo không nhé
Theo cách không dùng hàm thì dùng ADO mà làm, chứ dùng vòng lặp như bạn ngồi đếm từng giây mệt mỏi lắm à
À vâng em biết ạ ^^ Nhưng mà câu hỏi của em là code cũ của em nó có vấn đề gì mà khi chỉnh định dạng của các cột city thì nó lại bị lỗi như hình bên dưới vậy anh
Với ADO em nghe tên lạ quá ^^
1652342480418.png
 
Lần chỉnh sửa cuối:
Upvote 0
owa :))) Nhìn code của anh kiểu giống hệt cú pháp SQL Server ấy nhưng mà nghe vẻ nó không đúng trọng tâm câu hỏi em đặt ra lắm anh nhỉ :>
Nhưng mà cho em hỏi là học những chủ đề gì trong VBA để viết được giống anh vậy ạ
Bài đã được tự động gộp:


À vâng em biết ạ ^^ Nhưng mà câu hỏi của em là code cũ của em nó có vấn đề gì mà khi chỉnh định dạng của các cột city thì nó lại bị lỗi như hình bên dưới vậy anh
Với ADO em nghe tên lạ quá ^^
View attachment 275856
1. ADO là cách của bài #6 đang làm
2. Mình chỉ ra rõ rồi sở dĩ tính sai do bạn khai báo range mà không khai báo sheet nên bị sai (màu vàng trên hình)
ở đây nó sẽ quét sheet đang active tức sheet ucity và bằng 6. Mình có thêm dòng "A1.Offset(0, 9).Interior.Color = vbYellow" để tô màu phạm vi code đang hoạt động => nên công thức sẽ tính tổng 6 dòng đầu tiên và chỉ Tokyo mới thỏa mãn, còn các nơi khác = 0 là đúng rồi
Chốt: không phải do format mà do cách bạn set range nhé, cứ gõ cụ thể ra sheet nào range nào là được
1652343820084.png1652343886128.png
 
Upvote 0
Nhìn phát biết cú pháp SQL mà thấy ADO lạ à ? Nghe sai sai.
Mà nghe đâu bạn này đang là hiện tượng mới nổi của GPE ha :D
 
Upvote 0
1. ADO là cách của bài #6 đang làm
2. Mình chỉ ra rõ rồi sở dĩ tính sai do bạn khai báo range mà không khai báo sheet nên bị sai (màu vàng trên hình)
ở đây nó sẽ quét sheet đang active tức sheet ucity và bằng 6. Mình có thêm dòng "A1.Offset(0, 9).Interior.Color = vbYellow" để tô màu phạm vi code đang hoạt động => nên công thức sẽ tính tổng 6 dòng đầu tiên và chỉ Tokyo mới thỏa mãn, còn các nơi khác = 0 là đúng rồi
Chốt: không phải do format mà do cách bạn set range nhé, cứ gõ cụ thể ra sheet nào range nào là được
View attachment 275859View attachment 275860
Dạ vâng ạ! Đúng là em có hơi bất cẩn thật . Em cảm ơn anh nhiều ^^
 
Upvote 0
Nhưng mà cho em hỏi là học những chủ đề gì trong VBA để viết được ...
Đúng rồi, đó là truy vấn SQL trong Excel... Tìm hiểu về ADO trong diễn đàn này...

Đại khái thuật toán gồm các bước sau:
1. Khởi tạo kết nối tới ADOBE của MicroSoft
2. Lấy dữ liệu lên RAM ...
3. Thực hiện các câu lệnh ...
4. Ghi xuống Sheet
5. Giải phóng bộ nhớ, thoát chương trình...

Từ Khóa Google: VBA Query for Excel...
 
Upvote 0
Đúng rồi, đó là truy vấn SQL trong Excel... Tìm hiểu về ADO trong diễn đàn này...

Đại khái thuật toán gồm các bước sau:
1. Khởi tạo kết nối tới ADOBE của MicroSoft
2. Lấy dữ liệu lên RAM ...
3. Thực hiện các câu lệnh ...
4. Ghi xuống Sheet
5. Giải phóng bộ nhớ, thoát chương trình...

Từ Khóa Google: VBA Query for Excel...
Em cảm ơn anh đã cho em gợi ý rất đầy đủ ^^ .
Cảm ơn mọi người đã bỏ thời gian ra đọc bài viết và khắc phục lỗi giúp em .
 
Upvote 0
Ngắn ngắn chút còn lọ mọ vào chứ thế này thì đúng là bỏ qua thật.
Thớt có cái thời khóa biểu. Không dồn một đống thế này thì làm sao theo kịp.

Tôi thì chậm tiêu lắm. Mãi đến giờ này tôi mới có dịp nhìn câu 1:
- Dùng hàm worksheetfunction thì phải bẫy lỗi. Nếu cứ bị lỗi thì nó ra vậy đó (ở đây Vlookup bị lỗi #NA)

Nhìn phát biết cú pháp SQL mà thấy ADO lạ à ? Nghe sai sai.
Mà nghe đâu bạn này đang là hiện tượng mới nổi của GPE ha :D
Thớt chuyên SQL Server (dùng TSQL). Nhìn code Access Query thấy giông giống thì cho là vậy/. Học nhanh mờ.

Hình như em đã làm gì đó khiến phá hỏng đi môi trường học tập trên GPE . Em xin lỗi . Em sẽ sửa ngay ạ
Chả có gì hỏng cả. Ở đây ai cũng đầu cứng như củi. Không thay đổi được đâu.
 
Upvote 0
Em cảm ơn anh đã cho em gợi ý rất đầy đủ ^^ .
Cảm ơn mọi người đã bỏ thời gian ra đọc bài viết và khắc phục lỗi giúp em .
Tôi thì nghĩ là bạn nên phát huy mọi mặt mạnh của mình. Bạn có chút nhan sắc, từng làm người mẫu ảnh. Vậy thì phát huy điểm mạnh này song song với các đam mê và việc học khác. Biết đâu nghề người mẫu ảnh lại chọn bạn. Có thực mới vực được đạo. Để sống được và học lập trình thì phải có tiền, nhiều tiền. Nghề người mẫu ảnh đem lại thu nhập thì vẫn có thể làm song song.
 
Upvote 0
Chả có gì hỏng cả. Ở đây ai cũng đầu cứng như củi. Không thay đổi được đâu.
Đầu cứng như củi thì chỉ có lấy búa bổ vào hả anh :D
Đấy là em đang khen bạn đó, nói chung làm gì cũng có mục tiêu, và thấy bạn đó tiến hành khá nhanh, cũng tiến bộ, nhanh hơn em học rất nhiều lần.
Hình như em đã làm gì đó khiến phá hỏng đi môi trường học tập trên GPE . Em xin lỗi . Em sẽ sửa ngay ạ
Không đâu bạn, GPE luôn là môi trường học tập, bạn cứ hỏi những điều bạn muốn, mình tin mọi suy nghĩ tích cực trong học tập đều sẽ được chấp nhận và giải đáp đầy đủ, bạn cứ thỏa sức tìm hiểu, đặt câu hỏi khi khó khăn.
---------
P/S: Mình nói vì ganh tị do thớt của bạn luôn sôi động và có các anh (chú) lớn @batman1 @VetMini và một số anh em tích cực như @Hoàng Tuấn 868 hỗ trợ ... Ráng tranh thủ học hỏi đi, không dễ gì mấy ảnh (chú) hỗ trợ đâu.
 
Upvote 0
P/S: Mình nói vì ganh tị do thớt của bạn luôn sôi động và có các anh (chú) lớn @batman1 @VetMini và một số anh em tích cực như @Hoàng Tuấn 868 hỗ trợ ... Ráng tranh thủ học hỏi đi, không dễ gì mấy ảnh (chú) hỗ trợ đâu.
Thật ra muốn được mấy "ông kẹ" đó giúp đỡ không khó, nhưng bài viết của bạn phải thú vị và mang tính học thuật cao là có mặt mấy bác đó làm cho sum tụ cái "thớt" lên liền!
 
Upvote 0
Dạ vâng ạ ! Chắc là do em suy nghĩ hơi nhiều rồi . Em cứ nghĩ mọi người đang bàn luận gì đó về mình (ngoài chuyện học), nhất là khi mình đang ở môi trường phát triển rất tốt như GPE nữa nên em mới có hành động như vậy ^^
Em cảm ơn mọi người nhiều lắm hi
 
Upvote 0
Bắt đầu từ câu 1. (Đã nói tôi chậm tiêu lắm, giờ này mới hiểu câu 1 thớt muốn gì)

Để tìm thành phố có doanh thu cao nhất thì giải thuật như sau:
1. Chuẩn bị bảng dò:
1.1. Copy hai cột "năm" và "thành phố" của bảng doanh thu sang sheet mới (tạm gọi sheet DT).
1.2. Ở sheet DT, dùng Remove Duplicates để chừa lại duy nhất năm và thành phố.
1.3. Dùng hàm SumIfs để lấy tổng doanh thu từng thành phố, từng năm.
1.4. Sort bảng tổng doanh thu theo năm, và theo tổng doanh thu.
(các bước trên thực ra dùng Pivot Table là ngon nhất)
2. Có bảng dò rồi thì bắt đầu dò:
Có hai cách dò. Cách thứ nhất là dùng hàm Choose để đổi ghép dữ liệu dò cho VLookup. Cách thứ hai là dùng cách phân năm, và dò trong vùng năm.

Nếu dùng hàm WorsheetFunction thì phải bẫy lỗi bằng câu: On Error ...
Nếu dùng hàm Application thì bẫy lỗi bằng If IsError(...)
* hai trường hợp này tôi đã giải thích nhiều lần trên GPE. Muốn biết thì chịu khó mò.

@thớt: tôi vốn khó tính. Có thể nói là người khó tính nhất ở đây. Những cách nói chuyện dùng ngôn ngữ HK và Tàu Mã lai (Hmm, oa, wow,...) đối với tôi rất chướng tai.
 
Upvote 0
Web KT

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

Back
Top Bottom