Xin Viết Dùng Mã Vba Thay Thế Cho Hàm Vlookup | Giải Pháp Excel
Có thể bạn quan tâm
- Trang chủ Có gì mới Hoạt động gần nhất Tác giả
- Diễn đàn Tìm bài viết mới Tìm theo chuyên mục
- Video Video về Excel Video về tin học khác Tin tức về tin học chung
- Thông tin mới Featured content Tìm bài mới Tài Nguyên Mới Hoạt động gần nhất
- Tài nguyên Đánh giá mới nhất Tìm tài nguyên
- Đóng góp
Tìm kiếm
Mọi nơi Đề tài Diễn đàn này Đề tài này Chỉ tìm trong tiêu đề Note Tìm kiếm Tìm nâng cao…- Tìm bài viết mới
- Tìm theo chuyên mục
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.
- Khách ơi! GPE thông tin đến bạn ấn phẩm "lập trình VBA trong Excel": - Phần cơ bản - Phần Nâng Cao - VBA trong Excel - Cải thiện và tăng tốc
- Trang chủ
- Diễn đàn
- Excel và các ngôn ngữ lập trình khác
- Excel và các ngôn ngữ lập trình khác
- Thread starter Thread starter hoangvinh_tb
- Ngày gửi Ngày gửi 4/4/12
- 1
- 2
- 3
- …
Go to page
Tiếp tục - 14
Go to page
Tiếp tục Tiếp Last Hhoangvinh_tb
Thành viên mới
Tham gia 16/6/08 Bài viết 20 Được thích 4 Mình gửi vd lên nhờ các bắc bớt chút thời gian chỉ dùm vài chiêu Cảm ơn các bạn nhiều!!!File đính kèm
- vlookup.xls vlookup.xls 24.5 KB · Đọc: 2,152
concogia
Gội rồi mới Cạo
Tham gia 17/9/09 Bài viết 3,412 Được thích 6,876hoangvinh_tb đã viết: Mình gửi vd lên nhờ các bắc bớt chút thời gian chỉ dùm vài chiêu Cảm ơn các bạn nhiều!!! Nhấp chuột vào đây để mở rộng...Mã nó đây RightClick vào sheet "CT" ==> View Code chép cái này vào Mã:Sao chép. Private Sub Worksheet_Change(ByVal Target As Range) Dim d, I, Vung, Ws Set d = CreateObject("scripting.dictionary") Set Ws = Sheets("MA") Vung = Ws.Range(Ws.[B3], Ws.[B10000].End(xlUp)).Resize(, 3) If Not Intersect(Target, Range("B4:B1000")) Is Nothing Then If Target.Count = 1 Then For I = 1 To UBound(Vung) d.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3)) Next I If d.exists(UCase(Target.Value)) Then Target.Offset(, 1) = d.Item(UCase(Target.Value))(0) Target.Offset(, 2) = d.Item(UCase(Target.Value))(1) End If End If End If End Sub Thân
SA_DQ
/(hông là gì!
Thành viên danh dự Tham gia 8/6/06 Bài viết 14,567 Được thích 22,872 Nghề nghiệp U80 Cái ni cũng vừa đủ sòai nề PHP:Sao chép. Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("B4:B99")) Is Nothing Then Dim Rng As Range, sRng As Range, Sh As Worksheet Set Sh = ThisWorkbook.Worksheets("MA") Set Rng = Sh.Range(Sh.[b2], Sh.[b2].End(xlDown)) Set sRng = Rng.Find(Target.Value, , xlFormulas, xlWhole) If sRng Is Nothing Then MsgBox "Nothing" Else Target.Offset(, 1).Resize(, 2).Value = sRng.Offset(, 1).Resize(, 2).Value End If End If End Sub Hhoangvinh_tb
Thành viên mới
Tham gia 16/6/08 Bài viết 20 Được thích 4 Cám ơn bạn đã gửi cho mình đoạn mã này! nhưng mình muốn triển khai đoạn mã đó mà vẫn chưa làm đc mong bạn giải thích và giúp mình nhé Mình muốn cột địa chỉ di chuyển các cột tên khoảng 5 cộtTrungChinhs
Thành viên tích cực
Tham gia 18/2/08 Bài viết 1,475 Được thích 2,469 Nghề nghiệp Công chứchoangvinh_tb đã viết: Cám ơn bạn đã gửi cho mình đoạn mã này! nhưng mình muốn triển khai đoạn mã đó mà vẫn chưa làm đc mong bạn giải thích và giúp mình nhé Mình muốn cột địa chỉ di chuyển các cột tên khoảng 5 cột Nhấp chuột vào đây để mở rộng...5 cột ấy là những cột nào vậy bạn ? Nhiều người trên diễn đàn (trong đó có tôi) cho rằng hỏi bài mà không gửi file đính kèm và không diễn đạt rõ yêu cầu là thiếu trách nhiệm với câu hỏi của mình và thiếu tôn trọng người mình hỏi. H
hoangvinh_tb
Thành viên mới
Tham gia 16/6/08 Bài viết 20 Được thích 4TrungChinhs đã viết: 5 cột ấy là những cột nào vậy bạn ? Nhiều người trên diễn đàn (trong đó có tôi) cho rằng hỏi bài mà không gửi file đính kèm và không diễn đạt rõ yêu cầu là thiếu trách nhiệm với câu hỏi của mình và thiếu tôn trọng người mình hỏi. Nhấp chuột vào đây để mở rộng...cám ơn bạn đã góp chân thành mình cũng định gửi file đính kèm mà không có cách nào đính kèm đc mong bạn và các bạn trong diễn đàn thông cảm. K
khongphai02
Thành viên mới
Tham gia 7/4/12 Bài viết 15 Được thích 2concogia đã viết: Mã nó đây RightClick vào sheet "CT" ==> View Code chép cái này vào Mã:Sao chép. Private Sub Worksheet_Change(ByVal Target As Range) Dim d, I, Vung, Ws Set d = CreateObject("scripting.dictionary") Set Ws = Sheets("MA") Vung = Ws.Range(Ws.[B3], Ws.[B10000].End(xlUp)).Resize(, 3) If Not Intersect(Target, Range("B4:B1000")) Is Nothing Then If Target.Count = 1 Then For I = 1 To UBound(Vung) d.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3)) Next I If d.exists(UCase(Target.Value)) Then Target.Offset(, 1) = d.Item(UCase(Target.Value))(0) Target.Offset(, 2) = d.Item(UCase(Target.Value))(1) End If End If End If End Sub Thân Nhấp chuột vào đây để mở rộng...Mình cũng đang cần cái này, cảm ơn pro. cái này hay lắm. Mình làm cửa hàng bán lẻ, hằng ngày phải xuất kho tương đối nhiều phiếu giao hàng trong 1 thời gian ngắn. Dùng hàm vlookup file excel lên đến 150MB nhìn đã thấy khiếp. đang tìm mã vba để thay thế vlookup. Thank pro nhé. Q
qtm1987
Thành viên thường trực
Tham gia 15/9/09 Bài viết 340 Được thích 244 Nghề nghiệp Kế toán tổng hợpconcogia đã viết: Mã nó đây RightClick vào sheet "CT" ==> View Code chép cái này vào Mã:Sao chép. Private Sub Worksheet_Change(ByVal Target As Range) Dim d, I, Vung, Ws Set d = CreateObject("scripting.dictionary") Set Ws = Sheets("MA") Vung = Ws.Range(Ws.[B3], Ws.[B10000].End(xlUp)).Resize(, 3) If Not Intersect(Target, Range("B4:B1000")) Is Nothing Then If Target.Count = 1 Then For I = 1 To UBound(Vung) d.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3)) Next I If d.exists(UCase(Target.Value)) Then Target.Offset(, 1) = d.Item(UCase(Target.Value))(0) Target.Offset(, 2) = d.Item(UCase(Target.Value))(1) End If End If End If End Sub Thân Nhấp chuột vào đây để mở rộng...code này hay, lâu nay mình lại dùng 2 vòng for hèn gì mà khi dữ liệu nhiều thì tìm kiếm lâu lắc. ============================================== Sau khi thử code trên mình thấy chỉ tìm kiếm được cho từng mã khi click vào ô đó (tức là nhập vào giá trị mã cho ô đó thì sẽ tìm kiếm cho mã tại ô đó). Vậy nếu mình có sẵn 1 danh sách mã và muốn tìm kiếm cho 1 danh sách mã đó thì ko lẽ phải click từng mã mới tìm kiếm được. Mình vẫn phải dùng 2 vòng For, 1 vòng for cho vùng chứa dữ liệu tìm kiếm và 1 vòng for cho vùng chứa mã muốn tìm kiếm. Với cách này dữ liệu hàng chục ngàn dòng thì code chạy lâu, có cách nào khác không nhỉ? PHP:Sao chép. Sub TimKiem_Vlookup() Dim i As Long, j As Long, sArray1, sArray2, Arr() With Sheets("MA") sArray1 = .Range(.[B3], .[B65000].End(xlUp)).Resize(, 3).Value End With With Sheets("CT") .Range("C4:D65000").ClearContents sArray2 = .Range(.[B4], .[B65000].End(xlUp)).Value ReDim Arr(1 To UBound(sArray2, 1), 1 To 2) For j = 1 To UBound(sArray2, 1) For i = 1 To UBound(sArray1, 1) If Not IsEmpty(sArray2(j, 1)) And sArray1(i, 1) = UCase(sArray2(j, 1)) Then Arr(j, 1) = sArray1(i, 2) Arr(j, 2) = sArray1(i, 3) End If Next Next .Range("C4").Resize(j - 1, 2).Value = Arr End With End Sub Lần chỉnh sửa cuối: 13/4/12 K
khongphai02
Thành viên mới
Tham gia 7/4/12 Bài viết 15 Được thích 2 Sửa giúp em cái này với Bác 'CONCOGIA'concogia đã viết: Mã nó đây RightClick vào sheet "CT" ==> View Code chép cái này vào Mã:Sao chép. Private Sub Worksheet_Change(ByVal Target As Range) Dim d, I, Vung, Ws Set d = CreateObject("scripting.dictionary") Set Ws = Sheets("MA") Vung = Ws.Range(Ws.[B3], Ws.[B10000].End(xlUp)).Resize(, 3) If Not Intersect(Target, Range("B4:B1000")) Is Nothing Then If Target.Count = 1 Then For I = 1 To UBound(Vung) d.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3)) Next I If d.exists(UCase(Target.Value)) Then Target.Offset(, 1) = d.Item(UCase(Target.Value))(0) Target.Offset(, 2) = d.Item(UCase(Target.Value))(1) End If End If End If End Sub Thân Nhấp chuột vào đây để mở rộng...Chào bác concogia và các cao thủ. EM đang cần làm 1 cái phiếu xuất kho cũng thay thế hàm vlookup bằng mã VBA, copy mã của bác concogia về chạy thử thì rất ok. Chỉ có điều em muốn link thêm giá trị từ Sheet 'MA' sang sheet 'CT', mà ko biết sửa thế nào nhờ bác concogia và các cao thủ sử giúp. Em xin cảm ơn các bác.
File đính kèm
- vlookup (2).xls vlookup (2).xls 37 KB · Đọc: 854
concogia
Gội rồi mới Cạo
Tham gia 17/9/09 Bài viết 3,412 Được thích 6,876qtm1987 đã viết: code này hay, lâu nay mình lại dùng 2 vòng for hèn gì mà khi dữ liệu nhiều thì tìm kiếm lâu lắc. ============================================== Sau khi thử code trên mình thấy chỉ tìm kiếm được cho từng mã khi click vào ô đó (tức là nhập vào giá trị mã cho ô đó thì sẽ tìm kiếm cho mã tại ô đó). Vậy nếu mình có sẵn 1 danh sách mã và muốn tìm kiếm cho 1 danh sách mã đó thì ko lẽ phải click từng mã mới tìm kiếm được. Mình vẫn phải dùng 2 vòng For, 1 vòng for cho vùng chứa dữ liệu tìm kiếm và 1 vòng for cho vùng chứa mã muốn tìm kiếm. Với cách này dữ liệu hàng chục ngàn dòng thì code chạy lâu, có cách nào khác không nhỉ? PHP:Sao chép. Sub TimKiem_Vlookup() Dim i As Long, j As Long, sArray1, sArray2, Arr() With Sheets("MA") sArray1 = .Range(.[B3], .[B65000].End(xlUp)).Resize(, 3).Value End With With Sheets("CT") .Range("C4:D65000").ClearContents sArray2 = .Range(.[B4], .[B65000].End(xlUp)).Value ReDim Arr(1 To UBound(sArray2, 1), 1 To 2) For j = 1 To UBound(sArray2, 1) For i = 1 To UBound(sArray1, 1) If Not IsEmpty(sArray2(j, 1)) And sArray1(i, 1) = UCase(sArray2(j, 1)) Then Arr(j, 1) = sArray1(i, 2) Arr(j, 2) = sArray1(i, 3) End If Next Next .Range("C4").Resize(j - 1, 2).Value = Arr End With End Sub Nhấp chuột vào đây để mở rộng...Code trên là viết theo đề bài của bạn hoangvinh_tb, còn nếu theo ý của bạn thì ta vẫn viết theo cách cũ + một vòng lặp For ...... Next nữa, tức là một vòng tạo Dictionary, một vòng lấy mảng kết quả Cách của bạn là 2 vòng ......lồng vào nhau, dữ liệu càng lớn thì tốc độ càng của nó làm bạn........."hao thuốc lá + cà phê đá" Mình chỉ nghĩ thế thôi ( trên lý thuyết) vì không có file thực tế để thử ( làm biếng tạo file quá ) Thân
concogia
Gội rồi mới Cạo
Tham gia 17/9/09 Bài viết 3,412 Được thích 6,876khongphai02 đã viết: Chào bác concogia và các cao thủ. EM đang cần làm 1 cái phiếu xuất kho cũng thay thế hàm vlookup bằng mã VBA, copy mã của bác concogia về chạy thử thì rất ok. Chỉ có điều em muốn link thêm giá trị từ Sheet 'MA' sang sheet 'CT', mà ko biết sửa thế nào nhờ bác concogia và các cao thủ sử giúp. Em xin cảm ơn các bác. Nhấp chuột vào đây để mở rộng...Bạn chép code này đè lên cái cũ nhé Mã:Sao chép. Private Sub Worksheet_Change(ByVal Target As Range) Dim d, I, Vung, Ws Set d = CreateObject("scripting.dictionary") Set Ws = Sheets("MA") Vung = Ws.Range(Ws.[B3], Ws.[B10000].End(xlUp)).Resize(, 4) If Not Intersect(Target, Range("B4:B1000")) Is Nothing Then If Target.Count = 1 Then For I = 1 To UBound(Vung) d.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3), Vung(I, 4)) Next I If d.exists(UCase(Target.Value)) Then Target.Offset(, 1) = d.Item(UCase(Target.Value))(0) Target.Offset(, 2) = d.Item(UCase(Target.Value))(1) Target.Offset(, 5) = d.Item(UCase(Target.Value))(2) End If End If End If End Sub Thân K
khongphai02
Thành viên mới
Tham gia 7/4/12 Bài viết 15 Được thích 2khongphai02 đã viết: Chào bác concogia và các cao thủ. EM đang cần làm 1 cái phiếu xuất kho cũng thay thế hàm vlookup bằng mã VBA, copy mã của bác concogia về chạy thử thì rất ok. Chỉ có điều em muốn link thêm giá trị từ Sheet 'MA' sang sheet 'CT', mà ko biết sửa thế nào nhờ bác concogia và các cao thủ sử giúp. Em xin cảm ơn các bác. Nhấp chuột vào đây để mở rộng...m mò ra rồi, Cảm ơn các bác nhiều... Private Sub Worksheet_Change(ByVal Target As Range) Dim d, I, Vung, Ws Set d = CreateObject("scripting.dictionary") Set Ws = Sheets("MA") Vung = Ws.Range(Ws.[B3], Ws.[B10000].End(xlUp)).Resize(, 4) If Not Intersect(Target, Range("B4:B1000")) Is Nothing Then If Target.Count = 1 Then For I = 1 To UBound(Vung) d.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3), Vung(I, 4)) Next I If d.exists(UCase(Target.Value)) Then If d.exists(UCase(Target.Value)) Then Target.Offset(, 1) = d.Item(UCase(Target.Value))(0) Target.Offset(, 2) = d.Item(UCase(Target.Value))(1) Target.Offset(, 5) = d.Item(UCase(Target.Value))(2) End If End If End If End If End Sub Các bác chỉ giúp em với xem có sai ko/ thanks S
siwtom
Thành viên gắn bó
Tham gia 19/3/08 Bài viết 2,127 Được thích 4,210concogia đã viết: Bạn chép code này đè lên cái cũ nhé Mã:Sao chép. Private Sub Worksheet_Change(ByVal Target As Range) Dim d, I, Vung, Ws Set d = CreateObject("scripting.dictionary") Set Ws = Sheets("MA") Vung = Ws.Range(Ws.[B3], Ws.[B10000].End(xlUp)).Resize(, 4) If Not Intersect(Target, Range("B4:B1000")) Is Nothing Then If Target.Count = 1 Then For I = 1 To UBound(Vung) d.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3), Vung(I, 4)) Next I If d.exists(UCase(Target.Value)) Then Target.Offset(, 1) = d.Item(UCase(Target.Value))(0) Target.Offset(, 2) = d.Item(UCase(Target.Value))(1) Target.Offset(, 5) = d.Item(UCase(Target.Value))(2) End If End If End If End Sub Thân Nhấp chuột vào đây để mở rộng...Tôi thấy có vẻ nhiều người hơi lạm dụng Dictionary. Dictionary mạnh và không dễ thay thế được trong một vài trường hợp không có nghĩa là nó tốt cho mọi trường hợp. Tỏi nếu nấu với món "này" thì tuyệt nhưng không có nghĩa là nấu món nào cũng cho tỏi. Không phải mổ trâu, lợn, gà, bóc tỏi, gọt táo đều dùng dao mổ trâu. Lợi thì chắc không mà hại thì nhiều. Sửa một chút code trên thành Mã:Sao chép. Private Sub Worksheet_Change(ByVal Target As Range) Dim I, Vung, Ws Set Ws = Sheets("MA") Vung = Ws.Range(Ws.[B3], Ws.[B10000].End(xlUp)).Resize(, 4) If Not Intersect(Target, Range("B4:B1000")) Is Nothing Then If Target.Count = 1 Then For I = 1 To UBound(Vung) If Vung(I, 1) = Ucase(Target.Value) Then Target.Offset(, 1) = Vung(I, 2) Target.Offset(, 2) = Vung(I, 3) Target.Offset(, 5) = Vung(I, 4) Exit For End If Next I End If End If End Sub nếu tôi không lầm thì code tốt hơn. Trong trường hợp xấu nhất thì cũng chỉ phải duyệt (FOR) tất cả các dòng của Vung, còn trong trường hợp tốt nhất thì chỉ duyệt có 1 dòng. Dùng Dictionary như trên luôn phải duyệt tất cả các dòng, rồi với mỗi dòng đó làm "động tác" d.Add ... (thừa) Nếu số dòng không phải là "vài" mà là "mấy trăm" (mã không phải là A --> Z mà là vd. wxyz) thì chắc chắn code dùng Dictionary như trên sẽ làm nhiều việc hơn, lâu hơn. T
tiendo1988
Thành viên chính thức
Tham gia 6/8/09 Bài viết 82 Được thích 11siwtom đã viết: Tôi thấy có vẻ nhiều người hơi lạm dụng Dictionary. Dictionary mạnh và không dễ thay thế được trong một vài trường hợp không có nghĩa là nó tốt cho mọi trường hợp. Tỏi nếu nấu với món "này" thì tuyệt nhưng không có nghĩa là nấu món nào cũng cho tỏi. Không phải mổ trâu, lợn, gà, bóc tỏi, gọt táo đều dùng dao mổ trâu. Lợi thì chắc không mà hại thì nhiều. Sửa một chút code trên thành Mã:Sao chép. Private Sub Worksheet_Change(ByVal Target As Range) Dim I, Vung, Ws Set Ws = Sheets("MA") Vung = Ws.Range(Ws.[B3], Ws.[B10000].End(xlUp)).Resize(, 4) If Not Intersect(Target, Range("B4:B1000")) Is Nothing Then If Target.Count = 1 Then For I = 1 To UBound(Vung) If Vung(I, 1) = Ucase(Target.Value) Then Target.Offset(, 1) = Vung(I, 2) Target.Offset(, 2) = Vung(I, 3) Target.Offset(, 5) = Vung(I, 4) Exit For End If Next I End If End If End Sub nếu tôi không lầm thì code tốt hơn. Trong trường hợp xấu nhất thì cũng chỉ phải duyệt (FOR) tất cả các dòng của Vung, còn trong trường hợp tốt nhất thì chỉ duyệt có 1 dòng. Dùng Dictionary như trên luôn phải duyệt tất cả các dòng, rồi với mỗi dòng đó làm "động tác" d.Add ... (thừa) Nếu số dòng không phải là "vài" mà là "mấy trăm" (mã không phải là A --> Z mà là vd. wxyz) thì chắc chắn code dùng Dictionary như trên sẽ làm nhiều việc hơn, lâu hơn. Nhấp chuột vào đây để mở rộng...Mặc dừ tôi chưa biết sử dụng các code lệnh xong tôi xin có vài ý kiến để các bác xem xét: tôi thấy code của siwtom và code của concogia đều ngắn gọn và đã đáp ứng được việc hiển thị thông tin trong các cột Sản phẩm, đơn vị, đơn giá khi nhập mã vào cột MA ở Sheet CT. Xong khi ta xóa các mã ở một dòng bất kỳ thì trên cột MA thì những thông tin ở các cột bên vẫn còn nguyên không bị mất. Các Pro có thể bổ sung thêm để đáp ứng yêu cầu khi xóa trên cột MA thì các thông tin về tên sản phẩm, đơn vị, đơn giá cùng biến mất. Các Pro thông thạo về VBA bớt chút thời gian giúp em Topic Trợ giúp CODE VBA để thay thế cho hàm Vlookup Lần chỉnh sửa cuối: 14/4/12 Q
qtm1987
Thành viên thường trực
Tham gia 15/9/09 Bài viết 340 Được thích 244 Nghề nghiệp Kế toán tổng hợptiendo1988 đã viết: .... Xong khi ta xóa các mã ở một dòng bất kỳ thì trên cột MA thì những thông tin ở các cột bên vẫn còn nguyên không bị mất. Các Pro có thể bổ sung thêm để đáp ứng yêu cầu khi xóa trên cột MA thì các thông tin về tên sản phẩm, đơn vị, đơn giá cùng biến mất. Nhấp chuột vào đây để mở rộng...Bạn có thể thêm đoạn code màu đỏ này vào code của bạn Concogia, cách làm tương tự nếu bạn muốn xóa thêm phần nào đó cho mã đó. .... If d.exists(UCase(Target.Value)) Then Target.Offset(, 1) = d.Item(UCase(Target.Value))(0) Target.Offset(, 2) = d.Item(UCase(Target.Value))(1) ElseIf IsEmpty(Target) Then Target.Offset(, 1) = "" Target.Offset(, 2) = "" End If ... T
tiendo1988
Thành viên chính thức
Tham gia 6/8/09 Bài viết 82 Được thích 11 Em đã thử thêm Code của Ban qtm1987 vào đoạn code của concogia theo hướng dẫn. Kết quả rất tốt. Em mới tiếp cận đến code nên chưa hiểu gì nhiều về các code sử dụng. Làm phiền các bác giải thích giúp em ý nghĩa của những code mà anh qtm1987 và concogia đã sử dụng để em hiểu hơn về code và có thể tùy biến vào bài của mình. Xin cảm ơn! Kkhongphai02
Thành viên mới
Tham gia 7/4/12 Bài viết 15 Được thích 2concogia đã viết: Bạn chép code này đè lên cái cũ nhé Mã:Sao chép. Private Sub Worksheet_Change(ByVal Target As Range) Dim d, I, Vung, Ws Set d = CreateObject("scripting.dictionary") Set Ws = Sheets("MA") Vung = Ws.Range(Ws.[B3], Ws.[B10000].End(xlUp)).Resize(, 4) If Not Intersect(Target, Range("B4:B1000")) Is Nothing Then If Target.Count = 1 Then For I = 1 To UBound(Vung) d.Add Vung(I, 1), Array(Vung(I, 2), Vung(I, 3), Vung(I, 4)) Next I If d.exists(UCase(Target.Value)) Then Target.Offset(, 1) = d.Item(UCase(Target.Value))(0) Target.Offset(, 2) = d.Item(UCase(Target.Value))(1) Target.Offset(, 5) = d.Item(UCase(Target.Value))(2) End If End If End If End Sub Thân Nhấp chuột vào đây để mở rộng...Chào bác 'concogia', em đã làm theo cách của bác, file excel của em chạy rất ổn, dung lượng file giảm từ 150MB xuống còn 24MB, quá tuyệt luôn. File nhanh, tuy nhiên em gặp một số vấn đề cần bác phát triển thêm giúp em. - Thứ nhất: Khi xóa mã ở Shet ‘CT’ thì các giá trị ‘Tên sp’; ‘ĐVT’, ‘Đơn giá’ vẫn giữ nguyên. (như bác ‘tiendo1988’ đã thắc mắc – bác ‘qtm1987’ đã bổ sung) - Thứ hai: Làm thế nào để khi thay đổi giá trị đơn giá ở Sheet ‘MA’ thì bên sheet CT sẽ tự động cập nhập đơn giá mới? Mong bác 'concogia', bác ‘qtm1987’ và các bác cao thủ giải quyết vấn đề này giúp em với. Thank các bác nhiều! Lần chỉnh sửa cuối: 14/4/12 K
khongphai02
Thành viên mới
Tham gia 7/4/12 Bài viết 15 Được thích 2qtm1987 đã viết: Bạn có thể thêm đoạn code màu đỏ này vào code của bạn Concogia, cách làm tương tự nếu bạn muốn xóa thêm phần nào đó cho mã đó. .... If d.exists(UCase(Target.Value)) Then Target.Offset(, 1) = d.Item(UCase(Target.Value))(0) Target.Offset(, 2) = d.Item(UCase(Target.Value))(1) ElseIf IsEmpty(Target) Then Target.Offset(, 1) = "" Target.Offset(, 2) = "" End If ... Nhấp chuột vào đây để mở rộng...Em đã thử cách của bác nhưng khi thao tác xóa từng ô thì các giá trị ở cột sản phẩm, đơn vị, đơn giá cũng mất. nhưng nếu quét nhiều ô để xóa thì các giá trị khác vẫn giữ nguyên. làm thế nào để khi quét nhiều ô để xóa thì các giá trị khác cũng bị xóa hả bác 'qtm1987'
ndu96081631
Huyền thoại GPE
Thành viên BQT Super Moderator Tham gia 5/6/08 Bài viết 30,703 Được thích 53,950khongphai02 đã viết: Em đã thử cách của bác nhưng khi thao tác xóa từng ô thì các giá trị ở cột sản phẩm, đơn vị, đơn giá cũng mất. nhưng nếu quét nhiều ô để xóa thì các giá trị khác vẫn giữ nguyên. làm thế nào để khi quét nhiều ô để xóa thì các giá trị khác cũng bị xóa hả bác 'qtm1987' Nhấp chuột vào đây để mở rộng...Đây là thiếu sót của tất cả các code từ đầu topic đến giờ Dùng sự kiện Worksheet_Change phải biết rằng Target không phải luôn là 1 cell ---> Đôi khi ngươi ta copy/paste( hoặc quét chọn khối cell rồi Delete như bạn làm) thì sao? Chính vì thế phải cho thêm công đoạn quét toàn bộ các cell thuộc Target (For Each Clls in Target chẳng hạn) Nói chung dạng bài này cũng đã từng post trên diễn đàn rồi... nếu khéo léo, có thể dùng Array để tăng tốc bảng tính Các bạn khác đang nghiên cứu về VBA code thừ cải tiến lại xem (tôi làm hoài dạng này đâm chán luôn) --------------------------------------
siwtom đã viết: Tôi thấy có vẻ nhiều người hơi lạm dụng Dictionary. Dictionary mạnh và không dễ thay thế được trong một vài trường hợp không có nghĩa là nó tốt cho mọi trường hợp. Tỏi nếu nấu với món "này" thì tuyệt nhưng không có nghĩa là nấu món nào cũng cho tỏi. Không phải mổ trâu, lợn, gà, bóc tỏi, gọt táo đều dùng dao mổ trâu. Lợi thì chắc không mà hại thì nhiều. Sửa một chút code trên thành . Nhấp chuột vào đây để mở rộng...Đây chính là lúc dùng đến Dictionary nè! Tuy nhiên, nếu khéo hơn thì ta chỉ tạo và nạp Dictionary 1 lần duy nhất (nếu Dictionary chưa được tạo) ---> Những lần sau đó của sự kiện Change, chỉ việc "vào" Dic "moi" ra xài thôi Lần chỉnh sửa cuối: 14/4/12 T
tiendo1988
Thành viên chính thức
Tham gia 6/8/09 Bài viết 82 Được thích 11ndu96081631 đã viết: Đây là thiếu sót của tất cả các code từ đầu topic đến giờ Dùng sự kiện Worksheet_Change phải biết rằng Target không phải luôn là 1 cell ---> Đôi khi ngươi ta copy/paste( hoặc quét chọn khối cell rồi Delete như bạn làm) thì sao? Chính vì thế phải cho thêm công đoạn quét toàn bộ các cell thuộc Target (For Each Clls in Target chẳng hạn) Nói chung dạng bài này cũng đã từng post trên diễn đàn rồi... nếu khéo léo, có thể dùng Array để tăng tốc bảng tính Các bạn khác đang nghiên cứu về VBA code thừ cải tiến lại xem (tôi làm hoài dạng này đâm chán luôn) -------------------------------------- Đây chính là lúc dùng đến Dictionary nè! Tuy nhiên, nếu khéo hơn thì ta chỉ tạo và nạp Dictionary 1 lần duy nhất (nếu Dictionary chưa được tạo) ---> Những lần sau đó của sự kiện Change, chỉ việc "vào" Dic "moi" ra xài thôi Nhấp chuột vào đây để mở rộng...BÁc ndu96081631 Hướng dẫn cụ thể cách thêm For Each Clls in Target như thế nào? “...có thể dùng Array để tăng tốc bảng tính” : bác gúp em và mọi người đoạn code để học hỏi thêm. Nhờ bác cùng các Pro tùy biến giúp bài của em bên Topic Cần hướng dẫn và trợ giúp về sử dụng Vlookup trong VBA excel! Xin cảm ơn!
- 1
- 2
- 3
- …
Go to page
Tiếp tục - 14
Go to page
Tiếp tục Tiếp Last Bạn phải đăng nhập hoặc đăng ký để trả lời bài viết tại đây.Bài viết mới nhất
N- Question Question
- nvthanhdienbien
- Hôm qua, lúc 15:12
- Lập Trình với Excel
- dungdodac
- 17/12/24
- Hỏi đáp những vấn đề khác
- bipbo2008
- 15/12/24
- Hàm và công thức Excel
- Question Question
- Manhhung90
- Hôm qua, lúc 19:22
- Lập Trình với Excel
- xuanthucle
- Hôm qua, lúc 17:59
- Giải thích, gỡ rối, xử lý lỗi công thức
- Đã giải quyết
- HeSanbi
- 20/9/19
- Lập Trình với Excel
- HieuCD
- Hôm qua, lúc 12:27
- Những góp ý với diễn đàn
- jack nt
- 5/4/13
- Xây dựng ứng dụng.
- Question Question
- ongke0711
- 6/10/24
- Lập Trình với Excel
- mrhh
- 6/1/22
- Lọc và sắp xếp dữ liệu
- SteveNguyen1991
- Chủ nhật lúc 21:36
- Hàm và công thức Excel
- Nguyễn Duy Tuân
- Hôm qua, lúc 09:05
- BLUESOFTS: A-Excel, A-Tools
- Nguyễn Duy Tuân
- Hôm qua, lúc 08:36
- BLUESOFTS: A-Excel, A-Tools
- aduc
- 27/10/13
- Excel và Kỹ Thuật
- Question Question
- Thanh Binh111
- Thứ sáu lúc 16:40
- Lập Trình với Excel
- likosin
- Thứ sáu lúc 09:53
- Lọc và sắp xếp dữ liệu
- OverAC
- Thứ năm lúc 22:13
- Thông tin về diễn đàn
- acrox84
- 15/12/24
- Xử lý chuỗi ký tự
- Question Question
- vuasutu08
- Thứ sáu lúc 16:03
- Lập Trình với Excel
- Question Question
- ductoan.0703
- Thứ tư lúc 14:49
- Lập Trình với Excel
Thành viên có số lượng bài viết cao nhất tháng
- Hoàng Tuấn 868 30
- HeSanbi 27
- LINHCM 25
- ptm0412 24
- hoangtuaotrang_hp_vn 21
- HieuCD 19
- ongke0711 18
- SA_DQ 18
- qtm1987 17
- huuthang_bd 16
- DeTong 15
- hvnhpro 13
- hoangminhtien 13
- BuiQuangThuan 13
- HUONGHCKT 12
- SteveNguyen1991 11
- Duy Tùng 9x 10
- GPE-Trợ Lý 9
- Nguyễn Duy Tuân 9
- befaint 8
Thành viên có điểm tương tác cao nhất tháng
- HieuCD 74
- huuthang_bd 34
- Hoàng Tuấn 868 32
- hoangtuaotrang_hp_vn 28
- hoangminhtien 24
- SA_DQ 24
- HeSanbi 23
- HUONGHCKT 22
- befaint 22
- DeTong 22
- GPE-Trợ Lý 21
- ptm0412 21
- ongke0711 15
- longtay1111 13
- Hai Lúa Miền Tây 13
- NT Ngoc Yen 12
- Phuocam 12
- Nguyễn Duy Tuân 11
- Phan Thế Hiệp 11
- OverAC 10
Đếm ngược thời gian
000 Ngày 00 Giờ 00 phút 00 giây Chúc mừng năm mới- Trang chủ
- Diễn đàn
- Excel và các ngôn ngữ lập trình khác
- Excel và các ngôn ngữ lập trình khác
- Website này sử dụng cookies. Tiếp tục sử dụng trang này, đồng nghĩa với việc bạn chấp nhận website sử dụng cookies. Chấp nhận Tìm hiểu thêm.…
Từ khóa » Cách Sử Dụng Vlookup Trong Vba
-
Cách Dùng Hàm VLOOKUP VBA Và Vòng Lặp FOR EACH Trong VBA ...
-
Application.VLOOKUP Và WorksheetFunction.VLOOKUP Trong VBA ...
-
Cách Sử Dụng Hàm VLOOKUP Tự động Trong VBA Excel - YouTube
-
Vlookup Trong VBA
-
Viết Hàm VLOOKUP Trong Vba - HelpEx
-
Hàm Công Thức Vlookup Là Gì? Hướng Dẫn Cách Sử Dụng
-
Hàm Dò Tìm Nâng Cao - Lập Trình VBA Trong Excel!
-
Tuyệt Đỉnh Excel - Tự Viết Hàm Tra Cứu VLOOKUP Sử Dụng VBA
-
Tạo Hàm Vba Trong Excel / TOP #10 Xem Nhiều Nhất & Mới Nhất 7 ...
-
Hàm InStr() Trong VBA - Học Lập Trình VBA Online - VietTuts
-
Hàm VLOOKUP Trong Excel: Cách Sử Dụng Và Ví Dụ Cụ Thể
-
Hàm DIR Trong VBA (Phần 2) - Thủ Thuật