Tìm dữ liệu theo điều kiện với VBA (2 người xem)

Liên hệ QC

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

Tranmy.Fred

Thành viên mới
Tham gia
30/9/22
Bài viết
5
Được thích
0
Dear các anh chị!
Nhờ anh chị xem thêm giúp em vấn đề này nữa, em có 2 bảng data ở 2 sheet và em muốn lấy dữ liệu từ bảng này sang bảng kia theo 3 điều kiện
1- Theo tên quy trình
2- Theo chức danh ( cột chức danh có meger cell)
3- Chỉ điền dữ liệu vào ô Mong đợi trong mảng từ G:N
E có viết Code đơn giản nhưng chạy không ra, nhờ anh xem qua file demo và hỗ trợ code giúp em
Mảng cần điền dữ liệu Sheet1
1664518833500.png
Mang data Sheet 2
1664518851171.png

Code :
Sub Add()
Dim dc As Long
Dim cc As Long
Dim a As Long
Dim b As Long
Dim i As Long
Dim j As Long
Dim k As Long
Dim Mrng As Variant
Dim Hrng As Variant
Dim Crng As Variant
dc = Sheet2.Range("B" & Rows.Count).End(xlUp).Row
cc = Sheet2.Cells(1, Columns.Count).End(xlToLeft).Column
a = Sheet1.Range("B" & Rows.Count).End(xlUp).Row
b = Sheet1.Cells(3, Columns.Count).End(xlToLeft).Column
Mrng = Sheet2.Range("B1:AA500")
Hrng = Sheet2.Range("B1:B500")
For i = 4 To a
For k = 7 To cc
For j = 7 To b
If Sheet1.Cells(2 & j).Value = Sheet2.Cells(1, k).Value Then
Sheet1.Cells(i, j + 1).Value = Application.WorksheetFunction.Index(Mrng, Application.WorksheetFunction.Match(Sheet1.Range("B" & i).Value, Hrng, 0), k)
k = k + 1
i = i + 1
j = j + 2
End If
Next j
Next k
Next i
End Sub
 

File đính kèm

Dear các anh chị!
Nhờ anh chị xem thêm giúp em vấn đề này nữa, em có 2 bảng data ở 2 sheet và em muốn lấy dữ liệu từ bảng này sang bảng kia theo 3 điều kiện
1- Theo tên quy trình
2- Theo chức danh ( cột chức danh có meger cell)
3- Chỉ điền dữ liệu vào ô Mong đợi trong mảng từ G:N
E có viết Code đơn giản nhưng chạy không ra, nhờ anh xem qua file demo và hỗ trợ code giúp em
Mảng cần điền dữ liệu Sheet1
View attachment 281530
Mang data Sheet 2
View attachment 281531

Code :
Sub Add()
Dim dc As Long
Dim cc As Long
Dim a As Long
Dim b As Long
Dim i As Long
Dim j As Long
Dim k As Long
Dim Mrng As Variant
Dim Hrng As Variant
Dim Crng As Variant
dc = Sheet2.Range("B" & Rows.Count).End(xlUp).Row
cc = Sheet2.Cells(1, Columns.Count).End(xlToLeft).Column
a = Sheet1.Range("B" & Rows.Count).End(xlUp).Row
b = Sheet1.Cells(3, Columns.Count).End(xlToLeft).Column
Mrng = Sheet2.Range("B1:AA500")
Hrng = Sheet2.Range("B1:B500")
For i = 4 To a
For k = 7 To cc
For j = 7 To b
If Sheet1.Cells(2 & j).Value = Sheet2.Cells(1, k).Value Then
Sheet1.Cells(i, j + 1).Value = Application.WorksheetFunction.Index(Mrng, Application.WorksheetFunction.Match(Sheet1.Range("B" & i).Value, Hrng, 0), k)
k = k + 1
i = i + 1
j = j + 2
End If
Next j
Next k
Next i
End Sub
Dùng công thức được không?
nếu được thử công thức này xem sao:
Mã:
H4=INDEX('Mong doi'!$B$3:$M$9;MATCH(Skill!$C4;'Mong doi'!$C$3:$C$9;0);MATCH(Skill!G$2;'Mong doi'!$B$1:$M$1;0))
Copy cho các ô khác
 
Upvote 0
Dùng công thức được không?
nếu được thử công thức này xem sao:
Mã:
H4=INDEX('Mong doi'!$B$3:$M$9;MATCH(Skill!$C4;'Mong doi'!$C$3:$C$9;0);MATCH(Skill!G$2;'Mong doi'!$B$1:$M$1;0))
Copy cho các ô khác
Dạ, em không muốn dùng công thức, vì đang muốn viết code tự động VBA để tạo nút bấm.
Với muốn data sẽ biến động theo kích thước bảng chứ không muốn kéo hết hàm ạ.
 
Upvote 0
Dạ, em không muốn dùng công thức, vì đang muốn viết code tự động VBA để tạo nút bấm.
Với muốn data sẽ biến động theo kích thước bảng chứ không muốn kéo hết hàm ạ.
dùng công thức cũng có cái hay của nó là khi thay đổi dữ liệu thì kết quả tự động thay đổi theo-dùng VBA thì phải click nút nào đó để code chạy mới có kết quả.
Với dữ liệu ít và số ô cần lấy dữ liệu ít thì dùng công thức dễ kiểm soát hơn, khi dữ liệu có thêm dòng, thêm cột, thì tất nhiên là kq cũng phải cấu trúc lại để thêm cột, thêm dòng, và khi ấy chỉ việc copy công thức là có kết quả.
 
Upvote 0
Dạ! Em đang kiếm code VBA.
Nhờ anh chị có code VBA nào có thể xử lí hướng dẫn giúp e ạ!
 
Upvote 0
Hình như dữ liệu cần mang đi bạn để trống trơn, vậy mang cái hư vô đi à?
$$$$@
 
Upvote 0
Dạ, em không muốn dùng công thức, vì đang muốn viết code tự động VBA để tạo nút bấm.
Với muốn data sẽ biến động theo kích thước bảng chứ không muốn kéo hết hàm ạ.
Thử xem.
Nhấn vào mặt cười xem điều gì đã diễn ra.
 

File đính kèm

Upvote 0
Muốn code thì có code. Click nút "RUN" để chạy code.

Mã:
Sub test()
Dim lr&, lc&, i&, j&, m&, n&, skill, mongdoi
Application.ScreenUpdating = False
With Sheets("mong doi")
    lr = .Cells(Rows.Count, "B").End(xlUp).Row
    lc = .Cells(1, Columns.Count).End(xlToLeft).Column
    mongdoi = .Range("C1", .Cells(lr, lc)).Value
End With
With Sheets("skill")
    lr = .Cells(Rows.Count, "B").End(xlUp).Row
    lc = .Cells(3, Columns.Count).End(xlToLeft).Column
    skill = .Range("B1", .Cells(lr, lc)).Value
    .Range("d4", .Cells(lr, lc)).ClearContents
End With
For i = 4 To UBound(skill)
    For j = 6 To UBound(skill, 2) - 1
        If j Mod 2 = 0 Then
            For m = 3 To UBound(mongdoi)
                For n = 5 To UBound(mongdoi, 2)
                    If skill(i, 2) = mongdoi(m, 1) And skill(2, j) = mongdoi(1, n) Then skill(i, j + 1) = mongdoi(m, n)
                Next
            Next
        End If
    Next
Next
With Sheets("skill")
    .Range("B1", .Cells(lr, lc)).Value = skill
End With
Application.ScreenUpdating = True
End Sub
 

File đính kèm

Upvote 0
Theo như mình hiểu thì sau khi điền dữ liệu vào cột Mong doi thì cần giữ nguyên dữ liệu ở cột Thuc te phải không bạn?

1664532165196.png
 
Upvote 0
Web KT

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

Back
Top Bottom