Cảm ơn bác nhiều. E muốn lọc theo 2 điều kiện đó là tài khoản và mã khách hàng và ở đây mới chỉ lọc theo 1 điều kiện là tài khoản
thứ nhất: khi nhập mã tài khoản vào ô vàng (chưa nhập mã khách hàng) thì sẽ lọc theo điều kiện tài khoản 3 ký tự hoặc 4 ký tự (ví dụ 1561 thì có thể lọc theo 156 hoặc 1561
thứ hai: khi nhập thêm mã khách hàng thì sẽ lọc đồng thời cả 2 điều kiện là mã tài khoản và mã khách hàng
Copy đoạn code này vào Module chạy code
[GPECODE=vb]
Sub SOCAIGPE()
Dim iR As Long, endR As Long, sR As Long, sSHTK As String
Dim ArrData(), MyDic As Object, MKH As String
With Sheets("NKC")
endR = .Cells(65000, 2).End(xlUp).Row
ArrData = .Range("A4:J" & endR).Value
End With
Dim ArrSocai(1 To 65000, 1 To 8)
Set MyDic = CreateObject("scripting.dictionary")
With Sheets("SOCAI")
sSHTK = CStr(.Range("C5").Value)
MKH = .Range("C6").Value
.Range("A11:H6500").Clear
End With
MyDic.Add sSHTK, ""
For iR = 1 To UBound(ArrData)
If MKH <> "" Then
If ArrData(iR, 5) = MKH Then
If MyDic.Exists(CStr(ArrData(iR, 8))) Then
sR = sR + 1
ArrSocai(sR, 1) = ArrData(iR, 1)
ArrSocai(sR, 2) = ArrData(iR, 2)
ArrSocai(sR, 3) = ArrData(iR, 3)
ArrSocai(sR, 4) = ArrData(iR, 7)
ArrSocai(sR, 5) = ArrData(iR, 9)
ArrSocai(sR, 6) = ArrData(iR, 5)
ArrSocai(sR, 7) = ArrData(iR, 10)
End If
If MyDic.Exists(CStr(ArrData(iR, 9))) Then
sR = sR + 1
ArrSocai(sR, 1) = ArrData(iR, 1)
ArrSocai(sR, 2) = ArrData(iR, 2)
ArrSocai(sR, 3) = ArrData(iR, 3)
ArrSocai(sR, 4) = ArrData(iR, 7)
ArrSocai(sR, 5) = ArrData(iR, 8)
ArrSocai(sR, 6) = ArrData(iR, 5)
ArrSocai(sR, 8) = ArrData(iR, 10)
End If
End If
End If
If MKH = "" Then
If MyDic.Exists(CStr(ArrData(iR, 8))) Then
sR = sR + 1
ArrSocai(sR, 1) = ArrData(iR, 1)
ArrSocai(sR, 2) = ArrData(iR, 2)
ArrSocai(sR, 3) = ArrData(iR, 3)
ArrSocai(sR, 4) = ArrData(iR, 7)
ArrSocai(sR, 5) = ArrData(iR, 9)
ArrSocai(sR, 6) = ArrData(iR, 5)
ArrSocai(sR, 7) = ArrData(iR, 10)
End If
If MyDic.Exists(CStr(ArrData(iR, 9))) Then
sR = sR + 1
ArrSocai(sR, 1) = ArrData(iR, 1)
ArrSocai(sR, 2) = ArrData(iR, 2)
ArrSocai(sR, 3) = ArrData(iR, 3)
ArrSocai(sR, 4) = ArrData(iR, 7)
ArrSocai(sR, 5) = ArrData(iR, 8)
ArrSocai(sR, 6) = ArrData(iR, 5)
ArrSocai(sR, 8) = ArrData(iR, 10)
End If
End If
Next
If sR Then
With Sheets("SOCAI").Range("A11")
.Resize(sR, 8).Value = ArrSocai
.Offset(, 6).Resize(sR, 2).NumberFormat = "#,##0"
.Offset(, 2).Resize(sR, 1).NumberFormat = "dd/mm/yyyy"
.Offset(sR, 3).Value = "Phát sinh trong k" & ChrW(7923)
.Offset(sR + 1, 3).Value = "S" & ChrW(7889) & " d" & ChrW(432) & " cu" & ChrW(7889) & "i k" & ChrW(7923)
.Offset(sR, 6).Value = "=SUM(R11C:R" & sR + 10 & "C)"
.Offset(sR, 7).Value = "=SUM(R11C:R" & sR + 10 & "C)"
Call LineDot(.Resize(sR, 8))
Call LineThin(.Offset(sR).Resize(2, 8))
End With
End If
Set MyDic = Nothing
Erase ArrData, ArrSocai
End Sub
Private Function LineDot(Rng As Range)
With Rng
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlInsideVertical).LineStyle = xlContinuous
.Borders(xlInsideHorizontal).LineStyle = xlDot
End With
End Function
Private Function LineThin(Rng As Range)
With Rng
.Borders(xlEdgeLeft).LineStyle = xlContinuous
.Borders(xlEdgeRight).LineStyle = xlContinuous
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeTop).LineStyle = xlContinuous
.Borders(xlInsideVertical).LineStyle = xlContinuous
.Borders(xlInsideHorizontal).LineStyle = xlContinuous
End With
End Function
[/GPECODE]
Nếu có đọc nhấn cảm ơn nhen