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 ạ!