-
Tạo hàm thay thế nhiều kết quả cách nhau bằng dấu chấm phẩy bằng chuỗi tìm kiếm được
Noname > 26-02-20, 05:27 PM
Tự Tạo hàm thay thế nhiều kết quả cách nhau bằng dấu chấm phẩy bằng chuỗi tìm kiếm được trong bảng
Hàm : MultiLookup : thay thế nhiều kết quả cách nhau bằng dấu chấm phẩy bằng chuỗi tìm kiếm được trong bảng
Phát Biểu
Đề bài như sauMã:=MultiLookup(chuỗi có bao gồm nhiều giá trị cách nhau dấu chấm phẩy ;Bảng tìm kiếm)
Ta có 1 bảng tìm kiếm như sau:
Và 1 chuỗi như sau
Mã:A;C;E;F
Mục tiêu của hàm là trả về kết quả sau:
Mã:Thiếu máu;Viêm phế quản;Sâu răng;Cận
Thực hiện:
Nhấn alt+F11 tạo 1 module và dán đoạn code sau vào
Mã PHP:Function MultiLookup(s As String, R As Range)
' s bao gom nhieu chuoi cach nhau bang dau cham phay
'R laf bang can tim kiem
s1 = Split(s, ";")
For Each s2 In s1
s = WorksheetFunction.Substitute(s, s2, WorksheetFunction.VLookup(s2, R, 2, 0))
Next
MultiLookup = s
End Function
Sử dụng hàm:
Ví dụMã:=MultiLookup(chuỗi có bao gồm nhiều giá trị cách nhau dấu chấm phẩy ;Bảng tìm kiếm)
Mã:=MultiLookup(G2;B2:C8)
Kết quả
Mã:Thiếu máu;Viêm phế quản;Sâu răng;Cận
Xem file mẫu
https://www.dropbox.com/s/8gkmibgxwzntsx....xlsm?dl=0 -
RE: Tạo hàm thay thế nhiều kết quả cách nhau bằng dấu chấm phẩy bằng chuỗi tìm kiếm được
thuyyeu99 > 26-02-20, 06:33 PM
Nếu vậy anh (bạn) đã làm udf tự tạo rồi dùng function excel làm chi. -
RE: Tạo hàm thay thế nhiều kết quả cách nhau bằng dấu chấm phẩy bằng chuỗi tìm kiếm được
Noname > 26-02-20, 09:52 PM
(26-02-20, 06:33 PM)thuyyeu99 Đã viết: Nếu vậy anh (bạn) đã làm udf tự tạo rồi dùng function excel làm chi.
Không hiểu ý bạn lắm.
Có thể cách diễn đạt mình chưa đúng hoặc tối nghĩa, nhưng mục tiêu của mình là ra đáp án cho đề bài một cách hiệu quả nhất.
Cái này mình viết cho 1 bạn đang làm bệnh viện. Sẵn chia sẻ cho mọi người.
Nếu bạn có thủ thuật gì hay nhớ chia sẻ nhé -
RE: Tạo hàm thay thế nhiều kết quả cách nhau bằng dấu chấm phẩy bằng chuỗi tìm kiếm được
thuyyeu99 > 27-02-20, 12:42 AM
(26-02-20, 09:52 PM)Noname Đã viết:
Không ban diễn đạt mình hiểu hết, chắc do mình quen làm theo cách của mình là viết hàm tự tạo UDF mình ít khi sử dụng hàm của WorksheetFunction(26-02-20, 06:33 PM)thuyyeu99 Đã viết: Nếu vậy anh (bạn) đã làm udf tự tạo rồi dùng function excel làm chi.
Không hiểu ý bạn lắm.
Có thể cách diễn đạt mình chưa đúng hoặc tối nghĩa, nhưng mục tiêu của mình là ra đáp án cho đề bài một cách hiệu quả nhất.
Cái này mình viết cho 1 bạn đang làm bệnh viện. Sẵn chia sẻ cho mọi người.
Nếu bạn có thủ thuật gì hay nhớ chia sẻ nhé
Mã:Function MultiLookupthuy(s As String, R As Range)
Dim i As Integer, mypos As Integer
Dim s1 As String
Dim arrVung As Variant
arrVung = R.value
s1 = s
For i = LBound(arrVung, 1) To UBound(arrVung, 1)
mypos = InStr(1, s, arrVung(i, 1), 1)
If mypos > 0 Then
s1 = Replace(s1, arrVung(i, 1), arrVung(i, 2))
End If
Next
MultiLookupthuy = s1
End Function -
RE: Tạo hàm thay thế nhiều kết quả cách nhau bằng dấu chấm phẩy bằng chuỗi tìm kiếm được
ongke0711 > 27-02-20, 11:30 AM
(27-02-20, 12:42 AM)thuyyeu99 Đã viết:
Mã:Function MultiLookupthuy(s As String, R As Range)
Dim i As Integer
Dim s1 As String
Dim arrVung As Variant
arrVung = R.value
s1 = s
For i = LBound(arrVung, 1) To UBound(arrVung, 1)
mypos = InStr(1, s, arrVung(i, 1), 1)
If mypos > 0 Then
s1 = Replace(s1, arrVung(i, 1), arrVung(i, 2))
End If
Next
MultiLookupthuy = s1
End Function
@thuyyeu99:
Đoạn code này đâu cần Replace em.
s1 = Replace(s1, arrVung(i, 1), arrVung(i, 2))
==> s1 = arrVung (i,2) là được rồi.
@Noname:
Trước đây trong Access, tôi và bạn MTNQ cũng có làm cái vụ tương tự: tìm triệu chứng bệnh và gán nối tiếp nhau.
Trong Excel thì chưa ngâm cứu chuyển qua Excel như thế nào
Bác xem cái hình demo bên dưới.
Trong listbox khi gõ nó hiện tên tùm lum là tôi thêm 60.000 dòng dữ liệu vô để kiểm tra tốc độ tìm kiếm có chậm lắm không thôi và các bạn cũng thấy tốc độ khá tốt.
-
RE: Tạo hàm thay thế nhiều kết quả cách nhau bằng dấu chấm phẩy bằng chuỗi tìm kiếm được
thuyyeu99 > 27-02-20, 11:33 AM
(27-02-20, 11:30 AM)ongke0711 Đã viết:
Repale để cho nó nằm đúng cái thứ tự của mã đưa vào anh A,C,E,B,D(27-02-20, 12:42 AM)thuyyeu99 Đã viết:
Mã:Function MultiLookupthuy(s As String, R As Range)
Dim i As Integer
Dim s1 As String
Dim arrVung As Variant
arrVung = R.value
s1 = s
For i = LBound(arrVung, 1) To UBound(arrVung, 1)
mypos = InStr(1, s, arrVung(i, 1), 1)
If mypos > 0 Then
s1 = Replace(s1, arrVung(i, 1), arrVung(i, 2))
End If
Next
MultiLookupthuy = s1
End Function
@thuyyeu99:
Đoạn code này đâu cần Replace em.
s1 = Replace(s1, arrVung(i, 1), arrVung(i, 2))
==> s1 = arrVung (i,2) là được rồi.
@Noname:
Trước đây trong Access, tôi và bạn MTNQ cũng có làm cái vụ tương tự: tìm triệu chứng bệnh và gán nối tiếp nhau.
Trong Excel thì chưa ngâm cứu chuyển qua Excel như thế nào
Bác xem cái hình demo bên dưới.
-
RE: Tạo hàm thay thế nhiều kết quả cách nhau bằng dấu chấm phẩy bằng chuỗi tìm kiếm được
thuyyeu99 > 27-02-20, 11:41 AM
-
RE: Tạo hàm thay thế nhiều kết quả cách nhau bằng dấu chấm phẩy bằng chuỗi tìm kiếm được
Xuân Thanh > 27-02-20, 11:48 AM
Viết thành cái UDF là chính xác nhất
Xem lại cái này : mypos = InStr(1, s, arrVung(i, 1), 1)