Có thể làm hàm tự tạo: Max, CountIf, SumIf ... được không?

Liên hệ QC

Hoàng Trọng Nghĩa

Chuyên gia GPE
Thành viên BQT
Moderator
Tham gia
17/8/08
Bài viết
8,662
Được thích
16,720
Giới tính
Nam
Vừa qua, có một số thủ tục phải dùng đến WorksheetFunction để tính, tôi thường nghe các cao thủ của diễn đàn mình bảo rằng đối đế lắm mới dùng WorksheetFunction để tính toán trong VBA vì bản chất của nó chậm, hoặc vào môi trường VB khác nó sẽ không có WorksheetFunction.

Vậy các cao thủ vui lòng viết cho hàm Max, CounIf, SumIf hoặc các hàm tính toán có thể thay thế hàm trong Excel.

Xin trân trọng cám ơn.
 
Vừa qua, có một số thủ tục phải dùng đến WorksheetFunction để tính, tôi thường nghe các cao thủ của diễn đàn mình bảo rằng đối đế lắm mới dùng WorksheetFunction để tính toán trong VBA vì bản chất của nó chậm, hoặc vào môi trường VB khác nó sẽ không có WorksheetFunction.

Vậy các cao thủ vui lòng viết cho hàm Max, CounIf, SumIf hoặc các hàm tính toán có thể thay thế hàm trong Excel.

Xin trân trọng cám ơn.
Hàm tự tạo chắc chắn "Rùa" hơn hàm có sẵn của Excel !
Phải chi Excel không có hoặc phải phối hợp quá nhiều hàm thì hổng nói.
-------------
Do chỉ biết mỗi cái For...Next cho nên làm thí thí coi có áp dụng được vào chuyện chi không, coi như mình tập viết VBA thôi.
PHP:
Public Function GPE_Max(Rngs As Range) As Double
Dim M As Double, Clls As Range
For Each Clls In Rngs
    If IsNumeric(Clls.Value) And Clls.Value > M Then M = Clls.Value
Next
GPE_Max = M
End Function
PHP:
Public Function GPE_CountIf(Rngs As Range, DK) As Long
Dim C As Long, Clls As Range
For Each Clls In Rngs
    If UCase(Clls.Value) = UCase(DK) Then C = C + 1
Next
GPE_CountIf = C
End Function
 
Upvote 0
Vừa qua, có một số thủ tục phải dùng đến WorksheetFunction để tính, tôi thường nghe các cao thủ của diễn đàn mình bảo rằng đối đế lắm mới dùng WorksheetFunction để tính toán trong VBA vì bản chất của nó chậm, hoặc vào môi trường VB khác nó sẽ không có WorksheetFunction.

Vậy các cao thủ vui lòng viết cho hàm Max, CounIf, SumIf hoặc các hàm tính toán có thể thay thế hàm trong Excel.

Xin trân trọng cám ơn.
Lúc trước tôi từng nói rằng: Nên hạn chế dùng WorksheetFunction trừ những trường hợp bất khả kháng
Bạn sẽ suy nghĩ đến việc viết riêng các hàm như COUNT, SUM, COUNTIF, SUMIF nếu như bạn dự tính chương trình của bạn sẽ "vượt" ra khỏi phạm vi Excel (dùng cho các ứng dụng khác chẳng hạn)
Vậy, trong trường hợp bạn biết chắc rằng chương trình mình luôn chạy trên Excel thì không lý gì lại không dùng WorksheetFunction (nếu không có hàm nào khác trong VBA thay thế được)
Thật lòng mà nói, tôi không tin rằng với trình độ của chúng ta lại có thể viết được hàm thay thế "ngon lành" hơn những thứ do bác Bill viết. Lấy vị dụ từ code của Ba Tê xem thử, liệu hàm GPE_COUNTIF gì gì đó có làm được như COUNTIF trong việc đếm với các ký tự đại diện không?
Nói xin lỗi, kế cả với hàm SUM tưởng chừng đơn giản nhất tôi cũng không tài nào viết được cho giống với SUM của bác Bill
Hic... nói chung là pó tay mi tà
--------------------
Tóm lại quan điểm của tôi là:
- Hạn chế dùng WorksheetFunction
- Cũng đừng nên suy nghĩ theo hướng tự viét lấy các hàm thay thế nó
- Tùy từng bài toán cụ thể sẽ tìm ra hướng đi khác nhau miễn là "tránh" dùng WorksheetFunction
Vậy: Bạn cần giải quyết vấn đề gì?
 
Lần chỉnh sửa cuối:
Upvote 0
1. Hàm GPE_Max của Ba Tê:

M không được gán giá trị ban đầu nên nó tự nhận giá trị 0.
Nếu trong Rngs toàn số âm, thì Max sẽ bằng M và bằng 0.

2. Hàm GPE_CountIf của Ba Tê:

Hàm này không dùng được các kiểu sau:

= GPE_CountIf(A1:A10, ">2")
= GPE_CountIf(A1:A10, "<=" & B1)

và như ndu nói:
= GPE_CountIf(A1:A10,"DT*")


3. Túm lại, pó tay mi tà. (từ này hay à nha, đọc luôn)
 
Upvote 0
1. Hàm GPE_Max của Ba Tê:

M không được gán giá trị ban đầu nên nó tự nhận giá trị 0.
Nếu trong Rngs toàn số âm, thì Max sẽ bằng M và bằng 0.

2. Hàm GPE_CountIf của Ba Tê:

Hàm này không dùng được các kiểu sau:

= GPE_CountIf(A1:A10, ">2")
= GPE_CountIf(A1:A10, "<=" & B1)

và như ndu nói:
= GPE_CountIf(A1:A10,"DT*")
Đó là còn chưa nói đến thứ "tuyệt chiêu" mà cha Bill làm được: đa số các hàm đều hoạt động được với Array
Vậy có lẽ minhthien nên trình bày những khó khăn mà "hắn" đang gặp phải để mọi người cùng chung tay giải quyết hơn là tự mình nghĩ ra rằng.. thì.. mà.. là.. gì gì đó
3. Túm lại, pó tay mi tà. (từ này hay à nha, đọc luôn)
Tiếng Hàn Quốc đấy sư phụ à! +-+-+-+
Ẹc... Ẹc...
 
Upvote 0
Web KT

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

Back
Top Bottom