Đưa bài lên dùm một bạn

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

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia
8/6/06
Bài viết
14,568
Được thích
22,875
Nghề nghiệp
U80
Đưa bài lên dùm một bạn: (Verona đã hỏi mình trực tiếp)

[Verona]:
Số bài gởi: 0​


Mình đang viết một đoạn chương trình để phục vụ cho công việc của mình. Nó cũng không phức tạp lắm nhưng số phép tính rất nhiều (trên 14.000 số) nên việc chạy trên excel rất chậm. Khi mình viết bằng macro thì đoạn này lại phải lặp đi lặp lại rất nhiều. Bạn có cách nào giúp mình được ko. Vì khi mình gán đoạn này ra một sub khác thì lúc "call" nó lại ko chạy ra được như kết quả mình cần làm. So di (?)) trình bày hơi nhiều. Mình chỉ biết dùng các lệnh đơn giản (nên trông rất thủ công và nông dân )nhưng vì điều kiện ràng buộc rất nhiều, mà mỗi lần ràng buộc lại phải sử dụng lại những phép tính đó... bạn có cách nào giúp mình ko?
cụ tỉ 1 đoạn nó thế này cảm ơn bạn. Sodi nếu làm fiền ^^

To Verona: MÌnh sẽ gởi bạn địa chỉ mail, bạn gởi file cho mình, mình sẽ đưa lên tại đây;
Theo dõi & chờ trả lời, nha

--------------------------------------
Qdt = Ndb * 1000 / (hieusuat * Hthuc)
PHP:
Do While Nfat < Ndb
    W_c = W_d + (Qthuc - Qdt) * 24 * 3600 / 10 ^ 6
    Zho_d = Noisuy(W_d, Who, Zho, NumHo)
    Zho_c = Noisuy(W_c, Who, Zho, NumHo)
    Zho_tb = (Zho_d + Zho_c) / 2
    Zhaluu = Noisuy(Qdt, Qhl, Zhl, NumHaluu)
    Htt = Noisuy(Qdt, Qtbin, Hw, NumHw)

    Hthuc = Zho_tb - Zhaluu - Htt

    hieusuat = Noisuy(Hthuc, H_k, Heso, NumK)

    Nfat = hieusuat * Qdt * Hthuc / 1000
    Qdt = Ndb * 1000 / (hieusuat * Hthuc)
Loop
'----- Nfat = Ndb nhung Who < MNC'
If W_c < Wc Then
    If W_d > W_c Then
        W_c = Wc
        Qdt = ((W_d - W_c) / 0.0864) + Qthuc
        Zho_d = Noisuy(W_d, Who, Zho, NumHo)
        Zho_c = Noisuy(W_c, Who, Zho, NumHo)
        Zho_tb = (Zho_d + Zho_c) / 2
        Zhaluu = Noisuy(Qdt, Qhl, Zhl, NumHaluu)
        Htt = Noisuy(Qdt, Qtbin, Hw, NumHw)

        Hthuc = Zho_tb - Zhaluu - Htt

        hieusuat = Noisuy(Hthuc, H_k, Heso, NumK)

        Nfat = hieusuat * Qdt * Hthuc / 1000
    Else
        Qdt = Qthuc
    End If
    phahoai = phahoai + 1
End If

Else  '<<==???'

If W_d < Wtb Then
    Qdt = Ndb * 1000 / (hieusuat * Hthuc)


    W_c = W_d + (Qthuc - Qdt) * 24 * 3600 / 10 ^ 6
    Zho_d = Noisuy(W_d, Who, Zho, NumHo)
    Zho_c = Noisuy(W_c, Who, Zho, NumHo)
    Zho_tb = (Zho_d + Zho_c) / 2
    Zhaluu = Noisuy(Qdt, Qhl, Zhl, NumHaluu)
    Htt = Noisuy(Qdt, Qtbin, Hw, NumHw)

    Hthuc = Zho_tb - Zhaluu - Htt

    hieusuat = Noisuy(Hthuc, H_k, Heso, NumK)

    Nfat = hieusuat * Qdt * Hthuc / 1000
    Qdt = Ndb * 1000 / (hieusuat * Hthuc)

    If W_c > Wtb Then
         W_c = Wtb
         Qdt = Qthuc - ((W_c - W_d) / 0.0864)
         Zho_d = Noisuy(W_d, Who, Zho, NumHo)
         Zho_c = Noisuy(W_c, Who, Zho, NumHo)
         Zho_tb = (Zho_d + Zho_c) / 2
         Zhaluu = Noisuy(Qdt, Qhl, Zhl, NumHaluu)
         Htt = Noisuy(Qdt, Qtbin, Hw, NumHw)

         Hthuc = Zho_tb - Zhaluu - Htt

         hieusuat = Noisuy(Hthuc, H_k, Heso, NumK)

         Nfat = hieusuat * Qdt * Hthuc / 1000
    End If
End If

End If '<<==???'

ElseIf Qthuc > Qmax Then   '<<==???'
    Qdt = Qmax
    Nfat = Nlm

    W_c = Wtb
    Zho_d = Noisuy(W_d, Who, Zho, NumHo)
    Zho_c = Noisuy(W_c, Who, Zho, NumHo)
    Zho_tb = (Zho_d + Zho_c) / 2
    Zhaluu = Noisuy(Qdt, Qhl, Zhl, NumHaluu)
    Htt = Noisuy(Qdt, Qtbin, Hw, NumHw)

    Hthuc = Zho_tb - Zhaluu - Htt

    hieusuat = Noisuy(Hthuc, H_k, Heso, NumK)
Qxa = Qthuc - Qdt
 
Lần chỉnh sửa cuối:
Sơ bộ, mình có thấy đoạn code sau
PHP:
    Zho_d = Noisuy(W_d, Who, Zho, NumHo) 
    Zho_c = Noisuy(W_c, Who, Zho, NumHo) 
    Zho_tb = (Zho_d + Zho_c) / 2 
    Zhaluu = Noisuy(Qdt, Qhl, Zhl, NumHaluu) 
    Htt = Noisuy(Qdt, Qtbin, Hw, NumHw) 

    Hthuc = Zho_tb - Zhaluu - Htt 

    hieusuat = Noisuy(Hthuc, H_k, Heso, NumK) 

    Nfat = hieusuat * Qdt * Hthuc / 1000
được lặp lại ở nhiều chổ; Trường hợp này, người ta hay bỏ nó vô 1 macro riêng & gọi nó khi cần. (Khi gọi 1 macro, có thể cần cung cấp cho nó 1 số thông số để nó có nguồn làm việc)

* Bạn xem lại đoạn code trích dẫn, hình như nó còn chưa đủ (bị trích ngang) nên hàm If. . . Else. . . End If còn chưa đúng.
 
Upvote 0
Mình đang viết một đoạn chương trình để phục vụ cho công việc của mình. Nó cũng không phức tạp lắm nhưng số phép tính rất nhiều (trên 14.000 số) nên việc chạy trên excel rất chậm. Khi mình viết bằng macro thì đoạn này lại phải lặp đi lặp lại rất nhiều. Bạn có cách nào giúp mình được ko. Vì khi mình gán đoạn này ra một sub khác thì lúc "call" nó lại ko chạy ra được như kết quả mình cần làm. So di (?)) trình bày hơi nhiều. Mình chỉ biết dùng các lệnh đơn giản (nên trông rất thủ công và nông dân )nhưng vì điều kiện ràng buộc rất nhiều, mà mỗi lần ràng buộc lại phải sử dụng lại những phép tính đó... bạn có cách nào giúp mình ko?
cụ tỉ 1 đoạn nó thế này cảm ơn bạn. Sodi nếu làm fiền ^^

To Verona: MÌnh sẽ gởi bạn địa chỉ mail, bạn gởi file cho mình, mình sẽ đưa lên tại đây;
Theo dõi & chờ trả lời, nha

Đây như bài toán, tính toán điều tiết / cân bằng (có thể điều tiết lũ, điều tiết thiết kế) nước của hồ thủy điện thì phải?? nhằm xác định công suất / khả năng đảm bảo của của hồ chứa thủy điện

tốt nhất là bạn mô tả rõ bài toán và file gửi lên, đầy đủ các CODE mới góp ý được

và quan trọng nữa đó là thuật toán / mục tiêu của chương trình

.
 
Upvote 0
Web KT

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

Back
Top Bottom