Code lấy 1 kết quả ban đầu thôi còn những mã trùng để trống.

Liên hệ QC

HUYNHTIEN0202

Thành viên chính thức
Tham gia
22/8/14
Bài viết
92
Được thích
1
Mình có file mã sản phẩm sau
Code lấy 1 kết quả từ sheet 1,sheet 2, sheet3 qua Sheet tổng
mà chỉ lấy 1 kết quả ban đầu thôi còn những mã trùng để trống.
Do dữ liệu nhiều nên làm lại 1 sheet như file đính kèm.
Cám ơn hổ trợ
 

File đính kèm

  • LAY 1 KET QUA CON LAI DE TRONG.xlsm
    24.1 KB · Đọc: 6
Lần chỉnh sửa cuối:
Mình có file mã nhân viên sau
Code lấy 1 kết quả từ bảng 1 qua bảng 2
mà chỉ lấy 1 kết quả ban đầu thôi còn những mã trùng để trống.
Mình có bổ sung File đính kèm.
Cám ơn hổ trợ
Cái này dùng hàm cũng được mà bạn. Hay bắt buộc phải code?
1727169005605.png
 
Upvote 0
Bảng 1: DỮ LIỆUBảng 2: K.QUẢ MONG MUỐN
MSNVHỌ VÀ TÊNSỐ LƯỢNG(TT)TTMSNVHỌ VÀ TÊNSỐ LƯỢNG
TA2.2513THÁI THỊ THANH MINH?1TA2.4832ĐẶNG MINH AN TIM
5​
TA2.3653ĐỒNG THỊ THU TRANG
2​
2TA2.3653ĐỒNG THỊ THU TRANG
TA2.4648NGUYỄN HOÀNG BẢO HÂN
3​
3TA2.4648NGUYỄN HOÀNG BẢO HÂN
TA2.4832ĐẶNG MINH AN TIM
5​
4TA2.4832ĐẶNG MINH AN TIM
TA2.5030MA THỊ KIM NGUYÊN
4
?5TA2.5534NGUYỄN THỊ HỒNG SƯƠNG
6​
TA2.5268NGUYỄN HOÀNG MỸ LINH?6TA2.5456ĐOÀN THỊ KIM NGUYÊN
TA2.5456ĐOÀN THỊ KIM NGUYÊN
6​
7TA2.5458HUỲNH THỊ KIM NGÂN
TA2.5458HUỲNH THỊ KIM NGÂN
7​
8TA2.5534NGUYỄN THỊ HỒNG SƯƠNG
TA2.5529PHAN MINH NGỌC
3
?9TA2.6645VƯƠNG HUY HOA
TA2.5534NGUYỄN THỊ HỒNG SƯƠNG
6​
5​
10TA2.7449PHẠM VINH TRÂN
TA2.5542TRẦN THỊ THÙY TRANG
4
?11TA2.7684NGUYỄN THỊ THÚY VY
TA2.6645VƯƠNG HUY HOA
9​
12TA2.7859TRẦN BĂNG TÂM
TA2.7449PHẠM VINH TRÂN
10​
13TA2.5196QUANG HÂN HÂN
TA2.7684NGUYỄN THỊ THÚY VY
11​
14?TA2.5534NGUYỄN THỊ HỒNG SƯƠNG
TA2.7859TRẦN BĂNG TÂM
12​
TA2.5196QUANG HÂN HÂN
13​
 
Upvote 0
Cái này dùng hàm cũng được mà bạn. Hay bắt buộc phải code?
View attachment 304235
Do File dữ liệu nhiều nên mình chỉ tạo 1 số để hỏi , hiện đang dùng code sau nhưng không biết bổ sung thêm điều kiện gì
Private Sub CommandButton1_Click()
Dim Dic As Object, sArr(), Darr(), Rng As Range, Cll As Range, I As Long, Tem As String
Set Dic = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
'-------------------------------------------------------------------------------------------
With Sheet1
Darr = .Range("B4", .[B500000].End(xlUp)).Resize(, 5).Value
For I = 1 To UBound(Darr, 1)
Tem = Darr(I, 1) & "#" & Darr(I, 2)
If Not Dic.Exists(Tem) Then
Dic.Add Tem, Darr(I, 3)
End If
Next I
'-------------------------------------------------------------------------------------------
sArr = .Range("G4", .[G5000].End(xlUp)).Resize(, 3).Value
ReDim Darr(1 To UBound(sArr, 1), 1 To 1)
For I = 1 To UBound(sArr, 1)
Tem = sArr(I, 1) & "#" & sArr(I, 2)
If Dic.Exists(Tem) Then
Darr(I, 1) = Dic.Item(Tem)
End If
Next I
.[I4].Resize(I - 1) = Darr
End With
'-------------------------------------------------------------------------------------------
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
 
Upvote 0
Do File dữ liệu nhiều nên mình chỉ tạo 1 số để hỏi , hiện đang dùng code sau nhưng không biết bổ sung thêm điều kiện gì
Bạn nên cho code vào thẻ code để dễ nhìn hơn. Code trên chạy có vấn đề gì không? mà bạn muốn xin code mới
 
Upvote 0
Mình có file mã nhân viên sau
Code lấy 1 kết quả từ bảng 1 qua bảng 2
mà chỉ lấy 1 kết quả ban đầu thôi còn những mã trùng để trống.
Mình có bổ sung File đính kèm.
Cám ơn hổ trợ
Tham khảo bài này chắc là có hướng giải.
 
Upvote 0
Giữ liệu của mình gồm nhiều sheet trả kết qua 1 sheet , mình viết ngắn gọn
Như vậy là làm khó cho người giúp rồi, vì từ 1 sheet và từ nhiều sheets cách xử lý sẽ khác nhau. Lần sau nên trình bày đầy đủ ngay từ đầu.
Điều kiện nằm ở đoạn này nhưng ko biết xử lý thế nào nên hỏi
Bài này chắc là không khó, nhưng bạn thông cảm vì mình không hỗ trợ những trường hợp viết tắt, bạn chịu khó chờ thành viên khác hỗ trợ.
 
Upvote 0
Giữ liệu của mình gồm nhiều sheet trả kết qua 1 sheet , mình viết ngắn gọn để hỏi thêm điều kiện vào nội dung code
Điều kiện nằm ở đoạn này nhưng ko biết xử lý thế nào nên hỏi
If Dic.Exists(Tem) Then

Darr(I, 1) = Dic.Item(Tem)

End If

Next I
Code này muốn sửa thì cũng sửa được. Nhưng nói thật, giải thuật dở bẹt và code lủng củng. Thà viết lại từ đầu.
 
Upvote 0
Như vậy là làm khó cho người giúp rồi, vì từ 1 sheet và từ nhiều sheets cách xử lý sẽ khác nhau. Lần sau nên trình bày đầy đủ ngay từ đầu.

Bài này chắc là không khó, nhưng bạn thông cảm vì mình không hỗ trợ những trường hợp viết tắt, bạn chịu khó chờ thành viên khác hỗ trợ.
1 sheet hay nhiều sheet không quan trọng , mình nhìn code có thể hiệu chỉnh theo ý mình đă nhiều năm không sử dụng excel nên không nhớ có bạn nhờ mình nên lên hỏi . Cám ơn quan tâm của bạn.
 
Upvote 0
Buồn buồn làm chơi. Bám theo ý tưởng dùng Dic của bạn

PHP:
Private Sub CommandButton1_Click()
Dim ws, Arr(), Dic As Object
Dim I As Long, dArr()
Set Dic = CreateObject("scripting.dictionary")
For Each ws In Array("Sheet1", "Sheet2", "Sheet3") ' loop qua tung sheet trong array
    With Sheets(ws)
        Arr = .Range("A9:A" & .Cells(Rows.Count, "A").End(3).Row).Resize(, 2).Value
        For I = 1 To UBound(Arr)
            If Not Dic.exists(Arr(I, 1)) Then
                Dic.Add Arr(I, 1), Arr(I, 2)
            End If
        Next
    End With
Next
With Sheet1
   dArr = .Range("M7", .[M65536].End(3)).Resize(, 2).Value
   For I = 1 To UBound(dArr)
      If Dic.exists(dArr(I, 1)) Then
            dArr(I, 2) = Dic(dArr(I, 1))
            Dic.Remove dArr(I, 1) ' xoa key nay di de lan sau khong gap no nua
      End If
   Next
    .Range("N8:N100000").ClearContents
   .[M7].Resize(I - 1, 2) = dArr
End With
End Sub
 
Upvote 0
Giải thuật dùng Dic nó như vầy:
Dic đâu có cần giữ hết key cho mỗi dòng. Vì dòng tính tổng luôn luôn là dòng đầu tiên của mã cho nên nó cũng được xem như dòng đại diện của mã. Dic chỉ cần giữ địa chỉ cái dòng đại diện này.
Dữ liệu đầu vào: bài này muốn duyệt và chỉnh từng dòng cũng được; mà chép vào mảng, sau khi duyệt xong chép trờ lại worksheet cũng được.

1. Xác định vùng dữ liệu cần chỉnh
2. Duyệt từng dòng
2.1. nếu mã đã có trong keys (Exists) thì dùng địa chỉ chứa trong Item để lấy dòng tổng (dòng đạiở WorkSheet (hoặc mảng)
- 2.1.1. Lôi cái dòng đại diện ra.
- 2.1.2. Cộng value của dòng hiện tại vào value của dòng đại diện.
- 2.1.3. Xóa value ở dòng hiện tại.
2.2. Nếu không có thì add key với item là số dòng của dòng hiện tại.
 
Upvote 0
Web KT

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

Back
Top Bottom