Cái này em sử dụng hàm sumif là được rồi đâu cần phải ghi code làm chi.Em xem lại số dư đầu kỳ các tài khoản nó bị trùng số liệu đó.
Sub taoso2()
ActiveCell.FormulaR1C1 = _
"=SUMIF(DATA!RC[1]:R[42]C[1],CDPS!RC[-4],DATA!RC[3]:R[42]C[3])"
Range("E12").Select
ActiveCell.FormulaR1C1 = _
"=SUMIF(DATA!R12C6:R54C6,CDPS!RC[-4],DATA!R12C8:R54C8)"
Range("F12").Select
ActiveCell.FormulaR1C1 = _
"=SUMIF(DATA!RC[1]:R[42]C[1],CDPS!RC[-5],DATA!RC[3]:R[42]C[3])"
Range("F12").Select
ActiveCell.FormulaR1C1 = _
"=SUMIF(DATA!R12C7:R54C7,CDPS!RC[-5],DATA!R12C9:R54C9)"
Range("G12").Select
ActiveCell.FormulaR1C1 = "=MAX(RC[-4]+RC[-2]-RC[-3]-RC[-1],0)"
Range("H12").Select
ActiveCell.FormulaR1C1 = "=MAX(RC[-4]+RC[-2]-RC[-5]-RC[-3],0)"
Range("E12:H12").Select
Selection.Copy
Range("E12:H76").Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWindow.ScrollRow = 2
ActiveWindow.ScrollRow = 3
ActiveWindow.ScrollRow = 4
ActiveWindow.ScrollRow = 5
ActiveWindow.ScrollRow = 6
ActiveWindow.ScrollRow = 7
ActiveWindow.ScrollRow = 8
ActiveWindow.ScrollRow = 9
ActiveWindow.ScrollRow = 10
ActiveWindow.ScrollRow = 11
ActiveWindow.ScrollRow = 13
ActiveWindow.ScrollRow = 14
ActiveWindow.ScrollRow = 15
ActiveWindow.ScrollRow = 16
ActiveWindow.ScrollRow = 18
ActiveWindow.ScrollRow = 19
ActiveWindow.ScrollRow = 20
ActiveWindow.ScrollRow = 21
ActiveWindow.ScrollRow = 23
ActiveWindow.ScrollRow = 24
ActiveWindow.ScrollRow = 25
ActiveWindow.ScrollRow = 26
ActiveWindow.ScrollRow = 27
ActiveWindow.ScrollRow = 28
ActiveWindow.ScrollRow = 29
ActiveWindow.ScrollRow = 31
ActiveWindow.ScrollRow = 32
ActiveWindow.ScrollRow = 33
ActiveWindow.ScrollRow = 34
ActiveWindow.ScrollRow = 35
ActiveWindow.ScrollRow = 36
ActiveWindow.ScrollRow = 37
ActiveWindow.ScrollRow = 38
ActiveWindow.ScrollRow = 39
ActiveWindow.ScrollRow = 40
ActiveWindow.ScrollRow = 41
ActiveWindow.ScrollRow = 42
ActiveWindow.ScrollRow = 43
ActiveWindow.ScrollRow = 44
ActiveWindow.ScrollRow = 45
ActiveWindow.ScrollRow = 46
ActiveWindow.ScrollRow = 47
ActiveWindow.ScrollRow = 48
ActiveWindow.ScrollRow = 49
ActiveWindow.ScrollRow = 50
ActiveWindow.ScrollRow = 51
End Sub
Sub taoso2()
[COLOR="SeaGreen"] 'Nhan cong thuc cho tung cot C, D,...[/COLOR]
Range("C12").Formula = "=VLOOKUP(A12,DMTK20,4,0)"
Range("D12").Formula = "=VLOOKUP(A12,DMTK20,5,0)"
Range("E12").Formula = "=SUMIF(DATA!$F$12:$F$54,CDPS!A12,DATA!$H$12:$H$54)"
Range("F12").Formula = "=SUMIF(DATA!$G$12:$G$54,CDPS!A12,DATA!$I$12:$I$54)"
Range("G12").Formula = "=MAX(C12+E12-D12-F12,0)"
Range("H12").Formula = "=MAX(D12+F12-C12-E12,0)"
Dim LastRow As Long
[COLOR="SeaGreen"] 'Nhan dong cuoi theo tai khoan o cot A[/COLOR]
LastRow = Range("A65536").End(xlUp).Row
[COLOR="SeaGreen"] 'Copy cong thuc cho vung C12:H####[/COLOR]
Range("C12:H12").Copy Range("C12:H" & LastRow)
[COLOR="SeaGreen"] 'Xoa cong thuc de dam bao toc do cua file Excel[/COLOR]
Range("C12:H" & LastRow).Value = Range("C12:H" & LastRow).Value
End Sub
Bạn hãy thay thế macro trên theo taoso2 tôi làm dưới đây:
Mã:Sub taoso2() [COLOR=seagreen]'Nhan cong thuc cho tung cot C, D,...[/COLOR] Range("C12").Formula = "=VLOOKUP(A12,DMTK20,4,0)" Range("D12").Formula = "=VLOOKUP(A12,DMTK20,5,0)" Range("E12").Formula = "=SUMIF(DATA!$F$12:$F$54,CDPS!A12,DATA!$H$12:$H$54)" Range("F12").Formula = "=SUMIF(DATA!$G$12:$G$54,CDPS!A12,DATA!$I$12:$I$54)" Range("G12").Formula = "=MAX(C12+E12-D12-F12,0)" Range("H12").Formula = "=MAX(D12+F12-C12-E12,0)" Dim LastRow As Long [COLOR=seagreen]'Nhan dong cuoi theo tai khoan o cot A[/COLOR] LastRow = Range("A65536").End(xlUp).Row [COLOR=seagreen]'Copy cong thuc cho vung C12:H####[/COLOR] Range("C12:H12").Copy Range("C12:H" & LastRow) [COLOR=seagreen]'Xoa cong thuc de dam bao toc do cua file Excel[/COLOR] Range("C12:H" & LastRow).Value = Range("C12:H" & LastRow).Value End Sub
Range("E12").Formula = "=SUMIF(DATA!$F$12:$F$54,CDPS!A12,DATA!$H$12:$H$54)"
Range("F12").Formula = "=SUMIF(DATA!$G$12:$G$54,CDPS!A12,DATA!$I$12:$I$54)"
Range("E12").Formula = "=SUMIF(DATA!$F$12:$F$54,CDPS!A12&"*",DATA!$H$12:$H$54)"
Range("F12").Formula = "=SUMIF(DATA!$G$12:$G$54,CDPS!A12&"*",DATA!$I$12:$I$54)"
Option Explicit
Sub HiddenBlankRows()
Dim eRw As Long, jJ As Byte: Dim WF, Cls As Range
eRw = [B65500].End(xlUp).Row
Application.ScreenUpdating = False
Set WF = Application.WorksheetFunction
For Each Cls In [C12].Resize(eRw)
If WF.CountIf(Cls.Resize(, 4), "<>0") = 0 Then
Cls.EntireRow.Hidden = True
End If
Next Cls
End Sub
Anh Tuân ơi, em làm được rồi. Nhưng có 1 vấn đề này em muốn hỏi thêm anh Tuân:
Nếu dữ liệu ở cột Dư đầu kỳ và cột Phát sinh không có phát sinh thì nó sẽ không hiện dòng đó nữa. Nếu 1 trong 2 cột đó mà phát sinh thì vân hiện dòng đó. Như vậy nhìn mới đẹp ah!
Anh Tuân xem lại và sửa dùm em nhé!
Sub taoso2()
[COLOR="SeaGreen"] 'Nhan cong thuc cho tung cot C, D,...[/COLOR]
Range("C12").Formula = "=VLOOKUP(A12,DMTK20,4,0)"
Range("D12").Formula = "=VLOOKUP(A12,DMTK20,5,0)"
Range("E12").Formula = "=SUMIF(DATA!$F$12:$F$54,CDPS!A12,DATA!$H$12:$H$54)"
Range("F12").Formula = "=SUMIF(DATA!$G$12:$G$54,CDPS!A12,DATA!$I$12:$I$54)"
Range("G12").Formula = "=MAX(C12+E12-D12-F12,0)"
Range("H12").Formula = "=MAX(D12+F12-C12-E12,0)"
[COLOR="SeaGreen"] 'Dong co so tien thi cho so 1 tai cot I[/COLOR]
Range("I12").Formula = "=IF(SUM(C12:H12)<>0,1,0)"
Dim LastRow As Long
Dim rng As Range
[COLOR="SeaGreen"] 'Nhan dong cuoi theo tai khoan o cot A[/COLOR]
LastRow = Range("A65536").End(xlUp).Row
Set rng = Range("C12:I" & LastRow)
[COLOR="SeaGreen"] 'Copy cong thuc tai C12:I12 cho vung C12:I####[/COLOR]
rng.AutoFilter [COLOR="SeaGreen"] 'Xoa Filter. RAT QUAN TRONG!!![/COLOR]
Range("C12:I12").Copy rng
[COLOR="SeaGreen"]'Xoa cong thuc de dam bao toc do cua file Excel[/COLOR]
rng.Value = rng.Value
[COLOR="SeaGreen"]'Nhan doi dia chi vung tu C12:I(n) thanh C11:I(n)[/COLOR]
Set rng = rng.Resize(rng.Rows.Count + 1).Offset(-1)
[COLOR="SeaGreen"] 'AutoFilter, loc lay gia tri 1 o cot I[/COLOR]
rng.AutoFilter 7, 1
[COLOR="SeaGreen"] 'An cot loc I (Trong vung C:I, Cot I voi ColumnIndex = 7[/COLOR]
rng.Columns(7).Hidden = True
Set rng = Nothing
End Sub
Em đã ghi Marco rồi. Em nhờ anh/chị sửa dùm em đoạn code cho gọn lại!
PHP:Sub taoso2() ActiveCell.FormulaR1C1 = _ "=SUMIF(DATA!RC[1]:R[42]C[1],CDPS!RC[-4],DATA!RC[3]:R[42]C[3])" Range("E12").Select ActiveCell.FormulaR1C1 = _ "=SUMIF(DATA!R12C6:R54C6,CDPS!RC[-4],DATA!R12C8:R54C8)" Range("F12").Select ActiveCell.FormulaR1C1 = _ "=SUMIF(DATA!RC[1]:R[42]C[1],CDPS!RC[-5],DATA!RC[3]:R[42]C[3])" Range("F12").Select ActiveCell.FormulaR1C1 = _ "=SUMIF(DATA!R12C7:R54C7,CDPS!RC[-5],DATA!R12C9:R54C9)" Range("G12").Select ActiveCell.FormulaR1C1 = "=MAX(RC[-4]+RC[-2]-RC[-3]-RC[-1],0)" Range("H12").Select ActiveCell.FormulaR1C1 = "=MAX(RC[-4]+RC[-2]-RC[-5]-RC[-3],0)" Range("E12:H12").Select Selection.Copy Range("E12:H76").Select ActiveSheet.Paste Application.CutCopyMode = False ActiveWindow.ScrollRow = 2 ActiveWindow.ScrollRow = 3 ActiveWindow.ScrollRow = 4 ActiveWindow.ScrollRow = 5 ActiveWindow.ScrollRow = 6 ActiveWindow.ScrollRow = 7 ActiveWindow.ScrollRow = 8 ActiveWindow.ScrollRow = 9 ActiveWindow.ScrollRow = 10 ActiveWindow.ScrollRow = 11 ActiveWindow.ScrollRow = 13 ActiveWindow.ScrollRow = 14 ActiveWindow.ScrollRow = 15 ActiveWindow.ScrollRow = 16 ActiveWindow.ScrollRow = 18 ActiveWindow.ScrollRow = 19 ActiveWindow.ScrollRow = 20 ActiveWindow.ScrollRow = 21 ActiveWindow.ScrollRow = 23 ActiveWindow.ScrollRow = 24 ActiveWindow.ScrollRow = 25 ActiveWindow.ScrollRow = 26 ActiveWindow.ScrollRow = 27 ActiveWindow.ScrollRow = 28 ActiveWindow.ScrollRow = 29 ActiveWindow.ScrollRow = 31 ActiveWindow.ScrollRow = 32 ActiveWindow.ScrollRow = 33 ActiveWindow.ScrollRow = 34 ActiveWindow.ScrollRow = 35 ActiveWindow.ScrollRow = 36 ActiveWindow.ScrollRow = 37 ActiveWindow.ScrollRow = 38 ActiveWindow.ScrollRow = 39 ActiveWindow.ScrollRow = 40 ActiveWindow.ScrollRow = 41 ActiveWindow.ScrollRow = 42 ActiveWindow.ScrollRow = 43 ActiveWindow.ScrollRow = 44 ActiveWindow.ScrollRow = 45 ActiveWindow.ScrollRow = 46 ActiveWindow.ScrollRow = 47 ActiveWindow.ScrollRow = 48 ActiveWindow.ScrollRow = 49 ActiveWindow.ScrollRow = 50 ActiveWindow.ScrollRow = 51 End Sub
(Kèm file gốc)
Sub taoso2()
With Range([A12], [A65536].End(xlUp))
.Offset(, 4).Value = "=SUMIF(DATA!R12C6:R54C6,CDPS!RC[-4],DATA!R12C8:R54C8)"
.Offset(, 5).Value = "=SUMIF(DATA!R12C7:R54C7,CDPS!RC[-5],DATA!R12C9:R54C9)"
.Offset(, 6).Value = "=MAX(RC[-4]+RC[-2]-RC[-3]-RC[-1],0)"
.Offset(, 7).Value = "=MAX(RC[-4]+RC[-2]-RC[-5]-RC[-3],0)"
With .Offset(, 4).Resize(, 4): .Value = .Value: End With
End With
End Sub
Nếu có thể NDU làm 1 code = Dic thử có nhanh hơn.Làm vầy có phải là gọn hơn không:
PHP:Sub taoso2() With Range([A12], [A65536].End(xlUp)) .Offset(, 4).Value = "=SUMIF(DATA!R12C6:R54C6,CDPS!RC[-4],DATA!R12C8:R54C8)" .Offset(, 5).Value = "=SUMIF(DATA!R12C7:R54C7,CDPS!RC[-5],DATA!R12C9:R54C9)" .Offset(, 6).Value = "=MAX(RC[-4]+RC[-2]-RC[-3]-RC[-1],0)" .Offset(, 7).Value = "=MAX(RC[-4]+RC[-2]-RC[-5]-RC[-3],0)" With .Offset(, 4).Resize(, 4): .Value = .Value: End With End With End Sub
Vâng! Tôi cũng tin là vậy!Nếu có thể NDU làm 1 code = Dic thử có nhanh hơn.
Cám ơn NDU nhiều.
Làm vầy có phải là gọn hơn không:
PHP:Sub taoso2() With Range([A12], [A65536].End(xlUp)) .Offset(, 4).Value = "=SUMIF(DATA!R12C6:R54C6,CDPS!RC[-4],DATA!R12C8:R54C8)" .Offset(, 5).Value = "=SUMIF(DATA!R12C7:R54C7,CDPS!RC[-5],DATA!R12C9:R54C9)" .Offset(, 6).Value = "=MAX(RC[-4]+RC[-2]-RC[-3]-RC[-1],0)" .Offset(, 7).Value = "=MAX(RC[-4]+RC[-2]-RC[-5]-RC[-3],0)" With .Offset(, 4).Resize(, 4): .Value = .Value: End With End With End Sub
Tuân không để ý rồiCó ngắn hơn bao nhiêu đâu bác, cách viết code đưa nhiều lệnh trên cùng một dòng sau dấu) để nhìn cho có vẻ ngắn không nên dùng, với những hàm có khối lượng code nhiều nó làm cho người ta khó đọc. Viết code cho người mới học nên thật dễ hiểu, dùng comment để giải thích.
Sub taoso2()
With Range([A12], [A65536].End(xlUp))
.Offset(, 4).Value = .....
.Offset(, 5).Value = .....
.Offset(, 6).Value = .....
.Offset(, 7).Value = .....
End With
End Sub
Range("E12").Formula = "=SUMIF(DATA!$F$12:$F$54,CDPS!A12,DATA!$H$12:$H$54)"
Range("E12").Formula = "=SUMIF(DATA!$F$12:$F$54,CDPS!A12&"*",DATA!$H$12:$H$54)"
Nhìn sơ qua đã biết viết kiểu đó sẽ saiCác anh/chị ơi, em làm được rồi! Nhưng em vẫn muốn hỏi thêm 1 chút nữa để hoàn thiện tốt hơn. Cụ thể là:
- Nếu tài khoản cấp 1 (gồm 3 số) thì nó vẫn chưa cộng tổng được (vì có một số tài khoản phải chi tiết các tài khoản nhỏ mà!?)
Em muốn thực hiện theo công thức này sao lại không được:
Thành:PHP:Range("E12").Formula = "=SUMIF(DATA!$F$12:$F$54,CDPS!A12,DATA!$H$12:$H$54)"
PHP:Range("E12").Formula = "=SUMIF(DATA!$F$12:$F$54,CDPS!A12&"*",DATA!$H$12:$H$54)"
Vậy em muốn hỏi đoạn code thứ 2 sửa như thế nào cho đúng!?
Cám ơn các anh/chị nhiều!
Nó chẳng sai gì cả chỉ sai kiểu dữ liệu thôi. Bảng DMTK dạng Number còn trong bảng CDPS dạng Text nên nó không tìm ra mà thôi. Bạn thêm dấu nháy " ' " vào trước số 911 xem. Nó lại OK
Thay câu lệnh:
With .Offset(, 1).Resize(, 8): .Value = .Value: End With
Bằng:
.Resize(, 8).Value = .Resize(, 8).Value
Nhìn sơ qua đã biết viết kiểu đó sẽ sai
Bạn cứ gõ công thức trên bảng tính, đồng thời record macro sẽ biết công thức ấy đựoc code thể hiện thế nào thôi, có khó khăn gì đâu?
Công thức cũ sẽ đựoc code biểu diển thành:
"=SUMIF(DATA!R12C6:R54C6,CDPS!RC[-4],DATA!R12C8:R54C8)"
Còn cái mới thì vầy:
"=SUMIF(DATA!R12C6:R54C6,CDPS!RC[-4]&""*"",DATA!R12C8:R54C8)"
----------------
Lưu ý: Bạn phải dùng công thức kiểu R1C1 thì mới có thể gán cùng lúc công thức cho nguyên cột đựoc
Tuân không để ý rồi
Ngăn gọn nằm ở chổ này:
Khỏi phải copy/paste (chứ không phải nằm ở mấy chổ dấu 2 chấm) ---> Đồng ý chứ?PHP:Sub taoso2() With Range([A12], [A65536].End(xlUp)) .Offset(, 4).Value = ..... .Offset(, 5).Value = ..... .Offset(, 6).Value = ..... .Offset(, 7).Value = ..... End With End Sub
Sub taoso()
With Range([A12], [A65536].End(xlUp))
.Offset(, 1).Value = "=VLOOKUP(A12,DMTK20,2,0)"
.Offset(, 2).Value = "=VLOOKUP(A12,DMTK20,4,0)"
.Offset(, 3).Value = "=VLOOKUP(A12,DMTK20,5,0)"
.Offset(, 4).Value = "=SUMIF(DATA!$F$12:$F$65000,CDPS!A12&""*"",DATA!$H$12:$H$65000)"
.Offset(, 5).Value = "=SUMIF(DATA!$G$12:$G$65000,CDPS!A12&""*"",DATA!$I$12:$I$65000)"
.Offset(, 6).Value = "=MAX(C12+E12-D12-F12,0)"
.Offset(, 7).Value = "=MAX(D12+F12-C12-E12,0)"
[B][COLOR=red].Range("C75").Formula= "=Subtotal(9,$C$12:$C$74)[/COLOR][/B]
[B][COLOR=red] .Range("D75").Formula= "=Subtotal(9,$D$12:$D$74)[/COLOR][/B]
'...Các dòng dưới nữa
.Resize(, 8).Value = .Resize(, 8).Value
'With .Offset(, 1).Resize(, 8): .Value = .Value: End With
Dim eRw As Long, jJ As Byte: Dim WF, Cls As Range
eRw = [B65500].End(xlUp).Row
Application.ScreenUpdating = False
Set WF = Application.WorksheetFunction
For Each Cls In [C12].Resize(eRw)
If WF.CountIf(Cls.Resize(, 4), "<>0") = 0 Then
Cls.EntireRow.Hidden = True
End If
Next Cls
End With
End Sub
Sub taoso()
With Range([A12], [A65536].End(xlUp))
.Offset(, 1).Value = "=VLOOKUP(A12,DMTK20,2,0)"
.Offset(, 2).Value = "=VLOOKUP(A12,DMTK20,4,0)"
.Offset(, 3).Value = "=VLOOKUP(A12,DMTK20,5,0)"
.Offset(, 4).Value = "=SUMIF(DATA!$F$12:$F$65000,CDPS!A12&""*"",DATA!$H$12:$H$65000)"
.Offset(, 5).Value = "=SUMIF(DATA!$G$12:$G$65000,CDPS!A12&""*"",DATA!$I$12:$I$65000)"
.Offset(, 6).Value = "=MAX(C12+E12-D12-F12,0)"
.Offset(, 7).Value = "=MAX(D12+F12-C12-E12,0)"
[B][COLOR=red].Range("C75").Formula= "=Subtotal(9,$C$12:$C$74)[/COLOR][/B]
[B][COLOR=red] .Range("D75").Formula= "=Subtotal(9,$D$12:$D$74)[/COLOR][/B]
'...Các dòng dưới nữa
.Resize(, 8).Value = .Resize(, 8).Value
'With .Offset(, 1).Resize(, 8): .Value = .Value: End With
Dim eRw As Long, jJ As Byte: Dim WF, Cls As Range
eRw = [B65500].End(xlUp).Row
Application.ScreenUpdating = False
Set WF = Application.WorksheetFunction
For Each Cls In [C12].Resize(eRw)
If WF.CountIf(Cls.Resize(, 4), "<>0") = 0 Then
Cls.EntireRow.Hidden = True
End If
Next Cls
End With
End Sub
Phải vầy chứThầy ndu sửa dùm em chút:
Cám ơn thầy nhiều!Mã:Sub taoso() With Range([A12], [A65536].End(xlUp)) .Offset(, 1).Value = "=VLOOKUP(A12,DMTK20,2,0)" .Offset(, 2).Value = "=VLOOKUP(A12,DMTK20,4,0)" .Offset(, 3).Value = "=VLOOKUP(A12,DMTK20,5,0)" .Offset(, 4).Value = "=SUMIF(DATA!$F$12:$F$65000,CDPS!A12&""*"",DATA!$H$12:$H$65000)" .Offset(, 5).Value = "=SUMIF(DATA!$G$12:$G$65000,CDPS!A12&""*"",DATA!$I$12:$I$65000)" .Offset(, 6).Value = "=MAX(C12+E12-D12-F12,0)" .Offset(, 7).Value = "=MAX(D12+F12-C12-E12,0)" [B][COLOR=red].Range("C75").Formula= "=Subtotal(9,$C$12:$C$74)[/COLOR][/B] [B][COLOR=red] .Range("D75").Formula= "=Subtotal(9,$D$12:$D$74)[/COLOR][/B] '...Các dòng dưới nữa .Resize(, 8).Value = .Resize(, 8).Value 'With .Offset(, 1).Resize(, 8): .Value = .Value: End With Dim eRw As Long, jJ As Byte: Dim WF, Cls As Range eRw = [B65500].End(xlUp).Row Application.ScreenUpdating = False Set WF = Application.WorksheetFunction For Each Cls In [C12].Resize(eRw) If WF.CountIf(Cls.Resize(, 4), "<>0") = 0 Then Cls.EntireRow.Hidden = True End If Next Cls End With End Sub
.Offset(.Rows.Count, 3)(1, 1).Value = "=Subtotal(109," & .Offset(, 3).Address & ")"
.Offset(.Rows.Count, 4)(1, 1).Value = "=Subtotal(109," & .Offset(, 4).Address & ")"
.Offset(.Rows.Count, 5)(1, 1).Value = "=Subtotal(109," & .Offset(, 5).Address & ")"
.Offset(.Rows.Count, 6)(1, 1).Value = "=Subtotal(109," & .Offset(, 6).Address & ")"
.Offset(.Rows.Count, 7)(1, 1).Value = "=Subtotal(109," & .Offset(, 7).Address & ")"
Sub Taoso()
On Error Resume Next
With Range([A11], [A65536].End(xlUp))
.Parent.ShowAllData
.Offset(1, 1).Value = "=VLOOKUP(A12,DMTK20,2,0)"
.Offset(1, 2).Value = "=VLOOKUP(A12,DMTK20,4,0)"
.Offset(1, 3).Value = "=VLOOKUP(A12,DMTK20,5,0)"
.Offset(1, 4).Value = "=SUMIF(DATA!$F$12:$F$65000,CDPS!A12&""*"",DATA!$H$12:$H$65000)"
.Offset(1, 5).Value = "=SUMIF(DATA!$G$12:$G$65000,CDPS!A12&""*"",DATA!$I$12:$I$65000)"
.Offset(1, 6).Value = "=MAX(C12+E12-D12-F12,0)"
.Offset(1, 7).Value = "=MAX(D12+F12-C12-E12,0)"
.Offset(.Rows.Count, 1).ClearContents
.Offset(.Rows.Count, 2)(1, 1).Value = "=Subtotal(109," & .Offset(, 2).Address & ")"
.Offset(.Rows.Count, 3)(1, 1).Value = "=Subtotal(109," & .Offset(, 3).Address & ")"
.Offset(.Rows.Count, 4)(1, 1).Value = "=Subtotal(109," & .Offset(, 4).Address & ")"
.Offset(.Rows.Count, 5)(1, 1).Value = "=Subtotal(109," & .Offset(, 5).Address & ")"
.Offset(.Rows.Count, 6)(1, 1).Value = "=Subtotal(109," & .Offset(, 6).Address & ")"
.Offset(.Rows.Count, 7)(1, 1).Value = "=Subtotal(109," & .Offset(, 7).Address & ")"
With .Resize(, 8)
.Value = .Value
.AdvancedFilter 1, [L1:L2]
End With
End With
End Sub
Thầy ndu sửa dùm em chút:
Cám ơn thầy nhiều!Mã:Sub taoso() With Range([A12], [A65536].End(xlUp)) .Offset(, 1).Value = "=VLOOKUP(A12,DMTK20,2,0)" .Offset(, 2).Value = "=VLOOKUP(A12,DMTK20,4,0)" .Offset(, 3).Value = "=VLOOKUP(A12,DMTK20,5,0)" .Offset(, 4).Value = "=SUMIF(DATA!$F$12:$F$65000,CDPS!A12&""*"",DATA!$H$12:$H$65000)" .Offset(, 5).Value = "=SUMIF(DATA!$G$12:$G$65000,CDPS!A12&""*"",DATA!$I$12:$I$65000)" .Offset(, 6).Value = "=MAX(C12+E12-D12-F12,0)" .Offset(, 7).Value = "=MAX(D12+F12-C12-E12,0)" [B][COLOR=red].Range("C75").Formula= "=Subtotal(9,$C$12:$C$74)[/COLOR][/B] [B][COLOR=red] .Range("D75").Formula= "=Subtotal(9,$D$12:$D$74)[/COLOR][/B] '...Các dòng dưới nữa .Resize(, 8).Value = .Resize(, 8).Value 'With .Offset(, 1).Resize(, 8): .Value = .Value: End With Dim eRw As Long, jJ As Byte: Dim WF, Cls As Range eRw = [B65500].End(xlUp).Row Application.ScreenUpdating = False Set WF = Application.WorksheetFunction For Each Cls In [C12].Resize(eRw) If WF.CountIf(Cls.Resize(, 4), "<>0") = 0 Then Cls.EntireRow.Hidden = True End If Next Cls End With End Sub
Ấy! Nó hiểu tất đấy! Không tin cứ thí nghiệm sẽ biết liền1/ $C$12:$C$75 ====> Sao khong record macro xem VBA nó viết ra sao? Dấu $ chỉ sử dụng trên bảng tính còn trong VBA viết thế nó không hiểu là gì hết. Yome để ý $C$12 chính là hàng 12 cột 3(cộtC) đúng không? Vậy thì trong VBA phải viết là R12C3 nó mới hiểu
.Range("C75").Formula= "=Subtotal(9,$C$12:$C$74)
.Range("D75").Formula= "=Subtotal(9,$D$12:$D$74)
Sai ở chổ .Range(..) ấy anh à! (ở trên là With Range(....) )Mình không có file cụ thể nên chưa tìm lý do chứ code nhập công thức sau không có gì sai cả
Mã:.Range("C75").Formula= "=Subtotal(9,$C$12:$C$74) .Range("D75").Formula= "=Subtotal(9,$D$12:$D$74)
Chào anh ndu và các thành viênThay vì dùng For.. Next, tôi cải tiến dùng Advanced Filter đây
Chú ý cell L2 có công thức điều kiện lọc nhé!PHP:Sub Taoso() On Error Resume Next With Range([A11], [A65536].End(xlUp)) .Parent.ShowAllData .Offset(1, 1).Value = "=VLOOKUP(A12,DMTK20,2,0)" .Offset(1, 2).Value = "=VLOOKUP(A12,DMTK20,4,0)" .Offset(1, 3).Value = "=VLOOKUP(A12,DMTK20,5,0)" .Offset(1, 4).Value = "=SUMIF(DATA!$F$12:$F$65000,CDPS!A12&""*"",DATA!$H$12:$H$65000)" .Offset(1, 5).Value = "=SUMIF(DATA!$G$12:$G$65000,CDPS!A12&""*"",DATA!$I$12:$I$65000)" .Offset(1, 6).Value = "=MAX(C12+E12-D12-F12,0)" .Offset(1, 7).Value = "=MAX(D12+F12-C12-E12,0)" .Offset(.Rows.Count, 1).ClearContents .Offset(.Rows.Count, 2)(1, 1).Value = "=Subtotal(109," & .Offset(, 2).Address & ")" .Offset(.Rows.Count, 3)(1, 1).Value = "=Subtotal(109," & .Offset(, 3).Address & ")" .Offset(.Rows.Count, 4)(1, 1).Value = "=Subtotal(109," & .Offset(, 4).Address & ")" .Offset(.Rows.Count, 5)(1, 1).Value = "=Subtotal(109," & .Offset(, 5).Address & ")" .Offset(.Rows.Count, 6)(1, 1).Value = "=Subtotal(109," & .Offset(, 6).Address & ")" .Offset(.Rows.Count, 7)(1, 1).Value = "=Subtotal(109," & .Offset(, 7).Address & ")" With .Resize(, 8) .Value = .Value .AdvancedFilter 1, [L1:L2] End With End With End Sub
.Offset(1, 1).Value = "=VLOOKUP(A12,DMTK20,2,0)"
.Offset(1, 2).Value = "=VLOOKUP(A12,DMTK20,4,0)"
.Offset(1, 3).Value = "=VLOOKUP(A12,DMTK20,5,0)"
Bác ơi, đó là Name được tạo trong bảng tính đó, Bác bấm Ctrl+F3 để xem các name tạo trong đó nhé !Chào anh ndu và các thành viên
Tôi thấy File đính kèm chỉ có Sheet "DMTK", sao tôi thấy code ở dưới là "DMTK20" cho hỏi số 20 này là gì ???
Cảm ơn!PHP:.Offset(1, 1).Value = "=VLOOKUP(A12,DMTK20,2,0)" .Offset(1, 2).Value = "=VLOOKUP(A12,DMTK20,4,0)" .Offset(1, 3).Value = "=VLOOKUP(A12,DMTK20,5,0)"
Bình thường, cũng hay kiểm tra Name. Hôm nay lại quên phéng vụ nàyBác ơi, đó là Name được tạo trong bảng tính đó, Bác bấm Ctrl+F3 để xem các name tạo trong đó nhé !
DMTK20=DMTK!$A$6:$E$78
Các thao tác trong CODE trên phần lớn là gán công thức cho cells và chuyển về Value thôi ạ!