Phương Phương mito
Thành viên thường trực
- Tham gia
- 1/5/19
- Bài viết
- 275
- Được thích
- 65
Tham khảo code trong bài viết Dùng mã vba thay thế cho hàm vlookup.Kính gửi anh chị và các bạn
Em có thể thay hàm vlookup tại cột j bằng code VBA như thế nào ạ. Tại em có code copy rồi em muốn nó thêm cái code Vlookup nữa ạ cho tiện ạ.
Dạ vang ạ. để em mày mò xem sao ạ.Tham khảo code trong bài viết Dùng mã vba thay thế cho hàm vlookup.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range, i&, TK(), MaHD()
TK = Range([C3], [C100])
ReDim MaHD(1 To UBound(TK), 1 To 1)
If Not Intersect(Target, [C3:C100]) Is Nothing Then
For i = 1 To UBound(TK)
Set Rng = Sheet2.[A1:A100].Find(TK(i, 1), , , 1)
If Not Rng Is Nothing Then
MaHD(i, 1) = Rng(, 2)
End If
Next
[J3].Resize(i - 1, 1) = MaHD
End If
End Sub
Em cảm ơn anh ạ. Code chạy được rồi ạ !Click phải chuột vào tab sheet Can doi tai khoan, chọn View code, paste đoạn code này vào, nhập mã tk sẽ cho kết quả mã huy động
chúc bạn thành công, nghiên cứu cả thớt anh @be09 cũng rất nhiều điều bổ íchMã:Private Sub Worksheet_Change(ByVal Target As Range) Dim Rng As Range, i&, TK(), MaHD() TK = Range([C3], [C100]) ReDim MaHD(1 To UBound(TK), 1 To 1) If Not Intersect(Target, [C3:C100]) Is Nothing Then For i = 1 To UBound(TK) Set Rng = Sheet2.[A1:A100].Find(TK(i, 1), , , 1) If Not Rng Is Nothing Then MaHD(i, 1) = Rng(, 2) End If Next [J3].Resize(i - 1, 1) = MaHD End If End Sub
Anh ơi cho em hỏi thêm chút ạ. Với code Private này thì nó chỉ chạy khi em bấm nút F2 và enter nó mới active ạ. Có cách gì để nó tự động không ạ.Click phải chuột vào tab sheet Can doi tai khoan, chọn View code, paste đoạn code này vào, nhập mã tk sẽ cho kết quả mã huy động
chúc bạn thành công, nghiên cứu cả thớt anh @be09 cũng rất nhiều điều bổ íchMã:Private Sub Worksheet_Change(ByVal Target As Range) Dim Rng As Range, i&, TK(), MaHD() TK = Range([C3], [C100]) ReDim MaHD(1 To UBound(TK), 1 To 1) If Not Intersect(Target, [C3:C100]) Is Nothing Then For i = 1 To UBound(TK) Set Rng = Sheet2.[A1:A100].Find(TK(i, 1), , , 1) If Not Rng Is Nothing Then MaHD(i, 1) = Rng(, 2) End If Next [J3].Resize(i - 1, 1) = MaHD End If End Sub
Đây là sự kiện Selection change, có nghĩa khi có sự thay đổi j trong ô từ C3 đến C100 là sheet được cập nhậtAnh ơi cho em hỏi thêm chút ạ. Với code Private này thì nó chỉ chạy khi em bấm nút F2 và enter nó mới active ạ. Có cách gì để nó tự động không ạ.
Bạn thử thêm code này để có nhiều lựa chọnAnh ơi cho em hỏi thêm chút ạ. Với code Private này thì nó chỉ chạy khi em bấm nút F2 và enter nó mới active ạ. Có cách gì để nó tự động không ạ.
Sub Do_Tim()
Dim Dic As Object, sArr(), i As Long, Ma(), tmp As String
Set Dic = CreateObject("scripting.dictionary")
With Sheets("Ma")
Ma = .Range("A2", .Range("A" & Rows.Count).End(3)).Resize(, 2).Value
End With
For i = 1 To UBound(Ma)
Dic(Ma(i, 1)) = Ma(i, 2)
Next
With Sheets("Can Doi Tai Khoan")
sArr = .Range("A3", .Range("A" & Rows.Count).End(3)).Resize(, 10).Value
End With
For i = 1 To UBound(sArr)
tmp = sArr(i, 3)
If Dic.exists(tmp) Then
sArr(i, 10) = Dic.Item(tmp)
End If
Next
Sheets("Can Doi Tai Khoan").[A3].Resize(UBound(sArr), UBound(sArr, 2)) = sArr
End Sub
Xin phép chủ thớt cho mình hỏi vấn đề liện quanBạn thử thêm code này để có nhiều lựa chọn
Mã:Sub Do_Tim() Dim Dic As Object, sArr(), i As Long, Ma(), tmp As String Set Dic = CreateObject("scripting.dictionary") With Sheets("Ma") Ma = .Range("A2", .Range("A" & Rows.Count).End(3)).Resize(, 2).Value End With For i = 1 To UBound(Ma) Dic(Ma(i, 1)) = Ma(i, 2) Next With Sheets("Can Doi Tai Khoan") sArr = .Range("A3", .Range("A" & Rows.Count).End(3)).Resize(, 10).Value End With For i = 1 To UBound(sArr) tmp = sArr(i, 3) If Dic.exists(tmp) Then sArr(i, 10) = Dic.Item(tmp) End If Next Sheets("Can Doi Tai Khoan").[A3].Resize(UBound(sArr), UBound(sArr, 2)) = sArr End Sub
Tôi chưa hiểu ý 2 của bạn, code vẫn lấy tham chiếu ở cột C để tìm bên sheet Ma đấy chứXin phép chủ thớt cho mình hỏi vấn đề liện quan
Chào bác. Bác có thê giải thích giúp em là
1. sArr = .Range("A3", .Range("A" & Rows.Count).End(3)).Resize(, 10).Value
End(3) trong code có nghĩa là gì không ạ?
2. em thấy code gán kết quả là cả bảng,vấy có thể xét mỗi điều kiện và gán kết quả là mỗi phần kết quả được tìm thấy chứ không tác động đến dữ liệu của các cột xung quanh được không ạ ( giống làm VLOOKUP ấy ạ,chỉ lấy điều kiện là cột C ở sheet can doi tai khoan xong qua sheet Ma lấy kết quả tìm kiếm đượn gán vào ô địch thôi ý ạ)
Cảm ơn bác nhiều
Tạo thêm một mảng có số dòng bằng mảng kết quả và chỉ có một cột thôi. Như vậy sẽ không tác động đến dữ liệu xung quanh. Bạn chế biến thử xem sao.Xin phép chủ thớt cho mình hỏi vấn đề liện quan
Chào bác. Bác có thê giải thích giúp em là
1. sArr = .Range("A3", .Range("A" & Rows.Count).End(3)).Resize(, 10).Value
End(3) trong code có nghĩa là gì không ạ?
2. em thấy code gán kết quả là cả bảng,vấy có thể xét mỗi điều kiện và gán kết quả là mỗi phần kết quả được tìm thấy chứ không tác động đến dữ liệu của các cột xung quanh được không ạ ( giống làm VLOOKUP ấy ạ,chỉ lấy điều kiện là cột C ở sheet can doi tai khoan xong qua sheet Ma lấy kết quả tìm kiếm đượn gán vào ô địch thôi ý ạ)
Cảm ơn bác nhiều
Cảm ơn Bác đã chỉ,em xin mượn code của bác sửa để học luôn được chứ ạ?Tạo thêm một mảng có số dòng bằng mảng kết quả và chỉ có một cột thôi. Như vậy sẽ không tác động đến dữ liệu xung quanh. Bạn chế biến thử xem sao.
Sub Do_Tim()
Dim Dic As Object, sArr(), i As Long, Ma(), tmp As String
Set Dic = CreateObject("scripting.dictionary")
With Sheets("Ma")
Ma = .Range("A2", .Range("A" & Rows.Count).End(3)).Resize(, 2).Value
End With
For i = 1 To UBound(Ma)
Dic(Ma(i, 1)) = Ma(i, 2)
Next
With Sheets("Can Doi Tai Khoan")
sArr = .Range("C3", .Range("c" & Rows.Count).End(3)).Resize(, 1).Value
End With
For i = 1 To UBound(sArr)
tmp = sArr(i, 1)
If Dic.exists(tmp) Then
sArr(i, 1) = Dic.Item(tmp)
Else
sArr(i, 1) = 0
End If
Next
Sheets("Can Doi Tai Khoan").[J3].Resize(UBound(sArr), UBound(sArr, 2)) = sArr
End Sub
Em vừa bắt đầu tự học VBA vào thử code của bác Hải thì code khi tìm xong gán dữ liệu từ mảng là từ cột A tới cột J ở sheet 【can doi tai khoan】. kết quả đúng nhưng khi gán như vậy thì em thấy nếu tác độc lên cả bàng thì có nhưng dữ liệu là dãy số thì bị đổi định dạng ,em vừa học nên muốn tìm hiểu để học hỏi từ các bác thôi ạ .em cảm ơn bác đã phản hồiTôi chưa hiểu ý 2 của bạn, code vẫn lấy tham chiếu ở cột C để tìm bên sheet Ma đấy chứ
Gì mà siêu trí nhớ hả bác? Chỉ có 1,2,3,4 tương đương trái, phải, lên , xuống thôi mà.End(3) hay End(4),. . . là câu lệnh giành cho những nhà siêu trí nhớ
Chúng ta nên xài ngôn ngữ tượng hình End(xlToRight),. . . .
Bộ nhớ mỗi người đều khác nhau & cũng khác nhau của 1 người do thời gian, thời tiết hay thời điểm!Gì mà siêu trí nhớ hả bác? Chỉ có 1,2,3,4 tương đương trái, phải, lên , xuống thôi mà.