Tăng tốc tính toán (1 người xem)

Liên hệ QC

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

trongdungs

Thành viên hoạt động
Tham gia
19/5/09
Bài viết
147
Được thích
13
Nghề nghiệp
sinh vien
files excel này mới có bộ khung, chưa có dữ liệu mà chạy như rùa rồi. Các bác giúp em cải tiến công thức để tăng tốc độ tính toán lên với.


em xin cám ơn trước.

http://www.mediafire.com/file/yj5m502dj8x2e8u/Vinhloi.zip

đã gần 50 lượt khách ghé thăm mà chưa bác nào giúp được. vậy là không có cách nào thì phải. Buồn thật.
 
Chỉnh sửa lần cuối bởi điều hành viên:
Dùng toàn Sumproduct, lại còn link đến file khác. Không chậm mới là lạ.
Do chưa hiểu công thức nên chưa có gợi ý gì cho bạn được (không phải là quá khó, mà là gần như bị treo máy)
 
Upvote 0
Có cách chứ không fải không, đồng hương thân mến! Nhưng . . .

Đã gần 50 lượt khách ghé thăm mà chưa bác nào giúp được. vậy là không có cách nào thì phải. Buồn thật.
Mình dùng con dao mổ này :
PHP:
Option Explicit
Sub LietKeTrangTinh()
 Dim Sh As Worksheet
 
 Sheets("Main").Select:    On Error Resume Next
 For Each Sh In Worksheets
   With Sh.Cells.SpecialCells(xlCellTypeFormulas, 23)
      .Interior.ColorIndex = 34 + Sh.Index Mod 11
   End With
 Next Sh
End Sub
Thì thấy file 'VinhLoi' của bạn đa số là công thức SUMIF(); Tuy nhiên có đến 43 trang tính đầy công thức thì cũng năng thật.

Hơn nữa bạn mới cài công thức thôi; Các công thức này chưa lấy số liệu từ đâu cả (Do bạn chưa nhập số liệu cho chúng). Nên chỉ có bạn mới biết các trang tính chúng vận hành nhanh hay chậm thế nào. Còn mình thì thua trong vấn đề này. Đã vậy thì làm sao có mốc thời gian để cải tiến hay cải lùi hở bạn?

Theo mình bạn chỉ nên đưa workbook VinhLoi lên thôi nhưng với khoảng 20-25 trang tính. Nhưng các trang đưa lên này có đầy đủ số liệu hay bạn fải mô tả cách nhập liệu vô 1 trang tính làm ví dụ.
Có những cái đó mới có cơ sở giúp bạn rút ngắn hay kéo dài thời gian vận hành trên workbook của bạn được.

Hướng mình gợi í là dùng macro thay cho toàn bộ các công thức SUMIF() trong các trang tính.

Chờ ý kiến của bạn!
 
Upvote 0
cảm ơn các bác đã quan tâm. em bổ sung thông tin theo yêu cầu các bác đây.

Em gửi lên 1 workspace , ở workspace này, file PNN_VT.xls em đã nhập 1 số dữ liệu rồi, các công thức sumif trong file này không quan trọng. quan trọng là các công thức trong các file CC_**** . Nặng là nặng ở các file CC_**** này. dữ liệu được nhập ở PNN_VT.xls và kết quả sẽ chạy sang các file CC_**

em còn gặp sự cố là nếu mở file CC_**** lên mà chưa mở file PNN_VT.xls thì máy chạy rất chậm. máy cấu hình yếu có thể bị treo. Nếu mở PNN_VT lên trước thì máy cấu hình yếu cũng chạy được, chỉ có điều chạy chậm.

đây là toàn bộ file bao gồm cả file workspace

http://www.mediafire.com/?6iz7c6rp4s92skg
 
Upvote 0
Nói thực đối với những file Excel thiết kế dạng này không khả thi, giống như trước đây tôi làm file Ke Toan cũng vậy. Khi chưa có dữ liệu nó chạy ro ro. Khi nhập dữ liệu nó đơ ra. Thời buổi này mà ngồi chờ máy tính thì thật buồn.
Giải pháp tình thế là tạm tắt tính toán tự động để làm việc khác. Còn giải quyết triệt để phải áp dụng trích rút dữ liệu bằng VBA kết hợp công cụ Excel hay ADO. Anh Ptm0412, HYen là các tiền bối về vấn đề này đã đề cập. Bạn tham khảo và kết hợp sự trợ giúp của anh em thì mới giải quyết được.
 
Upvote 0
140 lượt khách rồi, vẫn không có tiến triển gì. buồn!
Lại "nóng trong người" rồi.
Cái thằng CC_*** được link đến PNN_VT và sử dụng toàn công thức mảng (SUMPRODUCT), cái này không chậm mới là lạ.
Như sealand đã góp ý, cần phải chuyển chèo thành cải lương.
 
Upvote 0
Bạn nên thử nhốt chung các workbooks vô trong workbook PNN_VT.xls

Bằng cách thêm từng workbook khác vô workbook PNN_VT.xls; Mỗi lần như thề ta đều điền công thức cho đủ vô 9 trang tính của workbook đang thêm vào.

Như vậy đến lúc nào máy chạy rùa thi bạn báo lên diễn đàn;
Sẽ có người chuyển sang dùng macro để tìm dữ liệu thay cho các công thức dài ngoằng của bạn
Cũng có thể fương án này khả dĩ hơn fương cách mà bạn đang làm!

Chúc tuần làm việc hiệu quả.
 
Upvote 0
Bằng cách thêm từng workbook khác vô workbook PNN_VT.xls; Mỗi lần như thề ta đều điền công thức cho đủ vô 9 trang tính của workbook đang thêm vào.

Như thế có nghĩa là đưa các sheet 10-11, 11-12,... của các file CC_*** vào file PNN_VT.xls phải không. Em đã từng để thế, nhưng quá chậm nên em mới chuyển các sheet 10-11, 11-12.. ra files khác. Em tưởng 1 workbook là 1 file.xls chứ.

việc tách các sheet 0-11, 11-12,...ra giúp tăng tốc độ xử lý bằng cách khi xử lý dữ liệu liên quan đến xã nào thì bật file "CC_tênxa" xã đó lên. các xã còn lại sẽ đóng lại. như thế khi làm việc với 1 xã thì tốc độ xử lý gần bằng bình thường. Chỉ khi nào tính toán số liệu toàn huyện thì phải mở toàn bộ các xã thì excel mới chạy như rùa.
 
Lần chỉnh sửa cuối:
Upvote 0
Việc này thì mình cho là bác Sa hoàn toàn đúng, Link dữ liệu trong cùng Workbook bao giờ cũng nhanh hơn khác workbook, tất nhiên khi mở file lớn cũng se chậm đi, nhưng lợi thế sẽ updatelink nhanh hơn nhiều.
 
Upvote 0
Việc tách các sheet 0-11, 11-12,...ra giúp tăng tốc độ xử lý bằng cách khi xử lý dữ liệu liên quan đến xã nào thì bật file "CC_tênxa" xã đó lên. các xã còn lại sẽ đóng lại. như thế khi làm việc với 1 xã thì tốc độ xử lý gần bằng bình thường. Chỉ khi nào tính toán số liệu toàn huyện thì phải mở toàn bộ các xã thì excel mới chạy như rùa.
Vậy bạn mô tả kỹ càng thêm cách tính toán số liệu toàn huyện giúp đi; Thật tình mình chưa rõ bạn tính như thế nào.

Thường thì file năng do công thức thì thay những công thức nặng nề đó bằng cách tính của macro.

Mong tin từ bạn & thân ái!
--=0 --=0 --=0
 
Upvote 0
Vậy bạn mô tả kỹ càng thêm cách tính toán số liệu toàn huyện giúp đi.
--=0 --=0 --=0

Từ các file CC_xã sẽ tổng hợp lên file CC_huyện . File CC_toàn huyện này chỉ là tổng của các xã do đó chỉ sử dụng phép tính cộng bình thường thôi. Ví dụ ô F16 của huyện bằng F16 xã 1 + F16 xã 2 + F16 xã 3.... F16 xã cuối.

xem file CC_huyện mới thấy được chỉ tiêu nào cao chỉ tiêu nào thấp so với quy định từ đó mới biết đường điều chỉnh dữ liệu . Việc điều chỉnh bắt từ bảng dữ liệu ở file PNN_VT.xls dữ liệu điều chỉnh này tự động chạy vào file CC_xã và sau đó và chạy vào CC_Huyện.

nói vậy các bác hiểu chưa?
 
Upvote 0
Mình vừa có í tưởng : Nhốt chung 43 trang tính tại PNN_VT vào 1 trang tính với điều kiện sẽ cách nhau 350 dòng;
 
Upvote 0
em giờ mới tự tìm hiểu về VBA được it ngày nên ko hiểu. bác HYen17 có thể nói rõ hơn không?
 
Upvote 0
Ý mình là cùng với bạn làm 1 cuộc cách mạng lỡ đất

em giờ mới tự tìm hiểu về VBA được it ngày nên ko hiểu. bác HYen17 có thể nói rõ hơn không?

Vì trang tính có số dòng nhiều nhất trong 43 trang tính trên chếm là 317 dòng;

Nếu dồn chung chúng vô 1 trang tính, thì mình sẽ bỏ công sức ra làm cho bạn 2 báo cáo bằng macro;

1 cái của xã & 1 cái của huyện. Tất nhiên chọn xã trong danh sách xã thì sau 1 lúc rung đùi ta sẽ có số liệu báo cáo trên trang BCXa & cũng vậy trên trang tính BCHn

Nếu vậy file của bạn chỉ 4 trang tính mà thôi. Viễn cảnh vậy có trở ngại gì cho bạn hay không?

Nếu có chi trở ngại hãy cho biết để ta còn xem xét tiếp.

Thân ái & chờ tin bạn!
 
Upvote 0
thế tốt quá. nhưng bác gia tăng số dòng cho em đi. file em gửi lên mới nhập 1 ít dữ liệu làm ví dụ. khi nhập đủ lên khoảng 500 -1000 dòng.

em cám ơn bác trước nha.
 
Upvote 0
Nhưng bạn chứ không fải mình tạo file đó, vì . . .

thế tốt quá. nhưng bác gia tăng số dòng cho em đi. file em gửi lên mới nhập 1 ít dữ liệu làm ví dụ. khi nhập đủ lên khoảng 500 -1000 dòng. em cám ơn bác trước nha.

Mình đã thử bằng 2 cách copy từ trang này sang trang kia, nhưng số liệu đều lệnh lạc hết tất cả;
Chúng lệch vì mình đoán rằng bạn đã cài công thức, nhứt là công thức SUMIF(),. . . , nên vậy.

Theo mình số liệu thô là số liệu nhập; Các trang tính này không nên cài công thức nào hết.

Nếu bạn muốn cài công thức trong trang nớ, thì bạn hãy lập nó. Mình hết cách rồi mà vẫn chưa giả lập được để thử thực hiện í tưởng.

Ta thống nhứt, mỗi vùng dữ liệu chiếm 1 ngàn dòng (Vùng 2 sẽ bắt đầu từ dòng thứ 1001 cho đến dòng thứ 2.000
 
Upvote 0
công thức sumif có thể xóa đi. công thức đó chỉ dùng để làm báo cáo cho từng chỉ tiêu 1. 43 báo cáo cho 43 chỉ tiêu này đơn giản nên em sẽ tự làm lấy từ file tổng hợp.
 
Upvote 0
Mình đã tạo file theo ý tưởng thỏa thuận rồi đây

Dùng 2 macro (có trong file) mình đã:

(*) Biến các ô chứa công thức thành dữ liệu; Khi đó 1 số dữ liệu trở thành dữ liệu sai #VALUE thì xóa đi
(*) Chép sang trang tính 'CSDL'

Như vậy 1 số số` liệu đã thay đổ hay bị xóa.

(1) Bạn soi xét file xem có ảnh hưởng đến việc tổng hợp theo xã hay huyện không? Nếu thấy cần fải sửa lại thì giúp mình cái nha.

(2) Hãy hướng dẫn cụ thể cách mà bạn làm báo cáo Xã giúp nha!

Xin cảm ơn nhiều!
 

File đính kèm

Upvote 0
cám ơn bác HYen17. Để em nghiên cứu xem thế nào. có vấn đề gì em lại nhờ bác. (hơi tham phải không, hi hi)
 
Upvote 0
Cách bố trí của bác HYen17 như vậy cũng được. Nhưng em đề xuất cách bố trí dữ liệu theo cách này có được không? Nếu tách các sheet CC_xã_năm thành từng workbook khác nhau được thì hay quá.
 

File đính kèm

Upvote 0
Hoàn toàn đồng ý với bạn thôi!

Nhưng lý do bạn tách làm các workbook khác nhau là gì vậy bạn?

(Mình xin góp vài ý nhỏ với bạn:

(*) File của bạn xài, nên tên các trang tính không nên dùng các từ trùng lắp; Cụ thể từ 'BC_' trong các trang tính; Cũng không nên xài tiếng Việt có dấu trong tên các trang tính. Nếu không, khi dùng macro tác động vô trang tính nào, ta lại fải dùng tên cúng cơm của nó kia đấy!)

(*) Khi format màu để làm nổi rõ vấn đề, ta cũng không nên lèo 1 cái, format cả dòng màu vàng như vậy; Dữ liệu đến cột nào ta format đến cột đó thôi. Nhứt là file đang hoành tráng như của bạn. Điều quan trọng là tài nguyên đang bị giới hạn)
 
Upvote 0
Cám ơn góp ý của bác, em sẽ sửa theo.
Nhưng lý do bạn tách làm các workbook khác nhau là gì vậy bạn?
việc tách workbook nhằm mục đích: trong huyện có 10 xã, 1 xã lại có 7 báo cáo, nếu để trong 1 workbook thì workbook đó có tới 70 worksheet báo cáo + worksheet dữ liệu. chưa kể có những huyện có 19 xã (như huyện Long Thành). Vậy em mới muốn tách 1 workbook chứa dữ liệu. 10 workbook chứa báo cáo xã, trong mỗi workbook báo cáo xã sẽ có 7 worksheet chứa 7 báo cáo của xã đó.
 
Upvote 0
Việc tách workbook nhằm mục đích: trong huyện có 10 xã, 1 xã lại có 7 báo cáo, nếu để trong 1 workbook thì workbook đó có tới 70 worksheet báo cáo + worksheet dữ liệu. chưa kể có những huyện có 19 xã (như huyện Long Thành). Vậy em mới muốn tách 1 workbook chứa dữ liệu. 10 workbook chứa báo cáo xã, trong mỗi workbook báo cáo xã sẽ có 7 worksheet chứa 7 báo cáo của xã đó.

Nếu có macro hỗ trợ thì ngoài 2 trang sẵn có, ta chi cần 7 trang cho B/C xã &
Công việc của macro sẽ lấy dữ liệu của xã mà ta yêu cầu nạp vô 7 B/c này.

Với B/C huyện cũng vậy;

Nếu cần thiết trích ra thành workBook thì cũng xong số liệu B/c cho xã hay huyện đó, rồi ta mới trích chép ra.

Lúc đó số liệu giữa các WorkBook không liên kết với nhau; Số liệu trích chép ra không còn 1 tẹo công thức nào.

Nhưng lúc nào cần B/c nào ta lại chạy macro để tạo B/c mới.
 
Upvote 0
Ta tiếp tục nha,

làm theo ý tưởng đó của bác cũng được.

Để làm B/C (báo cáo) lên trang có tên là Xa, mình đã lập DS (danh sách) duy nhất từ cột 'D' của 'CSDL'; DS này hiện có 9 hàng dữ liệu.
Mình làm 1 Validation tại [B1] của 'Xa' từ DS đã lập.
Macro sau đây sẽ tô nền màu lam cho tất cả các ô trên cột 'D' của trang 'CSDL'

PHP:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim Sh As Worksheet, Rng As Range, sRng As Range
 Dim MyAdd As String
 
 Set Sh = Sheets("CSDL")
 Set Rng = Sh.Range(Sh.[d6], Sh.[d65500].End(xlUp))
 Rng.Interior.ColorIndex = 0
 If Not Intersect(Target, [B1]) Is Nothing Then
   Set sRng = Rng.Find([B1].Value, , xlFormulas, xlWhole)
   If Not sRng Is Nothing Then
      MyAdd = sRng.Address
      Do
         sRng.Interior.ColorIndex = 35
         Set sRng = Rng.FindNext(sRng)
      Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
   End If
 End If
End Sub
Khi chọn tại [B1] trang 'Xa' là X. Hưng Hội (cho giống với nội dung trong B/C hiện có. )
Tiếp theo mình tìm bên trang 'CSDL' trị đang có ở Xa![D4] mà không thấy;
Vậy bạn giúp giải thích xem số đó có từ đâu? (Hay nói cách khác, bạn chỉ cho mình cách mà bạn hình thành số liệu B/C trong các trang tính mà ta thỏa thuận gán tên Xa, 2010, 2011,. . . 2015.
(Hiểu được mình mới viết tiếp được) & chờ tin bạn đồng hương.
 
Upvote 0
Bác xem file này. em làm hoàn thiện báo cáo xã hưng hội năm 2010 với đầy đủ số liệu. Cách thức lấy số liệu như thế nào, bác có thể xem trong công thức. em đã đặt tên cho công thức nên rất dễ hiểu. Bác có thể thử với xã khác, năm khác bằng cách thay giá trị vào ô B1, B2 trong worksheet HungHoi_2010.

Ủa mà sao bác biết quê em.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bạn chịu khó giải thích dùm cách tính của bạn ở bảng HungHoi10 giúp nha

Tại HH:
|C|D|E|F
10|||ĐNN|ĐLN
12|||PL1|PL2
15|DLN|25 604.65||24 583.15
16| LUN |0.00|| 14
17| HNK |93.38|| 15
18| CLN |678.58|| 16
19| RPH |0.00|| 17
Nhưng ở CSDL ta có số liệu như sau:

|C|...L|M|N|O|P|Q|R|S
4||NNP|DLN| LUN | HNK | CLN | RPH | RDD | RSX
7|PL2|..||12|13|14|15|16|17

Theo mình hiểu thì số liệu 2 bảng còn lệch nhau; hay mình hiểu chưa đúng chổ nào.
Rất mong được giải thích thêm chổ này & chân thành cảm ơn!
 
Upvote 0
Ở đây có sự đảo cách bố trí hàng và cột giữa CSDL và báo cáo (HH10):
Bên HH10 các PL1, PL2, ....PL43 được xếp theo hàng ngang ở dòng 12 nhưng bên CSDL nó lại được bố trí ở cột B . và cột C bên HH10 được bố trí ở hàng 4 bên CSDL . PL1, PL2.. và DLN, LUN, HNK ......là các điều kiện để lấy dữ liệu. Số liệu 2 bảng hoàn toàn khớp nhau nên từ CSDL mới có kết quả ở HH10.



 
Lần chỉnh sửa cuối:
Upvote 0
Để tiện trong việc rút trích dữ liệu từ mà, xin đề nghị bạn việc sau

Các mã đều có độ dài như nhau; Ví dụ mã các loại đất nên là:
DGT,DTL, DNL, DVT, DVH, DYT, DGD, DTT, DNC, DXH, DCH, PNK, ONT, ODT, CSD, DTD, DBT, DDL, DNT ,. . . .
Cũng như vậy việc phân loại đất cũng nên là PL01,. . . . PL09, PL10,. . . .PL43

Điều này rất tiện cho việc tự động hóa bằng macro về sau. Rất mong bạn chấp thuận & chỉnh sửa;

Cách chỉnh cũng không mấy khó khăn nếu ta thuần thục lệnh Find and Replace với tùy chọn Match entire cell contents được ta đánh dấu. (Để chỉnh phân loại đất)

(Đây quả là kinh nghiệm xương máu qua hơn 1 buổi loay hoay vật lộn như thằng mù, khà, khà,. . . !)
 
Upvote 0
em làm bác HYen17 vất vả quá. Việc đổi mã cho có độ dài giống nhau là hợp lý. em giơ 2 tay tán thành.
 
Upvote 0
Việc này fải trách bạn mới được:

Ai đời giả lập dữ liệu trùng 2 hay ba dòng bao giờ!

Ví dụ Loại PL14 của năm 2010 không bao giờ có 2 dòng trong trang CSDL, phải không? Vậy mà bạn chép đa số thành hai dòng; Thậm chí có cái còn 3 dòng nữa.
Với VLOOKUP() thì nó chỉ lấy anh chàng đầu tiên mà nó gặp; Còn trong VBA ta có thể lấy hết các số liệu trùng lặp này. Và như vậy dữ liệu chép đè lung tung. Làm mình mất thời gian nhiều mới fát hiện ra.

Đây macro của bạn đây, xin mời thử với tổ hợp fím tắc: {CTRL}+{SHIFT}+H
Mã:
Option Explicit
[B]Sub hh10()[/B]
 Dim Cls As Range, Rng As Range, sRng As Range, Rng0 As Range
 Dim Sh As Worksheet, Jj As Byte, CotDL, CotBC As Byte
 Const Dat As String = "DHT PNN NNP":        Const PC As String = "@"
 Dim MyAdd As String, PLoai As String, MaDat As String
 
 Sheets("HH10").Select:          Set Sh = Worksheets("CSDL")
 Set Rng = Range([E12], [iv12].End(xlToLeft))
1 'Ghi PLoai Dat Vo Chuoi:'
 For Each Cls In Rng
   PLoai = PLoai & Cls.Value                [COLOR=RoyalBlue]          'PL##'[/COLOR]
 Next Cls
 PLoai = PLoai
2 'Ghi Ma Dát Vo Bién:'
 Set Rng = Sh.Range(Sh.[L4], Sh.[iv4].End(xlToLeft))
 For Each Cls In Rng
23   MaDat = MaDat & PC & Cls.Value              [COLOR=RoyalBlue]   'D##'[/COLOR]
 Next Cls
3 ' Tao Vòng Lap Duyet Hét Các Hàng Cua Trang B/C Theo Ma Dát:'
 Set Rng = Sh.Range(Sh.[d5], Sh.[d65500].End(xlUp))
 For Jj = 15 To [C65500].End(xlUp).Row
   Set sRng = Rng.Find([B1].Value)
   If Not sRng Is Nothing Then
      MyAdd = sRng.Address
      Do
         If Sh.Cells(sRng.Row, "K") = [B2].Value Then
            CotBC = InStr(PLoai, sRng.Offset(, -1).Value) \ 4
            CotDL = InStr(MaDat, Cells(Jj, "C").Value) \ 4
            
            Cells(Jj, "E").Offset(, CotBC).Value = _
                  Sh.Cells(sRng.Row, "L").Offset(, CotDL).Value
         
         End If
         Set sRng = Rng.FindNext(sRng)
      Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
   End If
 Next Jj
[B]End Sub[/B]
Bạn bỏ công dò lại giúp nha, theo file đính kèm.
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Ai đời giả lập dữ liệu trùng 2 hay ba dòng bao giờ!

Ví dụ Loại PL14 của năm 2010 không bao giờ có 2 dòng trong trang CSDL, phải không? Vậy mà bạn chép đa số thành hai dòng; Thậm chí có cái còn 3 dòng nữa.

Hì hì, chỗ này là do bác chưa hiểu PL14 nói riêng hay PL nói chung sẽ lặp lại rất nhiều lần ở CSDL thế nên cơ sở dữ liệu mới lên hàng ngàn dòng.

ví dụ :
Trạm cấp nước sạch xây mới lấy từ đất giáo dục đất lúa, đất trồng cây lâu năm
nhà máy nước xây mới trên đất ở đất trồng cây lâu năm
đào mới kênh T trên đất lúa.
trạm cấp nước + nhà máy nước + kênh đều thuộc nhóm PL12
bác xem file đính kèm sẽ rõ hơn.

cám ơn bác HYyen17. Bây giờ em phải nghiên cứu thành phẩm này đã.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Trong macro mình còn sơ sót 1 chổ quan trọng; Nó sẽ làm tính toán bị sai lệch

Chổ sai là dòng lệnh mình vừa đánh số 23 & đã sữ;

Bạn giúp mình sửa trong file trước khi chạy lại thử nghiêm nha.

(Lỗi do coi 2 mã có độ dài cùng bằng 4; Nhưng thực ra độ dài mã sau có 3 hà!)
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Chổ sai là dòng lệnh mình vừa đánh số 23 & đã sữ;

có phải là dòng này không bác
23 MaDat = MaDat & PC & Cls.Value 'D##'

chỗ này phải sửa thành thế nào, em chưa hiểu. bác chỉ cho em luôn đi.

Kết quả tính toán đang bị sai có phải do đoạn này không bác
1 'Ghi PLoai Dat Vo Chuoi:'
For Each Cls In Rng
PLoai = PLoai & Cls.Value 'PL##'
Next Cls
PLoai = PLoai
2 'Ghi Ma Dát Vo Bién:'
Set Rng = Sh.Range(Sh.[L4], Sh.[iv4].End(xlToLeft))
For Each Cls In Rng
23 MaDat = MaDat & PC & Cls.Value 'D##'
Next Cls
 
Lần chỉnh sửa cuối:
Upvote 0
Theo như bạn nói có thể có nhiều dòng cùng PL02, PL013,. . . như vậy fải cộng dồn; Nhưng macro đang chưa cộng dồn mà là lấy duy nhất dòng cuối của mã nào đó có trùng lắp.

Chúng ta fải kiện toàn lại trang CSDL tinh tươm rồi tiếp.

Hiện tại trong trang CSDL này chỉ cần 1 hay 2 xã & có các năm 2010,2011 hoặc thêm 2012 nữa là OK.
Nếu rảnh rổi làm giúp mình cái này nha! Cảm ơn trước.

Bữa nào fải xuống Bạc liêu nhậu mới được, khà, khà,. . .

Bạn có thể xem thông tin tất cả các xã hay bất cứ năm nào chỉ cần 1 hay 2 lần nhấp chuột tại [B1] hay [B2]
của trang 'BCXa'

Thử vài lần & cho biết ý kiến để chỉnh sửa theo ý nha!

Chúc vui!
 

File đính kèm

Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Em đã test rồi và thấy:
- Kết quả của những ô màu trắng là chính xác
- Những ô mà có màu nền (xanh và vàng) thì kết quả chưa đúng do những ô này sử dụng cách tính khác (hơi rắc rối) với những ô không có màu nền. Do đó bác HYen17 có thể cho marco loại bỏ những ô này ra không tính toán mà để em nhập bằng tay công thức cho những ô này thì tốt quá.
- Còn vấn đề tách các báo cáo của các xã thành từng file riêng biệt có khả thi không bác?
 
Upvote 0
Vấn đề (1) - giải ngay dưới đây, vấn đề (2) cần thảo luận thêm:

(1) Bạn sửa lại dòng lệnh trong macro như hướng dẫn dưới đây:
Mã:
 [COLOR=YellowGreen]           With Cells(Jj, "E").Offset(, CotBC)[/COLOR]
               [B]If .Interior.ColorIndex < 9 Then .Value = .Value _
                  + Sh.Cells(sRng.Row, "L").Offset(, CotDL).Value[/B]
 [COLOR=YellowGreen]           End With
         End If
         Set sRng = Rng.FindNext(sRng)
      Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
   End If
 Next Jj[/COLOR]
[COLOR=SeaGreen][B]End Sub[/B][/COLOR]
(2) Tách B/C (báo cáo các xã) có khả thi chứ; Vì giờ còn mấy công thức nữa đâu, ngoài các mảnh đất màu mỡ của bạn!
Hình như điều này có thể nhờ macro giúp. Nhưng luật bất thành văn của mình là không làm giúp ai những macro đại loại như vậy; Lý do ư: Dễ có chuyện làm ơn mang oán lắm, vì hư dữ liệu đích khi thao tác bất cản, khì, khì,. . . . (Thông cảm cho mình nha & bạn có thể nhờ người khác trong cộng đồng, hay tham khảo các bài viết đã có về việc này)
 
Upvote 0
ok. cảm ơn bác nhiều. Bây giờ em tiếp tục cuộc hành trình. Thời gian để đến đích cũng khá lâu đây. hic hic

chủ đề này chắc close tại đây!
 
Upvote 0

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

Back
Top Bottom