Nhờ viết Code cộng lũy kế

Liên hệ QC

Cao Mạnh Sơn

Tôi đồng ý
Tham gia
26/11/07
Bài viết
568
Được thích
586
Tôi có ý tưởng trình bày rõ trong file đính kèm với mong muốn anh em GPE giúp đỡ viết hộ code cộng lũy kế và hướng dẫn cách phát triển thêm code áp dụng theo mong muốn của mình. Xin nói rõ là VBA mình chỉ biết ứng dụng chứ không biết cách viết nên mong muốn được chỉ dẫn cụ thể.
Hy vọng sớm nhận được giúp đỡ của mọi người.Xin cám ơn
 

File đính kèm

File của bạn tham khảo đây

(Nhớ đọc kỹ phần hướng dẩn sửa dữ liệu!)

--=0 --=0 &&&%$R &&&%$R !$@!! !$@!!
 

File đính kèm

Upvote 0
(Nhớ đọc kỹ phần hướng dẩn sửa dữ liệu!)

--=0 --=0 &&&%$R &&&%$R !$@!! !$@!!
Thật tuyệt ! Nhưng nếu như có 1 bảng nhật ký để ghi lại Tổ, mã hàng, ngày nhập, sản lượng, và khi mình muốn sửa ngày nào thì nhập ngày, bấm nút sửa, dữ liệu ngày muốn sữa hiện ra, sau khi sửa bấm nút thực hiện nó sẽ cập nhật lại số lượng mới.
Cám ơn anh.
 
Upvote 0
(Nhớ đọc kỹ phần hướng dẩn sửa dữ liệu!)

--=0 --=0 &&&%$R &&&%$R !$@!! !$@!!
Em tìm nhưng không thấy phần hướng dẫn.Tuy nhiên em đã test rồi,nếu em thay đổi và nhập dữ liệu của ngày hôm sau,tất nhiên thực hiện tốt.Phần sửa khi em để con trỏ trong vùng cột sản lượng và sửa 1 dữ liệu nhưng nhấn nút thực hiện nó mặc kệ nhưng nhấn sửa thì nó xóa dần dữ liệu,em thấy khó hiểu.
một ý kiến nữa,em thấy khi thực hiện nó tính hết luôn cả cột,nếu dữ liệu nhiều cột chắc tính sẽ lâu,em muốn chỉ giới hạn ở vùng có dữ liệu thôi.
Em vẫn chưa biết cách phát triển thêm ra các cột khác,Bác hướng dẫn em nhé.
 
Upvote 0
Em tìm nhưng không thấy phần hướng dẫn.Tuy nhiên em đã test rồi,nếu em thay đổi và nhập dữ liệu của ngày hôm sau,tất nhiên thực hiện tốt.Phần sửa khi em để con trỏ trong vùng cột sản lượng và sửa 1 dữ liệu nhưng nhấn nút thực hiện nó mặc kệ nhưng nhấn sửa thì nó xóa dần dữ liệu,em thấy khó hiểu.
một ý kiến nữa,em thấy khi thực hiện nó tính hết luôn cả cột,nếu dữ liệu nhiều cột chắc tính sẽ lâu,em muốn chỉ giới hạn ở vùng có dữ liệu thôi.
Em vẫn chưa biết cách phát triển thêm ra các cột khác,Bác hướng dẫn em nhé.
Cái này mình cũng đã test rồi, nếu trong vùng số lượng nhập có số nào bạn chọn số lượng đó rồi nhấn nút sửa thì cột lũy kế tự động trừ ra và số sản lượng bị xóa đi. Cái này chỉ chỉnh được 1 ngày vừa nhập thôi.
 
Upvote 0
Em tìm nhưng không thấy phần hướng dẫn.
Phần hướng dẫn ngay bên phải của trang tính đó mà;
Phần sửa khi em để con trỏ trong vùng cột sản lượng và sửa 1 dữ liệu nhưng nhấn nút thực hiện nó mặc kệ nhưng nhấn sửa thì nó xóa dần dữ liệu,em thấy khó hiểu.

Khi bạn sửa trong 1 ô dữ liệu, làm sao macro biết số cũ nữa để mà trừ ra bên cột luỹ kế
Bỡi vậy macro đề ra quy trình ngược với suy nghĩ của bạn, nhưng logic trong thực tiển
phải như vậy. Tạm thời chưa có cách nào hay hơn (theo mình cho đến lúc này)

một ý kiến nữa,em thấy khi thực hiện nó tính hết luôn cả cột,nếu dữ liệu nhiều cột chắc tính sẽ lâu,em muốn chỉ giới hạn ở vùng có dữ liệu thôi.
Không có tính cả cột đâu; hắn chỉ tính vùng có số liệu mà thôi đó nha!

Em vẫn chưa biết cách phát triển thêm ra các cột khác,Bác hướng dẫn em nhé
Muốn vậy bạn hãy cho biết cần nhập vô những cột nào nữa; Quan trọng là khác gì với cột sản lượng đã khảo sát?
 
Upvote 0
To:Bác SA_DQ
Em save lại thành File.Xlsm và tiến hành các bước như sau:khi mở file ra nếu nhấn vào nút "Thực hiện" sẽ nhận được thông báo"Xin đừng nhấn nữa",nếu thay đổi ngày thành ngày khác thì cột sản lượng sẽ được xóa hết dữ liệu,giả sử lúc này cột lũy kế đang có các giá trị là 100,nếu nhập các giá trị 1 vào cột sản lượng và nhấn "Thực hiện" sẽ nhận được kết quả là 101 ở cột lũy kế.Toàn bộ các bước đến đây là OK.Bây giờ em muốn sửa dữ liệu,giả sử sửa C5,em đưa con trỏ về C5 và nhấn nút "Sửa",lập tức toàn bộ dữ liệu cột sản lượng bị xóa hết và cột lũy kế D5 có giá trị 100,các dòng khác vẫn có giá trị 101,em muốn cột sản lượng vẫn giữ nguyên các giá trị đã nhập trước đó,chưa hết,nếu lúc này nhấn tiếp "Thực hiện" thì máy bị đơ luôn và sau 1 lúc nó tắt phụt(em đã thử nhiều lần đều như vậy_xem ảnh cấu hình máy của em )

attachment.php


còn việc em kết luận nó tính hết cả cột,bác xem hình sẽ thấy cột lũy kế có giá trị 0 đến tận dòng 65536 trong khi cả cột có tói 1048576 dòng em không hiểu luôn

attachment.php

Bây giờ em muốn phát triển sang các cột khác vẫn giống dạng dữ liệu như vậy,1 cột nhập giá trị,cột kia liền kề là lũy kế,vị trí cột là do mình,bao nhiêu cột cũng là do mình nhưng chỉ tính toán trong vùng mình có dữ liệu thôi,bác hướng dẫn cụ thể để em bắt trước nhé.
Cám ơn Bác
 

File đính kèm

  • Pic.jpg
    Pic.jpg
    44.6 KB · Đọc: 126
  • laptop.jpg
    laptop.jpg
    51.7 KB · Đọc: 128
Upvote 0
To:Bác SA_DQ
(1) Bây giờ em muốn sửa dữ liệu,giả sử sửa C5,em đưa con trỏ về C5 và nhấn nút "Sửa",lập tức toàn bộ dữ liệu cột sản lượng bị xóa hết và cột lũy kế D5 có giá trị 100,các dòng khác vẫn có giá trị 101,cột sản em muốn lượng vẫn giữ nguyên các giá trị đã nhập trước đó;

(2) Chưa hết,nếu lúc này nhấn tiếp "Thực hiện" thì máy bị đơ luôn và sau 1 lúc nó tắt phụt

(3) Còn việc em kết luận nó tính hết cả cột,bác xem hình sẽ thấy cột lũy kế có giá trị 0 đến tận dòng 65536 trong khi cả cột có tói 1048576 dòng em không hiểu luôn

(4) Bây giờ em muốn phát triển sang các cột khác vẫn giống dạng dữ liệu như vậy,1 cột nhập giá trị,cột kia liền kề là lũy kế,vị trí cột là do mình,bao nhiêu cột cũng là do mình nhưng chỉ tính toán trong vùng mình có dữ liệu thôi,bác hướng dẫn cụ thể để em bắt trước nhé.
Cám ơn Bác

Câu (1) Bạn muốn bên cột SanLg giữ nguyên là chuyện nhỏ; Nhưng cho hỏi lại, thế bên cột lũy kế có phải trừ lại trị bên cột SanLg này hay không, vì trước đó đã cộng vô rồi mà!

Câu (2): Là do trong cột SanLg bạn chưa nhập 1 trị nào hết, mà đã bấm thực hiện mới vậy;
Nhưng không sao, mình đã sửa macro lại như dưới đây. Bạn chép cái này thay cho cái cũ. Chú ý để hiểu thêm:
+ Mình đã sửa lại dòng lệnh đánh số 4 & dòng lệnh đánh số 5 là được thêm mới

PHP:
Sub ThucHien()
 If [a3].Value <> [d2].Value Then
   Dim Rng As Range, Clls As Range
   
   [a3].Value = [d2].Value
4   Set Rng = Range([c5], [c65500].End(xlUp)) '<=|'
5   If Not Intersect(Rng, [C4]) Is Nothing Then Exit Sub
   For Each Clls In Rng
      With Clls
         .Offset(, 1).Value = .Offset(, 1).Value + .Value
      End With
   Next
 Else
   MsgBox "Xin Dung Nhan Nua!", , "GPE.COM"
 End If
End Sub

(3) Do bạn xài E2K7, mình xài E2K3; Cũng nhân đây bạn xem trong các macro chỗ nào có con số > 65000, bạn sửa giúp thành số dòng cực đại của trang tính của bạn dùm nha.
(Thông cảm nha, mình không còn có nhu cầu nâng cấp office nữa rồi!)

(4) Trước khi hướng dẫn, mình muốn bạn cùng mình, mà trước tiên là bạn hiểu & diễn dịch được 2 + 1 cái macro trong file đó cái đã.
Bạn thử nghiền ngẫm trước đi, sau đó có thắc mắc hỏi tiếp!

Thân ái!
 
Upvote 0
To:Bác SA_DQ
em xóa thử dòng Rng.Value = "": trong Sub Suachua thì khi nhấn sửa nó không xóa cột sản lượng đi nữa và tại Cell active giá trị bên cột lũy kế được trừ lùi bằng giá trị của Cell active,nhưng khi nhấn thực hiện thì nó cộng thêm 1 lần nữa các Cell không sửa.Em muốn phương án như sau:Khi muốn sửa Cell nào ta đưa trỏ về cell đó và nhấn nút sửa,khi đó chỉ giá trị của cell đó bị xóa và hoặc lũy kế của Cell muốn sửa bị trừ lùi,hoặc cả cột lũy kế đều bị trừ lùi coi như chưa thực hiện tính toán,nếu chỉ giá trị của cell muốn sửa thay đổi lũy kế thì khi nhấn nút Thực hiện cũng chỉ tính toán ở dòng đó thôi hoặc cả cột lũy kế đều bị trừ lùi thì khi nhấn thực hiện sẽ tính toán lại bình thường.
em cũng lờ mờ hiểu dòng lệnh của bác:trong các đoạn "Nếu-Thì-ngược lại...hay vòng lặp For-next nhưng cơ bản em chưa nắm được cú pháp các dòng lệnh nên muốn thêm các Range khác ngoài C5:C65000 em chưa biết cách,ví dụ em định thêm dòng lệnh nữa : Set Rng = Range([e5], [e65500].End(xlUp)) để khi nhập giá trị tại cột E sẽ có lũy kế tại cột F nhưng thử không được,bác viết lệnh xong kèm theo chú thích từng dòng lệnh thực hiện như thế nào,muốn phát triển thêm thực hiện ra sao ngay trong đoạn code giúp em nhé.
Cám ơn Bác
 
Upvote 0
(1) Em muốn phương án như sau:Khi muốn sửa Cell nào ta đưa trỏ về cell đó và nhấn nút sửa,khi đó chỉ giá trị của cell đó bị xóa và hoặc lũy kế của Cell muốn sửa bị trừ lùi,hoặc cả cột lũy kế đều bị trừ lùi coi như chưa thực hiện tính toán.

(2) bác viết lệnh xong kèm theo chú thích từng dòng lệnh thực hiện như thế nào,muốn phát triển thêm thực hiện ra sao ngay trong đoạn code giúp em nhé.
Cám ơn Bác

(1) Ở đây chỉ có 1 trong hai lựa chọn sau đây:

Một: Chỉ ô kề bên phải với ô đang được kích hoạt thuộc cột LuyKe (Nôm na là vậy) bị trừ lùi
Và toàn bộ trị trong cột "SanLg' cho về 0;

Hai: Cả cột LuyKe bị trừ lùi Và Ô đang được kích hoạt bị xóa trị.

Hình như bạn đang cần phương án (2), vì phương án I đang hiện hữu.

Sau đây là macro theo phương án (2):

PHP:
Sub SuaChua2()
 Dim Rng As Range, Clls As Range
 
2 Set Rng = Range("D5:D" & [D65500].End(xlUp).Row)
 If Intersect(ActiveCell.Offset(, 1), Rng) Is Nothing Then
4   MsgBox "Hay Chon Trong Vung 'SAN LUONG'", , "De Sua So Lieu"
 Else
6   For Each Clls In Rng
      With Clls
8         .Value = .Value - .Offset(, -1).Value
      End With
10   Next Clls
   ActiveCell.Value = ""
12 End If
End Sub

Giải thích các dòng lệnh:

1. Định nghĩa 2 biến đối tượng để xài;
2. Gán vùng lũy kế cho biến Rng
3. Nếu ô đang được kích hoạt không là 1 ô bên trái liền kề với vùng của biến Rng thì thực hiện lện 4 & sau đó kết thúc macro
4. Trao đổi thông tin với người dùng;
5. Nếu không thì
6. Tạo vòng lặp đến dòng lệnh 10
7. Thực hiện cú phàp With. . .End With (Nhằm giảm viết lặp lại)
8. Thực hiện trừ lùi từng ô khi đến lượt của mình trong vòng lặp
. . .
11. Ô đang kích hoạt bị xóa dữ liệu.
 
Upvote 0
Bác sửa lại giúp em dòng lênh 8,thực hiện bị báo lỗi.
theo phương án bác đưa ra em nghĩ là đã tạm ổn,bây giờ đến việc phát triển thêm các cột khác,bác chỉ cho em trong đoạn code bắt đầu từ đâu,để thêm 1 cột nữa cần phải có những điều kiện gì.
 
Upvote 0
(2)Bác sửa lại giúp em dòng lênh 8,thực hiện bị báo lỗi.
(1) Giờ đến việc phát triển thêm các cột khác,bác chỉ cho em trong đoạn code bắt đầu từ đâu,để thêm 1 cột nữa cần phải có những điều kiện gì.

Giải quyết cho vấn đề (1)
Bạn giả lập dữ liệu tiếp vô trang tính đang xài như sau:

[F4]:="Dỡ dang"; [H4]:= "Hư hỏng" & [G4]=[I4]=[D4]
Sau đó vùng 'G5:G9':=10; 'I5:I9':=5
Nhập vô 'F5:F9' các số giảm dần từ 4; Nhập vô 'H5:H9' các số giảm dần nào đó, ví dụ bắt đầu từ 5;

Cho chạy macro sau
Xem xét kết quả & so sánh với các lệnh trong macro trước tương ứng.

PHP:
Sub ThHien3Cols()
 If [a3].Value <> [d2].Value Then
   Dim Rng As Range, Clls As Range
   Dim jJ As Byte
   [a3].Value = [d2].Value
   
   For jJ = 1 To 3
      Set Rng = Choose(jJ, [C5], [F5], [H5])
      Set Rng = Range(Rng, Cells(65500, Rng.Column).End(xlUp))
      If Not Intersect(Rng, Choose(jJ, [C4], [F4], [H4])) Is Nothing Then Exit Sub
      For Each Clls In Rng
         With Clls
            .Offset(, 1).Value = .Offset(, 1).Value + .Value
         End With
      Next
   Next jJ
 Else
   MsgBox "Thoi Nhan Nua Ma!", , "GPE.COM"
 End If
End Sub

Giải quyết cho vấn đề (2)
Bạn không thể thử macro SuaChua2 bằng cách nhấn nút lệnh sửa chữa đâu nha!
Cả đây, cũng như (1), cần chạy từ cửa sổ VBE hay bằng tổ hợp các phím tắt bạn gán từ trước. :-=
 
Upvote 0
Xin lỗi SA_DQ tôi là khách qua đường, thấy bài viết trên lướt qua xem tỳ và mạo muội cho hỏi lại: (hình như vẫn đang còn một lỗi hơi buồn cười)
Ngày hiện tại của ví dụ là 9/6/2009, nhưng nếu người dùng nhập vào D2 ngày 8/6/2009 và nhập dữ liệu vào sản lượng thì cột lũy kế vẫn được cộng vào, và cứ như thế nếu nhập ngày lùi về quá khứ, và sản lượng vẫn được nhập vào thì lũy kế vẫn tăng lên???
SA_DQ nên có kế hoạch để nhắc nhở cho người dùng là nhập số liệu cho ngày hôm sau, trong trường hợp nhập ngày = ngày của D2 +2
hoặc <= ngày của D2 -1 thì thông báo là kiểm tra ngày nhập dữ liệu như thế nào miễn sao cho đúng.
 
Upvote 0
Xin lỗi SA_DQ, hình như vẫn đang còn một lỗi hơi buồn cười
Ngày hiện tại của ví dụ là 9/6/2009, nhưng nếu người dùng nhập vào D2 ngày 8/6/2009 và nhập dữ liệu vào sản lượng thì cột lũy kế vẫn được cộng vào, và cứ như thế nếu nhập ngày lùi về quá khứ, và sản lượng vẫn được nhập vào thì lũy kế vẫn tăng lên???

SA_DQ nên có kế hoạch để nhắc nhở cho người dùng là nhập số liệu cho ngày hôm sau, trong trường hợp nhập ngày = ngày của D2 +2
hoặc <= ngày của D2 -1 thì thông báo là kiểm tra ngày nhập dữ liệu như thế nào miễn sao cho đúng.

Cảnh báo là cần thiết, một khi ta đã ghi lại các ngày đã nhập;
Nhưng ở đây không thấy yêu cầu ghi lại ngày tháng đã nhập của tác giả topic.

Và mình đoan chắc bạn thừa sức gốp sức chuyện ấy;

Vậy bạn đã đề ra & nên tiếp tục luôn, để giúp cho bạn ấy thấu đáo hơn.

Chúc vui! :-=
 
Upvote 0
Cảnh báo là cần thiết, một khi ta đã ghi lại các ngày đã nhập;
Nhưng ở đây không thấy yêu cầu ghi lại ngày tháng đã nhập của tác giả topic.

Và mình đoan chắc bạn thừa sức gốp sức chuyện ấy;

Vậy bạn đã đề ra & nên tiếp tục luôn, để giúp cho bạn ấy thấu đáo hơn.

Chúc vui! :-=
Dạo này bận quá nên không vào diễn đàn để trao đổi được,để các bác đưa ý kiến mà không có phản hồi,cho em xin lỗi nhé.
Thực ra vấn đề em đưa ra nó liên quan đến công việc của phòng khác,em không làm kế hoạch nhưng em thường xuyên nhận được báo cáo kế hoạch của phòng khác,khổ nỗi mỗi ngày nhận mail qua hệ thống mail nội bộ của công ty em choáng luôn vì mỗi file nhẹ nhàng khoảng 8MB,không nhận thì không có số liệu,nhận thì chờ dài cổ và tốn bộ nhớ nên em có ý định đưa lên để vừa là học hỏi cách làm,nếu được thì cũng là giúp mình...
Qua giúp đỡ của bác SA_DQ từng bước từng bước em lờ mờ tiếp cận với cách thức xây dựng các lệnh cho đoạn code cộng lũy kế em đưa ra,Trong vấn đề xây dựng 1 Data sao cho khoa học,dễ tra cứu,em cũng hiểu là cần thiết,nếu mong muốn đưa ra chắc sẽ rất nhiều nhưng em muốn học hỏi cách thức để thự hiện ý tưởng của mình,đơn giản hơn em chỉ đưa ra 1 biểu mẫu sau đó nhờ mọi người giúp đỡ và ngồi chờ đợi,nhưng như vậy em sẽ không biết hơn những gì mình đã biết,vì vậy em mong muốn mọi người góp ý và chỉ giúp để em học hỏi.
Cho đến thời điểm này em thấy khi nhập số liệu ở 3 cột thì việc thực hiện đã được,nhưng nếu nhập không đủ 3 cột hình như không thực hiện được.
Việc sửa dữ liệu vẫn chưa đạt như mong muốn em đã đưa ra.
em gửi File dữ liệu (vì file rất nặng nên em chỉ lưu 1 phần báo cáo của 1 ngày dạng PDF)
Mong được giúp đỡ
 

File đính kèm

Upvote 0
Có bác nào còn ở đây ko ạ? Em cần nhờ viết code ạ?
 
Upvote 0
Web KT

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

Back
Top Bottom