TỰ ĐỘNG TRẢ VỀ GIÁ TRỊ . EM MỚI TẬP TÀNH VBA . MONG CÁC BÁC CHỈ GIÁO

Blue Softs Liên hệ QC

thierry henry

Thành viên mới
Tham gia ngày
11 Tháng sáu 2018
Bài viết
5
Được thích
0
Em đã làm theo thầy trên youtube hướng dẫn nhưng không ra kết quả . Bác nào chỉ giáo giúp em . Em cảm ơn
 

File đính kèm

  • Vlookup vba.xlsm
    18 KB · Đọc: 14

HUONGHCKT

Thành viên hoạt động
Tham gia ngày
30 Tháng tám 2012
Bài viết
166
Được thích
214
Em đã làm theo thầy trên youtube hướng dẫn nhưng không ra kết quả . Bác nào chỉ giáo giúp em . Em cảm ơn

Theo mình bạn thay đoạn code này vào code ở sh2

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A5")) Is Nothing Then
   If Target.Columns.Count = 1 Then
   Target.Offset(, 1) = Application.WorksheetFunction.VLookup(Target, Sheet1.Range("A1:E8"), 5, False)
   End If
End If
End Sub
[Code]
 

Maika8008

Tích cực để lên đời
Tham gia ngày
12 Tháng sáu 2020
Bài viết
1,947
Được thích
2,110
Donate (Momo)
Donate
Giới tính
Nam
Theo mình bạn thay đoạn code này vào code ở sh2

Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A5")) Is Nothing Then
   If Target.Columns.Count = 1 Then
   Target.Offset(, 1) = Application.WorksheetFunction.VLookup(Target, Sheet1.Range("A1:E8"), 5, False)
   End If
End If
End Sub
[Code]
Tôi thường không dùng Application.WorksheetFunction. mà dùng thẳng WorksheetFunction. thấy vẫn ổn và không có gì khác biệt. Không biết bạn có tìm hiểu điều đó chưa?
 

HUONGHCKT

Thành viên hoạt động
Tham gia ngày
30 Tháng tám 2012
Bài viết
166
Được thích
214
Tôi thường không dùng Application.WorksheetFunction. mà dùng thẳng WorksheetFunction. thấy vẫn ổn và không có gì khác biệt. Không biết bạn có tìm hiểu điều đó chưa?
Tôi là loại học hành VBA chắp vá trên diễn đàn thôi chứ có kiến thức cao thâm gì đâu mà giải thích chỉ biết dùng code theo kiểu copy của người này, người khác về chắp vá gọt sửa thêm một chút cho phù hợp với đề bài chứ cũng chẳng có nghiên cứu chuyên sâu gì đâu. Anh thấy đấy, tôi đã có nhiều câu hỏi hết sức ngây ngô trên diễn đàn rồi còn gì (ví dụ như: tại sao không đặt tên biến, tên hàm tự tạo theo tiếng Việt không dấu cho dễ đọc, dễ viết....- vì vậy code của tôi thường đặt tên biến, tên sub theo tên Tiếng việt-không dấu và lung tung beng - trước đây Anh HieuCD và vừa rồi là anh VietMini cũng đã có góp ý để cho tôi sửa chữa...), hay nhiều bài tôi vẫn thường xin ý kiến các anh em ghé qua xem và sửa giùm cho ngắn gọn và hiệu quả....
Đoạn code kể trên là tôi sửa lại code gốc của chủ thớt thôi.
Theo dõi, đọc bài trên diễn đàn thấy anh cũng rất cao siêu mà. Thực tình có những code anh viết ,hoặc của những anh em khác viết tôi đọc (để học) mà chẳng hiểu chút gì.

Tôi cũng thấy có người dùng :
1/ Application. WorksheetFunction.(tên hàm)
2/ WorksheetFunction.(tên hàm)
3/Application.(tên hàm), ví dụ Max, countIF,
Và cũng thấy ổn và cũng chẳng nhân ra sự khác biệt gì.
Rất mong các anh Ndu, PTM, VietMini, Bifant, HieuCD, batman, Ba te, SA_DQ, be-09 .... có kiến thức uyên thâm giải thích giùm và phân tích, chỉ giáo trường hợp dùng của 3 cách dùng nêu trên để đạt hiệu quả nhất. Trân trọng cảm ơn.
 
Lần chỉnh sửa cuối:

Maika8008

Tích cực để lên đời
Tham gia ngày
12 Tháng sáu 2020
Bài viết
1,947
Được thích
2,110
Donate (Momo)
Donate
Giới tính
Nam
...

Tôi cũng thấy có người dùng :
1/ Application. WorksheetFunction.(tên hàm)
2/ WorksheetFunction.(tên hàm)
3/Application.(tên hàm), ví dụ Max, countIF,
Và cũng thấy ổn và cũng chẳng nhân ra sự khác biệt gì.
Tôi chỉ biết sơ là Application.(tên hàm) là hàm của VBA nhiều khi rất khác với hàm WorksheetFunction (tức hàm Excel) về kết quả trả về. Còn việc viết WorksheetFunction hay Application. WorksheetFunction không khác gì về kết quả, hình như có chăng là khác nhau về tốc độ xử lý Application. WorksheetFunction nhanh hơn WorksheetFunction. Tôi chẳng quan tâm, cứ dùng thẳng WorksheetFunction cho gọn code.
 

Phuocam

Thành viên mới
Tham gia ngày
16 Tháng năm 2013
Bài viết
3,304
Được thích
4,706
Tôi chẳng quan tâm, cứ dùng thẳng WorksheetFunction cho gọn code.
Nó khác nhau lúc có lỗi, thử chạy từng dòng code sau:
Mã:
Public Sub test()
Dim arr
arr = Array("B", "C")
Range("A1").Value = Application.Match("A", arr, 0)
Range("A2").Value = WorksheetFunction.Match("A", arr, 0)
Range("A3").Value = Application.WorksheetFunction.Match("A", arr, 0)
End Sub
 

Maika8008

Tích cực để lên đời
Tham gia ngày
12 Tháng sáu 2020
Bài viết
1,947
Được thích
2,110
Donate (Momo)
Donate
Giới tính
Nam
Nó khác nhau lúc có lỗi, thử chạy từng dòng code sau:
Mã:
Public Sub test()
Dim arr
arr = Array("B", "C")
Range("A1").Value = Application.Match("A", arr, 0)
Range("A2").Value = WorksheetFunction.Match("A", arr, 0)
Range("A3").Value = Application.WorksheetFunction.Match("A", arr, 0)
End Sub
Application.Match("A", arr, 0) thì không báo lỗi. Còn 2 dòng dưới thì cùng chung đáp án lỗi 1004, không phân biệt được khác nhau thế nào.
 

Phuocam

Thành viên mới
Tham gia ngày
16 Tháng năm 2013
Bài viết
3,304
Được thích
4,706
Application.Match("A", arr, 0) thì không báo lỗi. Còn 2 dòng dưới thì cùng chung đáp án lỗi 1004, không phân biệt được khác nhau thế nào.
Dùng Application.Match("A", arr, 0), trả về kết quả giống như bạn dùng MATCH trên sheet, nghĩa là tìm có => trả về "số", không có => trả về "#N/A", không báo lỗi trong VBA.

Dùng WorksheetFunction.Match cũng giống như Application.WorksheetFunction.Match, tìm không có => báo lỗi trong VBA, phải bẫy lỗi thêm trường hợp này.
 

Maika8008

Tích cực để lên đời
Tham gia ngày
12 Tháng sáu 2020
Bài viết
1,947
Được thích
2,110
Donate (Momo)
Donate
Giới tính
Nam
Dùng Application.Match("A", arr, 0), trả về kết quả giống như bạn dùng MATCH trên sheet, nghĩa là tìm có => trả về "số", không có => trả về "#N/A", không báo lỗi trong VBA.
Range("A1").Value = Application.Match("A", arr, 0) thì tại A1 không có trả về gì hết!?
 
Top Bottom