Tìm và đổ dữ liệu khi biết 2 điều kiện (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

ThaiDieuAnh

Thành viên hoạt động
Tham gia
8/8/16
Bài viết
139
Được thích
24
Nghề nghiệp
Xây dựng
Em có cột mã hiệu trong đó mỗi mã chứa 2 thành phần là mã chính và mã phụ (Được ngăn cách bởi dấu "_"). Em muốn khi điều kiện là có thành phần mã chính rồi thì sẽ tìm những mã hiệu tương đương (gồm cả mã chính và phụ) đổ về cell theo thứ tự.
Yêu cầu em đã viết cụ thể trong file, mong các anh chị giúp đỡ. Em xin cảm ơn!
 

File đính kèm

Em có cột mã hiệu trong đó mỗi mã chứa 2 thành phần là mã chính và mã phụ (Được ngăn cách bởi dấu "_"). Em muốn khi điều kiện là có thành phần mã chính rồi thì sẽ tìm những mã hiệu tương đương (gồm cả mã chính và phụ) đổ về cell theo thứ tự.
Yêu cầu em đã viết cụ thể trong file, mong các anh chị giúp đỡ. Em xin cảm ơn!

IFERROR(OFFSET($A$2;AGGREGATE(15;6;ROW($A$1:$A$9)/(N(1/SEARCH(LOOKUP(LEFT(E3;3);{"ACC";"AHH";"MTQ";"VOH"};{"ACC";"AHH";"MTQ";"VOH"});$A$3:$A$10)));ROW(A1)););0)
gần như là 1 công thức tổng quát. Trừ chỗ Row(A1)
Nếu mà ở trong VBA thì chỗ Row(A1) đó chắc cho chạy từ 1 tới 5 luôn, nhưng mà công thức thì chịu không nghĩ ra được cách nào, đành chỉnh bằng mắt và tay
 

File đính kèm

Upvote 0
IFERROR(OFFSET($A$2;AGGREGATE(15;6;ROW($A$1:$A$9)/(N(1/SEARCH(LOOKUP(LEFT(E3;3);{"ACC";"AHH";"MTQ";"VOH"};{"ACC";"AHH";"MTQ";"VOH"});$A$3:$A$10)));ROW(A1)););0)
gần như là 1 công thức tổng quát. Trừ chỗ Row(A1)
Nếu mà ở trong VBA thì chỗ Row(A1) đó chắc cho chạy từ 1 tới 5 luôn, nhưng mà công thức thì chịu không nghĩ ra được cách nào, đành chỉnh bằng mắt và tay
Cảm ơn các anh chị đã giúp đỡ, em vẫn muốn giải quyết bài toán bằng VBA, không biết có được không ạ?
 
Upvote 0
Cảm ơn các anh chị đã giúp đỡ, em vẫn muốn giải quyết bài toán bằng VBA, không biết có được không ạ?
Muốn VBA thì phải đưa File với tiêu đề thực tế và đính kèm một ít dữ liệu, chứ đưa ba cái giả định thì không cần suy nghĩ, suy đoán chi cho mệt.
Áp dụng vào File thực tế không được thì lại tốn công tốn sức vô ích.
 
Upvote 0
Muốn VBA thì phải đưa File với tiêu đề thực tế và đính kèm một ít dữ liệu, chứ đưa ba cái giả định thì không cần suy nghĩ, suy đoán chi cho mệt.
Áp dụng vào File thực tế không được thì lại tốn công tốn sức vô ích.
Cảm ơn anh be09, thực ra em đưa file đúng với cái em đang cần rồi ạ (chỉ giả định số liệu thôi). Em đã tập tọe chơi 2 vòng for mà không ra kết quả như mong muốn, mong anh giúp đỡ
 

File đính kèm

Upvote 0
Upvote 0
Cảm ơn anh be09, thực ra em đưa file đúng với cái em đang cần rồi ạ (chỉ giả định số liệu thôi). Em đã tập tọe chơi 2 vòng for mà không ra kết quả như mong muốn, mong anh giúp đỡ
Tôi nêu, đưa File với tiêu đề thực tế và đính kèm một ít dữ liệu có nghĩa là Mã Hiệu, thì phải có đơn vị tính, số lượng, đơn giá hoặc cũng có thể là tên nước hay gì gì đó? Để người ta hiểu mục đích chính là muốn làm cái gì rồi mới tính đến cái vụ Yêu cầu.

Cuối cùng là sẽ có giải pháp nhập liệu như thế nào để khi nhấn nút ra cái Yêu cầu.
 
Upvote 0
Cảm ơn anh be09, thực ra em đưa file đúng với cái em đang cần rồi ạ (chỉ giả định số liệu thôi). Em đã tập tọe chơi 2 vòng for mà không ra kết quả như mong muốn, mong anh giúp đỡ
Bạn thử
PHP:
Sub Tim_va_do_du_lieu()
    Dim Dic As Object, Tem As String, v As Variant
    Dim sArr, dArr, R As Long, I As Long, N As Long, K As Long
    Set Dic = CreateObject("Scripting.Dictionary")
    sArr = Range("A3", Range("A" & Rows.Count).End(xlUp)).Value
    For I = 1 To UBound(sArr)
        Tem = Split(sArr(I, 1), "_")(0): Dic(Tem) = 1
    Next I
    R = Dic.Count * 6
    ReDim dArr(1 To R, 1 To 1)
    For Each v In Dic.Keys()
        K = K + 1: dArr(K, 1) = v
        For I = 1 To UBound(sArr)
            If Split(sArr(I, 1), "_")(0) = v Then
                K = K + 1: N = N + 1: dArr(K, 1) = sArr(I, 1)
            End If
        Next I
        If N < 5 Then K = K + (5 - N): N = 0
    Next v
    Range("G3").Resize(K) = dArr
    Set Dic = Nothing
End Sub
P/s: Sửa lại tý cho đẹp
 
Lần chỉnh sửa cuối:
Upvote 0
Em có cột mã hiệu trong đó mỗi mã chứa 2 thành phần là mã chính và mã phụ (Được ngăn cách bởi dấu "_"). Em muốn khi điều kiện là có thành phần mã chính rồi thì sẽ tìm những mã hiệu tương đương (gồm cả mã chính và phụ) đổ về cell theo thứ tự.
Yêu cầu em đã viết cụ thể trong file, mong các anh chị giúp đỡ. Em xin cảm ơn!
Bạn thử code này :
PHP:
Sub a()
Dim rng As Range, cell As Range, frng As Range, fcell As Range, cellf As String, i As Long
Set rng = Range("E3:e" & [e100000].End(xlUp).Row).SpecialCells(xlCellTypeConstants)
Set frng = Range("a2:a" & [a100000].End(xlUp).Row)
For Each cell In rng
    Set fcell = frng.Find(cell & "*", LookIn:=xlValues, Lookat:=xlWhole, after:=[a2])
    i = 0
    If Not fcell Is Nothing Then
        cellf = fcell.Address
        Do
            i = i + 1
            cell.Offset(i) = fcell
            Set fcell = frng.FindNext(fcell)
        Loop While fcell.Address <> cellf
    End If
Next
End Sub
 
Upvote 0
Bạn thử
PHP:
Sub Tim_va_do_du_lieu()
    Dim Dic As Object, Tem As String, v As Variant
    Dim sArr, dArr, I As Long, N As Long, K As Long
    Set Dic = CreateObject("Scripting.Dictionary")
    sArr = Range("A3", Range("A" & Rows.Count).End(xlUp)).Value
    ReDim dArr(1 To 65535, 1 To 1)
    For I = 1 To UBound(sArr)
        Tem = Split(sArr(I, 1), "_")(0): Dic(Tem) = 1
    Next I
    For Each v In Dic.Keys()
        K = K + 1: dArr(K, 1) = v
        For I = 1 To UBound(sArr)
            If Split(sArr(I, 1), "_")(0) = v Then
                K = K + 1: N = N + 1: dArr(K, 1) = sArr(I, 1)
            End If
        Next I
        If N < 5 Then K = K + (5 - N): N = 0
    Next v
    Range("G3").Resize(K) = dArr
    Set Dic = Nothing
End Sub
Cảm ơn bác rất nhiều ạ!
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom