Em mới tham gia diễn đàn và đang có một vướng mắc, xin các anh chị giúp đỡ.
Vấn đề của em như sau ạ:
Sau khi e dùng vlookup để tìm ra các giá trị thực thoả mãn điều kiện, thì em muốn lập một danh sách các giá trị không thoả mãn điều kiện thành một cột thì làm như nào ạ. Em xin đính kèm VD để các anh chị xem ạ.
Em xin chân thành cảm ơn các anh chị.
Em mới tham gia diễn đàn và đang có một vướng mắc, xin các anh chị giúp đỡ.
Vấn đề của em như sau ạ:
Sau khi e dùng vlookup để tìm ra các giá trị thực thoả mãn điều kiện, thì em muốn lập một danh sách các giá trị không thoả mãn điều kiện thành một cột thì làm như nào ạ. Em xin đính kèm VD để các anh chị xem ạ.
Em xin chân thành cảm ơn các anh chị.
anh ơi em muốn thay trường dữ liệu tìm kiếm từ dạng cột sang một bảng số liệu (là các số liệu trong phần bảng màu dùng vlookup ở dưới so với bảng gốc) thì làm thế nào hả anh. Phần ghép dữ liệu từ cột vào bảng gốc vậy là đúng mong muốn của em rồi anh ạ. Em thử đổi phạm vi trong hàm mà không được ạ
Thấy tiến bộ vượt bậc trong quy trình viết code đấy!
Tuy nhiên tôi có một góp ý nhỏ: Đối với bất kỳ bài toán, bạn nên tìm cách quy nó về 1 bài toán khác thông dụng nhất
Để chi? Để mai này code của bạn còn có cơ hội áp dụng.
Nếu cứ chăm chú giải quyết nhanh gọn bài toán hiện tại thì cùng lắm code của bạn sẽ cho tốc độ nhanh, giải quyết triệt để công việc hiện tại nhưng... mai này chắc chắn code ấy chỉ để ngắm chứ không phát triển thêm được gì cả
--------------------------------------------
Bài toán của chúng ta như sau: - Tìm dữ liệu có trong bảng 1 và không có trong bảng 2
- Tìm dữ liệu có trong bảng 2 và không có trong bảng 1
- Tìm dữ liệu có trong cả 2 bảng
Vậy chỉ với hàm COUNTIF là bạn đã có ngay được mảng kết quả. Công đoạn còn lại là nối các giá trị trong mảng thành chuỗi là xong!
Ngày trước tôi viết hàm JoinText như sau:
Mã:
Function JoinText(ByVal Delimiter As String, ParamArray Arrays()) As String
Dim aTmp, arr(), Item, tmp As String
Dim i As Long, n As Long
'On Error Resume Next
For i = LBound(Arrays) To UBound(Arrays)
aTmp = Arrays(i)
If Not IsArray(aTmp) Then aTmp = Array(aTmp)
For Each Item In aTmp
If TypeName(Item) <> "Error" Then
tmp = CStr(Item)
n = n + 1
ReDim Preserve arr(1 To n)
arr(n) = tmp
End If
Next
Next
If n Then JoinText = Join(arr, Delimiter)
End Function
Hàm có tác dụng nối chuỗi nhiều điều kiện và dùng được rất nhiều dạng bài toán (chỉ cần bạn phát biểu điều kiện chính xác).
Với bài toán của chúng ta, tôi kết hợp JoinText và COUNTIF sẽ ra ngay kết quả
1> Tìm dữ liệu có trong bảng 1 mà không có trong bảng 2:
Tất cả các công thức đều phải Ctrl + Shift + Enter
-------------------------------------------------------
Ở đây code của tôi chỉ làm công việc đơn giản là: NỐI CÁC PHẦN TỬ KHÁC ERROR TRONG MẢNG THÀNH CHUỖI. Vậy cái nào không muốn nối vào thì cứ cho nó = ERROR hết. Cách triển khai điều kiện na ná như LOOKUP(2, 1/.... hoặc SUMPRODUCT((...)*(....)*(....)) mà ta vẫn thường làm
------------------------------------------------------
Tôi không dám nói code tôi hay hơn bạn nhưng tôi cảm thấy code của tôi xài hoài mà không phải viết lại hay chỉnh sửa gì cả là.. khoái rồi