Rút gọn hàm để chương trình chạy nhanh hơn

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

HuyQTD

Thành viên mới
Tham gia
9/4/08
Bài viết
17
Được thích
7
Em đang làm file Excel để quản lý tiền điện nông thôn gồm có các mã khách hàng và các giá điện như sau gồm 13 Sheet( 1 Sheet tổng hợp, 12 Sheet là 12 tháng và mỗi tháng hơn 200 dòng):
1, Với mã khách hàng SH thì tính giá điện theo 7 mức giá như đã quy định cộng thêm 10%VAT
2, Với mã khách hàng CQ thì tính giá điện 1.000 đ/kw chỉ tính một mức giá
3, Với mã khách hàng M thì tính giá điện 1.000 đ/kw chỉ tính một mức giá
4, Với mã khách hàng NT thì tính giá điện 900 đ/kw chỉ tính một mức giá
3, Với mã khách hàng KD thì tính giá điện 1.900 đ/kw chỉ tính một mức giá
Em đã lập hàm để phân ra theo các mức giá và tính giá điện theo số kw nhưng chương trình chạy rất nặng.
Nhờ các Bác rút gọn hàm để chương trình chạy nhanh hơn và đảm bảo theo các tiêu chí trên.
Chân thành cảm ơn các Bác!
 

File đính kèm

Góp ý ban đầu gồm những đỉ6m sau:


1* Những góp í ngoài lề:

(*) Mà sao bạn thích nhiều modules làm vậy, Hãy cho biết lí do; Nhưng theo mình chỉ 1 module cũng nhốt chung các hàm, nếu có. & không sợ lẫn lộn gì ráo trọi.

(*) Ten các Sheets của bạn quá dài nhưng chẳng ích lợi gì lắm!
Ta có thể dùng ký tự sau để gán tên sheet, như
T01, T02, . . . . T12
Hay 19, 29,. . . . . 99, A9, B9, C9 (kí tự đầu chỉ tháng, ký tự sau chỉ năm, VD CC sẽ chỉ đến tháng 12 của năm 2012 vậy)
& cuối cùng là "TgHop" là xong 13 sheets, tất thẩy chúng đều có trên màn hình, tại TgHop ta có thễ truy xuất thang 12/09 bằng cách bấm vô [C9] có ngay trên màn hình (Trường hợp của bạn phải dùng đến thanh trượt để hiện cái Sheet cuối, phải thế không?


2* Những góp ý trong lề:

(*) Tất cả các hàm của bạn, ta có thể gom thành 1 hàm dưới đây:
PHP:
Option Explicit
Public Function Tien(congto As Long, Optional Loai As String) As Double
 
 Select Case UCase(Loai)
 Case "", "SH"
    Select Case congto
    Case Is > 400
        Tien = (congto - 400) * 1969 + 594875
    Case Is > 300
        Tien = (congto - 300) * 1914 + 403475
    Case Is > 200
        Tien = (congto - 200) * 1782 + 225275
    Case Is > 150
        Tien = (congto - 150) * 1645.5 + 143000
    Case Is > 100
        Tien = (congto - 100) * 1248.5 + 80575
    Case Is > 50
        Tien = (congto - 50) * 951.5 + 33000
    Case Is > 0
        Tien = congto * 660
    End Select
 Case "NT"
    Tien = congto * 900
 Case "M"
    Tien = congto * 1000
 Case "CQ"
    Tien = congto * 1000
 Case "KD"
    Tien = congto * 1900
End Select
End Function

Vì mình đã dùng tùy chọn Optional trước biến [Loai] nên bạn chớ ấy náy rằng thay sẽ gây lỗi trong các ô;

Có chăng, bạn phải mất công sửa lại các công thức, VD

Thay vì công thức tại [N2] của sheet T01 đang là:
=IF(F2="","",IF(C2="KD",tienKD(F2),IF(C2="CQ",tienCQ(F2),IF(C2="M",tienM(F2),IF(C2="NT", tienNT(F2),IF(OR(C2="SH",C2=""),tien(F2),""))))))
ta chỉ cần sửa lại là:
=tien(F2,C2) cũng ra y chang kết quả 1.666.300
Bạn thấy chưa, bỏ công sức ra 1 lần, sau đó xài khó mà sai được. Còn của bạn í à, trông mà ngán & dễ đi "Tây" lắm! Vì càng dài càng dễ gặp hiễm nguy đó mà.

Vài lời lần đầu, có gì phật ý xin rộng lượng cho qua.

From HuyQTD:

Quả đúng như gợi ý của Bác SA_DQ chương trình nó gọn đi rất nhiều, nhẹ đi trông thấy và cách quản lý cũng đảm bảo an toàn hơn !
Xin chân thành cảm ơn Bác SA_DQ
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom