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!
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 2