LuuAnh980
Thành viên tiêu biểu
- Tham gia
- 28/9/22
- Bài viết
- 452
- Được thích
- 104
- Giới tính
- Nữ
Các mã số trùng nhau có xắp xếp gần nhau không hay là 1 thằng 1 nơiChào các anh chị.
Em có file, trong file em nhờ các anh chị viết code khi em gõ Đơn hàng và Mã Số hàng vào B3 và C3 của sheet "ChiTiet" thì lọc ra chi tiết xuất của Đơn hàng và mã số hàng đó. Trong file em có ví dụ ạ.
Ngay | So Phieu | Ma So | Dien Giai | So Luong | |||||||||||||||||
18-Aug-22 | SP0816VTF6 | 061560 | 6x1500x6000 | 98 | |||||||||||||||||
18-Aug-22 | SP0816VTF6 | 052060 | 5x2000x6000 | 99 | |||||||||||||||||
18-Aug-22 | SP0816VTF6 | 0820120 | 8x2000x12000 | 100 | |||||||||||||||||
18-Aug-22 | SP0816VTF6 | 2020120 | 20x2000x12000 | 101 | |||||||||||||||||
18-Aug-22 | SP0816VTF6 | 081560 | 8x1500x6000 | 102 | |||||||||||||||||
18-Aug-22 | SP0816VTF6 | 0820120 | 8x2000x12000 | 104 | |||||||||||||||||
19-Aug-22 | SP0817VTF6 | 052060 | 5x2000x6000 | 105 | |||||||||||||||||
19-Aug-22 | SP0817VTF6 | 051560 | 5x1500x6000 | 106 | |||||||||||||||||
19-Aug-22 | SP0817VTF6 | 2520120 | 25x2000x12000 | 107 | |||||||||||||||||
19-Aug-22 | SP0817VTF6 | 1020120 | 10x2000x12000 | 109 | |||||||||||||||||
19-Aug-22 | SP0817VTF6 | 0820120 | 8x2000x12000 | 110 | |||||||||||||||||
19-Aug-22 | SP0817VTF6 | 081560 | 8x1500x6000 | 111 | |||||||||||||||||
20-Aug-22 | SP0818VTF6 | 051560 | 5x1500x6000 | 113 | |||||||||||||||||
20-Aug-22 | SP0818VTF6 | 081560 | 8x1500x6000 | 114 | |||||||||||||||||
20-Aug-22 | SP0818VTF6 | 1020120 | 10x2000x12000 | 118 |
Ngay | So Phieu | Ma So | Dien Giai | So Luong | ||||||||||||||||||
19-Aug-22 | SP0817VTF6 | 051560 | 5x1500x6000 | 106 | ||||||||||||||||||
20-Aug-22 | SP0818VTF6 | 051560 | 5x1500x6000 | 113 | ||||||||||||||||||
18-Aug-22 | SP0816VTF6 | 052060 | 5x2000x6000 | 99 | ||||||||||||||||||
19-Aug-22 | SP0817VTF6 | 052060 | 5x2000x6000 | 105 | ||||||||||||||||||
18-Aug-22 | SP0816VTF6 | 061560 | 6x1500x6000 | 98 | ||||||||||||||||||
18-Aug-22 | SP0816VTF6 | 081560 | 8x1500x6000 | 102 | ||||||||||||||||||
19-Aug-22 | SP0817VTF6 | 081560 | 8x1500x6000 | 111 | ||||||||||||||||||
20-Aug-22 | SP0818VTF6 | 081560 | 8x1500x6000 | 114 | ||||||||||||||||||
18-Aug-22 | SP0816VTF6 | 0820120 | 8x2000x12000 | 100 | ||||||||||||||||||
18-Aug-22 | SP0816VTF6 | 0820120 | 8x2000x12000 | 104 | ||||||||||||||||||
19-Aug-22 | SP0817VTF6 | 0820120 | 8x2000x12000 | 110 | ||||||||||||||||||
19-Aug-22 | SP0817VTF6 | 1020120 | 10x2000x12000 | 109 | ||||||||||||||||||
20-Aug-22 | SP0818VTF6 | 1020120 | 10x2000x12000 | 118 | ||||||||||||||||||
18-Aug-22 | SP0816VTF6 | 2020120 | 20x2000x12000 | 101 | ||||||||||||||||||
19-Aug-22 | SP0817VTF6 | 2520120 | 25x2000x12000 | 107 | ||||||||||||||||||
Thử code hên sui.Chào các anh chị.
Em có file, trong file em nhờ các anh chị viết code khi em gõ Đơn hàng và Mã Số hàng vào B3 và C3 của sheet "ChiTiet" thì lọc ra chi tiết xuất của Đơn hàng và mã số hàng đó. Trong file em có ví dụ ạ.
Sub hensui()
Dim i As Long, lr As Long, arr, kq, dk As String, soma As String, tong As Double, dks As String, a As Long
With Sheets("Xuat")
lr = .Range("C" & Rows.Count).End(xlUp).Row
arr = .Range("C2:K" & lr).Value
End With
With Sheets("chitiet")
dk = .Range("B3").Value
soma = .Range("C3").Value
ReDim kq(1 To UBound(arr), 1 To 5)
For i = 1 To UBound(arr)
If CStr(arr(i, 3)) = dk And CStr(arr(i, 4)) = soma Then
a = a + 1
If a = 1 Then dks = arr(i, 5)
If dks = arr(i, 5) Then
kq(a, 1) = arr(i, 1)
kq(a, 2) = arr(i, 2)
kq(a, 3) = arr(i, 5)
kq(a, 4) = arr(i, 6)
kq(a, 5) = arr(i, 9)
tong = tong + arr(i, 9)
Else
kq(a, 4) = "ToTal"
kq(a, 5) = tong
tong = 0: a = a + 1
kq(a, 1) = arr(i, 1)
kq(a, 2) = arr(i, 2)
kq(a, 3) = arr(i, 5)
kq(a, 4) = arr(i, 6)
kq(a, 5) = arr(i, 9)
tong = tong + arr(i, 9)
dks = arr(i, 5)
End If
End If
Next i
a = a + 1
kq(a, 4) = "ToTal"
kq(a, 5) = tong
lr = .Range("D" & Rows.Count).End(xlUp).Row
If lr > 5 Then .Range("A6:E" & lr).ClearContents
If a Then .Range("A6:E6").Resize(a).Value = kq
End With
End Sub
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B3:C3")) Is Nothing Then
Dim Arr(), Res(1 To 10000, 1 To 5), i As Long, Lr1 As Long
Dim k As Long, Lr As Long, Dh As String, Smh As String
Dim Dic As Object, Key As String, Arr1(), a As Long, b As Long
On Error Resume Next
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("ChiTiet")
Dh = .Range("B3").Value
Smh = .Range("C3").Value
.Range("A6:E100000").Delete
End With
With Sheets("Xuat")
Lr = .Range("C" & Rows.Count).End(xlUp).Row
Arr = .Range("C2:O" & Lr).Value
For i = 1 To UBound(Arr)
If Arr(i, 3) = Dh And Arr(i, 4) = Smh Then
k = k + 1
Res(k, 1) = Arr(i, 1): Res(k, 2) = Arr(i, 2)
Res(k, 3) = Arr(i, 5): Res(k, 4) = Arr(i, 6)
Res(k, 5) = Arr(i, 9)
End If
Next i
End With
With Sheets("ChiTiet")
If k Then
.Range("A6").Resize(k, 5).Value = Res
Lr1 = .Range("A" & Rows.Count).End(xlUp).Row
With Range("A5:E" & Lr1)
.Sort .Cells(5, 3), 1, Header:=xlGuess
End With
Arr1 = .Range("C6:C" & Lr1).Value
For i = 1 To Lr1
Key = Arr1(i, 1)
If Not Dic.exists(Key) Then
b = b + 1
Dic.Add (Key), b
End If
Next i
a = Dic.Count
For i = 6 To Lr1 + a
If .Cells(i + 1, 3) <> .Cells(i, 3) Then
.Rows(i + 1).Insert
.Cells(i + 1, 4) = "TOTAL"
.Cells(i + 1, 5) = WorksheetFunction.SumIf(.Range("C:C"), .Range("C" & i), .Range("E:E"))
i = i + 1
End If
Next i
End If
.Range("A5").CurrentRegion.Borders.LineStyle = 1
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Set Dic = Nothing
End If
End Sub
Là dùng VBA với trình độ tối thiểu:Tức là không dùng code hả Thầy @SA_DQ , Thầy viết code dùm em với.
Bạn thay bằng code nàytới anh @Bienhoa84 : anh có thể chỉnh code cho chữ "ToTal" canh phải và số của dòng "Total" có màu đỏ đậm được không anh.
tới thầy @SA_DQ : Cám ơn thầy nhiều ạ.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B3:C3")) Is Nothing Then
Dim Arr(), Res(1 To 10000, 1 To 5), i As Long, Lr1 As Long
Dim k As Long, Lr As Long, Dh As String, Smh As String
Dim Dic As Object, Key As String, Arr1(), a As Long, b As Long
On Error Resume Next
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set Dic = CreateObject("Scripting.Dictionary")
With Sheets("ChiTiet")
Dh = .Range("B3").Value
Smh = .Range("C3").Value
.Range("A6:E100000").Delete
End With
With Sheets("Xuat")
Lr = .Range("C" & Rows.Count).End(xlUp).Row
Arr = .Range("C2:O" & Lr).Value
For i = 1 To UBound(Arr)
If Arr(i, 3) = Dh And Arr(i, 4) = Smh Then
k = k + 1
Res(k, 1) = Arr(i, 1): Res(k, 2) = Arr(i, 2)
Res(k, 3) = Arr(i, 5): Res(k, 4) = Arr(i, 6)
Res(k, 5) = Arr(i, 9)
End If
Next i
End With
With Sheets("ChiTiet")
If k Then
.Range("A6").Resize(k, 5).Value = Res
Lr1 = .Range("A" & Rows.Count).End(xlUp).Row
With Range("A5:E" & Lr1)
.Sort .Cells(5, 3), 1, Header:=xlGuess
End With
Arr1 = .Range("C6:C" & Lr1).Value
For i = 1 To Lr1
Key = Arr1(i, 1)
If Not Dic.exists(Key) Then
b = b + 1
Dic.Add (Key), b
End If
Next i
a = Dic.Count
For i = 6 To Lr1 + a
If .Cells(i + 1, 3) <> .Cells(i, 3) Then
.Rows(i + 1).Insert
.Cells(i + 1, 4) = "TOTAL"
.Cells(i + 1, 4).HorizontalAlignment = xlRight
.Cells(i + 1, 4).Font.Bold = True
.Cells(i + 1, 4).Interior.ColorIndex = 27
.Cells(i + 1, 5) = WorksheetFunction.SumIf(.Range("C:C"), .Range("C" & i), .Range("E:E"))
.Cells(i + 1, 5).Font.Bold = True
.Cells(i + 1, 5).Font.ColorIndex = 3
.Cells(i + 1, 5).Interior.ColorIndex = 27
i = i + 1
End If
Next i
End If
.Range("A5").CurrentRegion.Borders.LineStyle = 1
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Set Dic = Nothing
End If
End Sub
Bạn tải lại file #12 ha.Cám ơn anh @Bienhoa84 , cột ngày của em có định dạng dd-mmm-yy và cột mã số của em là dạng Text thì chỉnh code sao anh.
Mình nhầm thứ tự, bạn lại tải lại file #12 đi.cột mã số đã là dạng Text, nhưng sao bị mất số 0 ở đầu anh @Bienhoa84 ơi, ví dụ mã số bên sheet Xuat là 061560 qua bên sheet chitiet là 61560, mong anh xem lại giúp em.