Vba thay thế cho công thức vlookup

  • Thread starter ultimatum
  • Ngày gửi
U

ultimatum

Guest
4/12/08
39
7
8
binhthuan
Xin chào các Anh Chị,

Hiện tại em có 1 file code VBA chức năng như Vlookup, nhưng khi sử dụng thì có khó khăn như sau:

1- Trong quá trình làm việc, có 1 số ô em muốn tự nhập dữ liệu vào, đối với vlookup thì dễ nhưng Code này thì em thua, do đó em có ý tưởng thế này: những ô nào em tự nhập dữ liệu vào thì em sẽ highlight chữ màu đỏ, lúc đó code sẽ bỏ qua không cập giá trị vào các ô này, nếu em muốn ô nào chạy theo code lại thì em sẽ bỏ highlight đi.
2- Trong file em có 1 button để cập nhật đata, nhưng do Code đang update thông tin liên tục từ sheet LLNV sang sheet Thong tin nên mọi thay đổi trong sheet "LLNV" sẽ báo lỗi. >> ý tưởng của em: Khi em bấm button thì tạm thời code update sẽ off, sau khi cập nhật xong data bên sheet LLNV thì code này sẽ chạy lại.

Mong các Anh Chị xem xét file của em có thể làm vậy không nha. Vì file của em rất nặng nên em muốn chuyển Vlookup >> VBA.

Cảm ơn Anh Chị rất nhiều.
 

Đính kèm

  • Code VBA thay the Vlookup.rar
    39.3 KB · Lượt xem: 954
  • Like
Reactions: anhvh2312
Khóa học Quản trị dòng tiền
A

anhvh2312

Học - Học nữa - Học mãi
16/7/13
6
3
3
32
ha noi
Rất ngưỡng mộ các bạn thành thạo VBA,
Mình chả biết gì về VBA cả :( đọc hướng dẫn mà khó giã man, chả hiểu gì sất
up cho bác..
 
  • Like
Reactions: ultimatum
QDuc

QDuc

Cao cấp
3/6/06
254
18
18
Biển khơi
1- Trong quá trình làm việc, có 1 số ô em muốn tự nhập dữ liệu vào, đối với vlookup thì dễ nhưng Code này thì em thua, do đó em có ý tưởng thế này: những ô nào em tự nhập dữ liệu vào thì em sẽ highlight chữ màu đỏ, lúc đó code sẽ bỏ qua không cập giá trị vào các ô này, nếu em muốn ô nào chạy theo code lại thì em sẽ bỏ highlight đi.

2- Trong file em có 1 button để cập nhật đata, nhưng do Code đang update thông tin liên tục từ sheet LLNV sang sheet Thong tin nên mọi thay đổi trong sheet "LLNV" sẽ báo lỗi. >> ý tưởng của em: Khi em bấm button thì tạm thời code update sẽ off, sau khi cập nhật xong data bên sheet LLNV thì code này sẽ chạy lại.

(1) Bạn hãy nói rõ hơn đó là những ô nào & ở cột/trường nào?; Thậm chí bạn còn chưa nói nó ở trang nào nữa kia!
(Mình thấy cột [C] của trang 'ChiTiet' có 1 ô màu Font bôi đỏ, có fải bạn đang nói về nó/chúng nó không?

(2) Khi macro đang chạy thì ta không nên dừng, bắt nó nghỉ xả hơi tí nào.
Nên là cập nhật gì đó xong thì cho macro chạy.
 
  • Like
Reactions: ultimatum
U

ultimatum

Guest
4/12/08
39
7
8
binhthuan
(1) Bạn hãy nói rõ hơn đó là những ô nào & ở cột/trường nào?; Thậm chí bạn còn chưa nói nó ở trang nào nữa kia!
(Mình thấy cột [C] của trang 'ChiTiet' có 1 ô màu Font bôi đỏ, có fải bạn đang nói về nó/chúng nó không?

(2) Khi macro đang chạy thì ta không nên dừng, bắt nó nghỉ xả hơi tí nào.
Nên là cập nhật gì đó xong thì cho macro chạy.
(1) Cái này không cố định anh QDuc ah, trong trang "ChiTiet" tất cả những ô mà macro chạy đều phải đáp ứng được cái này, vì mặt hàng này em sửa chi tiết, nhưng mặt hàng kia em cần sửa giá... (giống như dùng công thức Vlookup thôi anh, chổ nào Vlookup chạy thì chổ đó em có thể bỏ công thức đi để nhập nội dung của em vào). Sheet LLNV dc xem là sheet data nha anh, còn sheet chi tiết là sheet chạy macro hiển thị.
>> Phạm vi Macro chạy: từ cột C > F and H > K

(2) Thật ra form của em sắp xếp thế này: Sheet1 là form làm việc lấy thông tin từ Data (Sheet3), Sheet2 chứa button, sheet3 là sheet Data. Tại sheet2 Khi ấn button thì mình sẽ copy dữ liệu từ file khác và paste vào sheet3. sau đó mình trở lại sheet1 để làm việc, nếu có giá mới hoặc các thông số mới thì nó tự động update lại trên form. >>> em nghĩ cái này mình dùng worksheet_active được hok anh? vì từ sheet2 trở về sheet1 thì lúc đó mới update thông tin thay đổi từ data.
 
Sửa lần cuối:
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
568
99
28
66
HCM city
Bạn viết lúc thì tên cúng cơm, lúc lại là tên thường gọi của trang tính; Không biết đâu mà lần.
Mà hình như 2 file lại không có cái nào 3 trang tính cả.
. . . . . . .
 
  • Like
Reactions: ultimatum
U

ultimatum

Guest
4/12/08
39
7
8
binhthuan
Bạn viết lúc thì tên cúng cơm, lúc lại là tên thường gọi của trang tính; Không biết đâu mà lần.
Mà hình như 2 file lại không có cái nào 3 trang tính cả.
. . . . . . .
Hjhjhj. tại em nói sheet1, sheet2 cho nó dể hiểu theo qui trình nó là thế. trong file "Code VBA thay the Vlookup" , vì khi em up lên thấy 1 sheet mà để có cái button nên e gôm nó chung về sheet "ChiTiet". Sau đó anh QDuc nói không nên làm vậy nên em mới nghĩ tới worksheet active, hjc.
Em xin up lại file như bên dưới ạ. trong file rar bao gồm:
+ File Code VBA thay the Vlookup:
- sheet "ChiTiet" để làm việc và để Macro chạy, >> Phạm vi Macro chạy: từ cột C > F and H > K
- Sheet "Update" chứa button có chức năng copy dữ liệu từ file LLNV vào Sheet "LLNV"
- Sheet "LLNV" đóng vai trò là data
+ File LLNV: chứa dữ liệu để copy vào sheet "LLNV" trên file "Code VBA thay the Vlookup"

Không biết em trình bày như thế có chính xác chưa ạ, sai chổ nào các anh cứ chém giúp em. hjhjhj
 

Đính kèm

  • Code VBA thay the Vlookup.rar
    42 KB · Lượt xem: 517
U

ultimatum

Guest
4/12/08
39
7
8
binhthuan
Các anh xem giúp em phần này với ạ, các anh hướng dẫn giúp em cần tập trung vào những chổ nào để thực hiện đề bài của em ạ.
 
U

ultimatum

Guest
4/12/08
39
7
8
binhthuan
Các Thầy đi du lịch hết rồi, không thấy ai trả lời giúp em cả. :(
 
U

ultimatum

Guest
4/12/08
39
7
8
binhthuan
Xin chào các anh, sau thời gian ngâm cứu em vẫn chưa thể khắc phục được vấn đề này, Mong các anh giải thích giúp em với a.
ở đoạn code nhập dữ liệu em có thử code ở cột đầu tiên như sau:

PHP:
ReDim Arr1(1 To UBound(aTarget, 1), 1 To 4)
    ReDim Arr2(1 To UBound(aTarget, 1), 1 To 4)
    
       For i = 1 To UBound(aTarget, 1)
      If aTarget(i, 1) <> "" Then
        tmp = aTarget(i, 1)
        If Dic.Exists(tmp) Then
          If Arr1(i, 1).Font.Color <> vbRed Then
          Arr1(i, 1) = aResult(Dic.Item(tmp), 2)
          Else
          End If
         
          Arr1(i, 2) = aResult(Dic.Item(tmp), 3)
          Arr1(i, 3) = aResult(Dic.Item(tmp), 5)
          Arr1(i, 4) = aResult(Dic.Item(tmp), 6)
          Arr2(i, 1) = aResult(Dic.Item(tmp), 12)
          Arr2(i, 2) = aResult(Dic.Item(tmp), 15)
          Arr2(i, 3) = aResult(Dic.Item(tmp), 16)
          Arr2(i, 4) = aResult(Dic.Item(tmp), 10)
          Else
          Arr1(i, 1) = "#N/A"
          Arr1(i, 2) = "#N/A"
          Arr1(i, 3) = "#N/A"
          Arr1(i, 4) = "#N/A"
          Arr2(i, 1) = "#N/A"
          Arr2(i, 2) = "#N/A"
          Arr2(i, 3) = "#N/A"
          Arr2(i, 4) = "#N/A"
        
        End If

Mục đích là những ô nào font màu đỏ thì nó ko thực thi lệnh, vậy mà nó cứ chạy ào ào. hjc
Nhờ các anh xem giúp em bị sai chổ nào với ạ.
Cảm ơn các anh rất nhiều.
 
N

nguoiconxunui

Khách vãng lai
29/6/04
1,280
215
63
Bình Định
aso2pc.co.cc
dùng cái này nó có hay hơn dùng vlookup có sẵn của excel không?
 
U

ultimatum

Guest
4/12/08
39
7
8
binhthuan
Nó chạy nhanh hơn dùng công thức, Form của em nhiều lúc làm tới hơn 4k dòng, mà dùng công thức thì đứng hình.
 
U

ultimatum

Guest
4/12/08
39
7
8
binhthuan
Mong các anh xem giúp em đoạn code với ạ, vì chỉ còn phần này là form của em xong rồi. chỉ bị kẹt phần highlight đỏ thôi.
Em cảm ơn rất nhiều.
 
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
568
99
28
66
HCM city
Mục đích là những ô nào font màu đỏ thì nó ko thực thi lệnh, vậy mà nó cứ chạy ào ào. hjc
Nhờ các anh xem giúp em bị sai chổ nào với ạ.
Khi bạn xài tới Array & Dictionary thì đạt ôốc độ siêu cao rồi.
Nhưng nó có nhược điểm so với iêu cầu của bạn; Là nó không nhận biết ô nào có màu & ô nào không có màu nữa.
Mọi giá trị đều là đen-trắng mà thôi!
 
  • Like
Reactions: ultimatum
U

ultimatum

Guest
4/12/08
39
7
8
binhthuan
Em cảm ơn anh SA_DQ , Cái này chắc chạy nhanh quá chưa kịp nhìn màu. hjhjhj.
Vậy thì botay đúng không anh SA_DQ, thế em phải dùng công thức "=" làm trung gian vậy, khi nào em ko muốn chạy ô nào thì ì bỏ dấu "=". hjc.
 
diemtuyen48

diemtuyen48

Trung cấp
Xin chào các Anh Chị,

Hiện tại em có 1 file code VBA chức năng như Vlookup, nhưng khi sử dụng thì có khó khăn như sau:

1- Trong quá trình làm việc, có 1 số ô em muốn tự nhập dữ liệu vào, đối với vlookup thì dễ nhưng Code này thì em thua, do đó em có ý tưởng thế này: những ô nào em tự nhập dữ liệu vào thì em sẽ highlight chữ màu đỏ, lúc đó code sẽ bỏ qua không cập giá trị vào các ô này, nếu em muốn ô nào chạy theo code lại thì em sẽ bỏ highlight đi.
2- Trong file em có 1 button để cập nhật đata, nhưng do Code đang update thông tin liên tục từ sheet LLNV sang sheet Thong tin nên mọi thay đổi trong sheet "LLNV" sẽ báo lỗi. >> ý tưởng của em: Khi em bấm button thì tạm thời code update sẽ off, sau khi cập nhật xong data bên sheet LLNV thì code này sẽ chạy lại.

Mong các Anh Chị xem xét file của em có thể làm vậy không nha. Vì file của em rất nặng nên em muốn chuyển Vlookup >> VBA.

Cảm ơn Anh Chị rất nhiều.
Cái này thật là bài toán khó với Mình, mình không biết Vba là gì luôn á, bạn giỏi quá
 
T

Tuankt007

Guest
29/12/12
4
0
1
Tp.HCM
Xin chào các anh, sau thời gian ngâm cứu em vẫn chưa thể khắc phục được vấn đề này, Mong các anh giải thích giúp em với a.
ở đoạn code nhập dữ liệu em có thử code ở cột đầu tiên như sau:

PHP:
ReDim Arr1(1 To UBound(aTarget, 1), 1 To 4)
    ReDim Arr2(1 To UBound(aTarget, 1), 1 To 4)
   
       For i = 1 To UBound(aTarget, 1)
      If aTarget(i, 1) <> "" Then
        tmp = aTarget(i, 1)
        If Dic.Exists(tmp) Then
          If Arr1(i, 1).Font.Color <> vbRed Then
          Arr1(i, 1) = aResult(Dic.Item(tmp), 2)
          Else
          End If
        
          Arr1(i, 2) = aResult(Dic.Item(tmp), 3)
          Arr1(i, 3) = aResult(Dic.Item(tmp), 5)
          Arr1(i, 4) = aResult(Dic.Item(tmp), 6)
          Arr2(i, 1) = aResult(Dic.Item(tmp), 12)
          Arr2(i, 2) = aResult(Dic.Item(tmp), 15)
          Arr2(i, 3) = aResult(Dic.Item(tmp), 16)
          Arr2(i, 4) = aResult(Dic.Item(tmp), 10)
          Else
          Arr1(i, 1) = "#N/A"
          Arr1(i, 2) = "#N/A"
          Arr1(i, 3) = "#N/A"
          Arr1(i, 4) = "#N/A"
          Arr2(i, 1) = "#N/A"
          Arr2(i, 2) = "#N/A"
          Arr2(i, 3) = "#N/A"
          Arr2(i, 4) = "#N/A"
       
        End If

Mục đích là những ô nào font màu đỏ thì nó ko thực thi lệnh, vậy mà nó cứ chạy ào ào. hjc
Nhờ các anh xem giúp em bị sai chổ nào với ạ.
Cảm ơn các anh rất nhiều.
 
T

Tuankt007

Guest
29/12/12
4
0
1
Tp.HCM
Theo mình trong VBA có ham Vlookup minh ap dung nhanh hon
pls : 0938035330
 
T

Tuankt007

Guest
29/12/12
4
0
1
Tp.HCM
Minh co phan mem ke toan chay VBA
Ban nao co nhu cau lien he nhe.
Minh chia se

Phan mem chuyen dung cho ke toan chay dich vu
 

Đính kèm

  • NKC.PNG
    NKC.PNG
    29.9 KB · Lượt xem: 149

Xem nhiều

Webketoan Zalo OA