Viết dùm em code cho nút cập nhât số liệu vào bảng CDPS (1 người xem)

  • Thread starter Thread starter yome
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

yome

GPE thật tuyệt vời
Tham gia
9/5/08
Bài viết
347
Được thích
113
Anh/chị viết dùm em code cập nhật dữ liệu sang bảng cân đối phát sinh.
(Câu hỏi cụ thể trong file đính kèm)
 

File đính kèm

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
 
Lần chỉnh sửa cuối:
Upvote 0
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

Cám ơn anh sealand nhiều!
 
Upvote 0
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

Cám ơn Thầy ndu nhiều! Em đã làm lại được rồi bằng cách record marco.
Vì là mới học, em rất mong thầy chỉ giúp!
 
Upvote 0
Tuân không để ý rồi
Ngăn gọn nằm ở chổ này:
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
Khỏi phải copy/paste (chứ không phải nằm ở mấy chổ dấu 2 chấm) ---> Đồng ý chứ?

Thầy ndu ơi! Em muốn có dòng tổng cộng dưới cùng của bảng tính. Em đã sửa code thế này:
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
Sao nó không cho kết quả đúng!?
 
Upvote 0
Thầy ndu sửa dùm em chút:

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

Cám ơn thầy nhiều!
 
Upvote 0
Thầy ndu sửa dùm em chút:

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
Cám ơn thầy nhiều!
Phải vầy chứ
PHP:
.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 & ")"
---------------------
Lưu ý quan trọng:
- Cái vụ ẩn dòng có ảnh hưởng rất lớn đến End(xlUp)
- Nếu trước khi chạy code mà không cho hiện lại dòng ẩn thì có thể sai bị sai (khá nguy hiểm)
 
Lần chỉnh sửa cuối:
Upvote 0
Dùng Advanced Filter

Thay vì dùng For.. Next, tôi cải tiến dùng Advanced Filter đây
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
Chú ý cell L2 có công thức điều kiện lọc nhé!
 

File đính kèm

Upvote 0
Thầy ndu sửa dùm em chút:

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
Cám ơn thầy nhiều!


1/ $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
2/ Nguyên cả đoạn chữ đỏ của yome có thể thay như sau

n=Range("A65000").End(xlUp).Row
Range("C" & n+1 & ":H" & n+1)="=SUM(R12C:R" & n & "C)"

Thân
 
Lần chỉnh sửa cuối:
Upvote 0
Anh xem ở bảng CDPS thấy có nhiều chỗ sai lắm đó nha!!không biết có phải vì số liệu chỉ giả lập thôi không nữa ??? Nếu là dữ liệu thật thì em phải xem lại định khoản tại sheet DATa.
Theo nhu bản chat của bảng CDPS thì tong số dư Nợ= tổng số dư Có.
Kiểm tra sơ bộ anh thấy các tài khoản chi phí có số dư cuối kỳ???.
 
Upvote 0
1/ $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
Ấy! Nó hiểu tất đấy! Không tin cứ thí nghiệm sẽ biết liền
 
Upvote 0
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)
 
Upvote 0
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)
Sai ở chổ .Range(..) ấy anh à! (ở trên là With Range(....) )
Không có dấu chấm thì được!
Có điều ở đây đang xét 1 Dynamic Range ---> Không thể ghi chính xác Range nào được ---> Dữ liệu dài bao nhiêu dòng thì công thức tổng phải tự động chạy theo đến đấy!
(File cụ thể nằm tại bài #1 đấy)
 
Upvote 0
Thay vì dùng For.. Next, tôi cải tiến dùng Advanced Filter đây
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
Chú ý cell L2 có công thức điều kiện lọc 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ì ???
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)"
Cảm ơn!
 
Upvote 0
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ì ???
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)"
Cảm ơn!
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é !
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 ạ!
 
Lần chỉnh sửa cuối:
Upvote 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é !
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 ạ!
Bình thường, cũng hay kiểm tra Name. Hôm nay lại quên phéng vụ này
Cảm ơn đã nhắc nhở!
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom