Tôi có dữ liệu trên Sh Tmp gồm MaHH, TenHH, DVT, SL liệt kê theo thời gian nhập.
Tôi muốn trích lọc thành 1 bảng nhập duy nhất theo mahh.
- Phương án 1: Lọc duy nhất theo MaHH, các thông số còn lại dùng VLookup và Sumif.
- Phương án 2: Lọc duy nhất theo MaHH, TenHH, DVT phần SL dùng Sumif.
- Phương án 3: Lọc theo MaHH, các thông số còn lại dùng VLookup và Sumif. Nhưng mà sumif theo range
Set rngSL = .Range("D2
" & endR)
khác với name
.Range("D2
" & endR).Name = "rngSL"
Các bạn xem hộ phương án 3 này dùng sum if theo cái nào nhanh hơn.
Xem lại hộ code trên tôi viết sai chỗ nào mà chay gần 5 phút.
Cám ơn nhiều!
Tôi muốn trích lọc thành 1 bảng nhập duy nhất theo mahh.
- Phương án 1: Lọc duy nhất theo MaHH, các thông số còn lại dùng VLookup và Sumif.
PHP:
Option Explicit
Dim endR As Long, SoDong As Long, iSh As Long, eRow As Long
Dim Sh As Worksheet, WsName As String, iR As Long, rngData As Range
Sub GanTmpNhap()
With Application
.DisplayAlerts = False: .ScreenUpdating = False: .Calculation = xlCalculationManual
End With
Sheets("TongHop").Select
[A6:F65000].ClearContents
With Sheets("TMP")
endR = .[A65000].End(xlUp).Row
'Set rngData = .Range("C1:C" & endR)
'rngData.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
'endR = .[A65000].End(xlUp).Row
Set rngData = .Range("A1:A" & endR)
With rngData
.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range( _
"A5"), Unique:=True
End With
.Range("A1:C" & endR).Name = "rngData"
.Range("D2:D" & endR).Name = "rngSL"
.Range("A2:A" & endR).Name = "rngMaHH"
End With
Range("Extract").ClearContents: Names("Extract").Delete
endR = [A6].End(xlDown).Row
With Application
.Calculation = xlCalculationAutomatic
End With
With Range(Cells(6, 2), Cells(endR, 2))
.FormulaR1C1 = "=vlookup(RC1,rngData,2,0)"
.Offset(, 1).FormulaR1C1 = "=vlookup(RC1,rngData,3,0)"
End With
With Range(Cells(6, 2), Cells(endR, 3))
.Value = .Value
End With
Names("rngData").Delete
TaoSLNhap
With Application
.DisplayAlerts = True: .ScreenUpdating = True
End With
End Sub
Sub TaoSLNhap()
Range(Cells(6, 4), Cells(endR, 4)).FormulaR1C1 = "=SUMIF(rngMaHH,RC[-3],rngSL)"
Range(Cells(6, 2), Cells(endR, 4)).Value = Range(Cells(6, 2), Cells(endR, 4)).Value
Names("rngSL").Delete: Names("rngMaHH").Delete
Set rngData = Nothing
With Sheets("TMP")
.[A2:N65000].ClearContents
End With
End Sub
- Phương án 3: Lọc theo MaHH, các thông số còn lại dùng VLookup và Sumif. Nhưng mà sumif theo range
Set rngSL = .Range("D2

khác với name
.Range("D2

Các bạn xem hộ phương án 3 này dùng sum if theo cái nào nhanh hơn.
Xem lại hộ code trên tôi viết sai chỗ nào mà chay gần 5 phút.
Cám ơn nhiều!
File đính kèm
Chỉnh sửa lần cuối bởi điều hành viên: