Tập hợp HÀM TỰ TẠO để làm thư viện Hàm

Liên hệ QC

Ếch Xanh

Thành viên tích cực
Tham gia
12/8/09
Bài viết
865
Được thích
1,572
Topic này tôi mở ra mục đích là tập hợp những hàm tự tạo hay của diễn đàn, để về sau nếu ai có khả năng tổng hợp thành Addins toàn tập thì dễ dàng lấy nguồn tại đây.

Tôi cũng hy vọng, các thành viên nào có những hàm hay hoặc thấy những hàm hay trên diễn đàn Giải pháp Excel hoặc diễn đàn khác, xin vui lòng post lên đây, và vui lòng trích nguồn từ link nào để tiện theo dõi.

Bài viết này, với tôi trình độ còn yếu kém, cho nên cách đặt tên hàm cũng như cách sử dụng hàm cũng chưa chính xác, vậy xin các thành viên bổ sung, góp ý, phản biện để các hàm của chúng ta trở nên mạnh hơn, hiệu quả hơn, chất lượng hơn, nhanh hơn đặc biệt chính xác hơn.

THAM KHẢO THÊM: Mỗi ngày một hàm VBA tại đây:
http://www.giaiphapexcel.com/forum/showthread.php?31-Mỗi-tuần-một-hàm-VBA&

Dưới đây là mở đầu một vài hàm:

1) Hàm Thay đổi kích thước mảng 2 chiều (ptm0412)

PHP:
Function resizeArr(ByVal SourceArr, ByVal NewC As Long)
  Dim OldR As Long, OldC As Long, NewR As Long, iR As Long, iC As Long
  Dim ArrKQ, iKQ, jKQ, SArr
  SArr = SourceArr
  iKQ = 1: jKQ = 1
  OldR = UBound(SArr, 1)
  OldC = UBound(SArr, 2)
  NewR = Int(OldR * OldC / NewC)
  If (OldR * OldC) Mod NewC > 0 Then NewR = NewR + 1
  ReDim ArrKQ(1 To NewR, 1 To NewC)
  For iC = 1 To OldC
    For iR = 1 To OldR
      ArrKQ(iKQ, jKQ) = SArr(iR, iC)
      iKQ = iKQ + 1
      If iKQ > NewR Then iKQ = 1: jKQ = jKQ + 1
    Next
  Next
  resizeArr = ArrKQ
End Function

Nguồn: http://www.giaiphapexcel.com/forum/...về-mảng-trong-VBA-(Array)&p=309679#post309679

-------------------------------------------------------------------------------


2) Hàm SORT mảng 1 chiều: (ndu96081631)

PHP:
Function Sort1DArray(ByVal Arr, Optional ByVal isText As Boolean = False, Optional ByVal isDESC As Boolean = False)
  Dim sCommand As String
  sCommand = "('" & Join(Arr, vbBack) & "').split('" & vbBack & "').sort("
  If isText Then
    sCommand = sCommand & ")"
  Else
    sCommand = sCommand & "function(a,b){return (a-b)})"
  End If
  If isDESC Then sCommand = sCommand & ".reverse()"
    sCommand = sCommand & ".join('" & vbBack & "')"
  With CreateObject("MSScriptControl.ScriptControl")
    .Language = "JavaScript"
    Sort1DArray = Split(.Eval(sCommand), vbBack)
  End With
End Function


Nguồn: http://www.giaiphapexcel.com/forum/...về-mảng-trong-VBA-(Array)&p=320811#post320811

-------------------------------------------------------------------------------

3) Hàm tính diện tích tam giác (ndu96081631)

PHP:
Function TriArea(ByVal x1 As Double, ByVal x2 As Double, ByVal x3 As Double, _
                 ByVal y1 As Double, ByVal y2 As Double, ByVal y3 As Double) As Double
  Dim dA As Double, dB As Double, dC As Double, dP As Double
  dA = Sqr((x2 - x1) ^ 2 + (y2 - y1) ^ 2) '<--- Chieu dai canh A
  dB = Sqr((x3 - x2) ^ 2 + (y3 - y2) ^ 2) '<--- Chieu dai canh B
  dC = Sqr((x1 - x3) ^ 2 + (y1 - y3) ^ 2) '<--- Chieu dai canh C
  dP = (dA + dB + dC) / 2 '<--- nua chu vi
  TriArea = Sqr(dP * (dP - dA) * (dP - dB) * (dP - dC))
End Function

Nguồn: http://www.giaiphapexcel.com/forum/...khi-biết-toạ-độ-trên-exel&p=319887#post319887

CÒN TIẾP, SẼ BỔ SUNG SAU...
 
Lần chỉnh sửa cuối:
Upvote 0
Hôm trước tôi có gữi nguyên thư mục Excel lên mediafire. Tải về, tìm trong thư mục Excel\LearnVBA\UDF sẽ có cả đống

Của Thầy thì có sẳn đó thì từ từ sẽ tập hợp sau, còn những hàm của những cao thủ rãi rác khắp diễn đàn thì gom lại khó hơn Thầy ạ!

Các thành viên ơi, ai có hàm hay hoặc thấy được hàm hay thì post vô đây nhé!
 
Upvote 0
Hàm này trung bình cộng theo màu của background chẳng nhớ của ai trên diễn đàn.
PHP:
Function TBCONGMAU(VungDL, OMau)
Dim Tong, OHT, MauHT, MauChuan, dem, KQ
'L?y màu chu?n
MauChuan = OMau.Font.Color
'X? lý t?ng ô m?t trong vùng
For Each OHT In VungDL
'L?y màu c?a ô hi?n t?i
MauHT = OHT.Font.Color
'N?u là ô s? có màu ch? trùng màu thì c?ng vào bi?n tong, và tang bi?n dem
If IsNumeric(OHT) And (MauHT = MauChuan) Then
Tong = Tong + OHT
dem = dem + 1
End If
Next
If dem = 0 Then
KQ = "Không có ô nào trùng màu ô m?u"
Else
KQ = Tong / dem
End If
TBCONGMAU = KQ
End Function
 
Upvote 0
Hàm chữ hoa và chữ thường sử dụng phím tắt Ctrl+Shift+T; Ctrl+Shift+H; Ctrl+Shift+K của một mem trên diễn đàn.
 

File đính kèm

Upvote 0
Kính gởi Learning_Excel, Anh Tuấn,

Em cũng muốn đưa những hàm này vào thư viện, nhưng xin các bạn hãy phân tích, so sánh và chọn lọc trước khi đưa vào. Như vậy thư viện mới chất lượng được.
Hoặc nếu thấy trong thư viện có gì sai thì cũng xin thông báo.

Tks,

Lê Văn Duyệt
 
Upvote 0
Kính gởi Learning_Excel, Anh Tuấn,

Em cũng muốn đưa những hàm này vào thư viện, nhưng xin các bạn hãy phân tích, so sánh và chọn lọc trước khi đưa vào. Như vậy thư viện mới chất lượng được.
Hoặc nếu thấy trong thư viện có gì sai thì cũng xin thông báo.

Tks,

Lê Văn Duyệt
Vậy thì Duyệt tham gia đi ---> Mấy vụ này tôi... lười lắm
 
Upvote 0
Nên chăng Ếch xanh cũng nên tham khảo cách fân loại như các hàm trong Excel để làm.

& có thể có thêm những đặc thù mà trong Excel chưa thể có được;
 
Upvote 0
Góp vui với diễn đàn hàm tính giai thừa nho nhỏ nha hi hi

Function giaithua(n As Integer) As Long
If (n <= 0) Then
Exit Function
End If
If (n > 1) Then
giaithua= n * giaithua(n - 1)
Else
giaithua= 1
End If
End Function

em không hiểu tại sao em trình bày thục vào thục ra mà khi đưa lên diễn đàn nó của thằng băng em không hiểu
 
Lần chỉnh sửa cuối:
Upvote 0
Góp vui với diễn đàng hàm tính lũy thừa nho nhỏ nha hi hi

Function Luythua(n As Integer) As Long
If (n <= 0) Then
Exit Function
End If
If (n > 1) Then
Luythua = n * Luythua(n - 1)
Else
Luythua = 1
End If
End Function
Cái này là GIAI THỪA chứ LŨY THỪA gì chứ
Mà giai thừa thì trong Excel có rồi, cần gì phải tạo hàm
Ở đây cần tập hợp những hàm cần thiết mà chưa có trong Excel cơ
 
Upvote 0
Không biết là trong diễn đàn có hàm tìm số nguyên tố nào không?
tui xin góp một hàm tìm số nguyên tố cơ bản nhất, tuy là chạy thuộc loại lâu nhất(cùi bắp nhất) nhưng mà dễ hiểu nhất
vì theo như định nghĩa toán học, một số nguyên dương mà có đúng 2 ước là số nguyên tô

Function Isprime_number(n As Long) As Boolean
Dim dem_uoc As Integer
Dim i As Long
dem_uoc = 0
For i = 1 To n
If (n Mod i = 0) Then
demuoc = demuoc + 1
End If
Next i
If (demuoc = 2) Then
Isprime_number = True
Else
Isprime_number = False
End If
End Function
 
Upvote 0
Không biết là trong diễn đàn có hàm tìm số nguyên tố nào không?
tui xin góp một hàm tìm số nguyên tố cơ bản nhất, tuy là chạy thuộc loại lâu nhất(cùi bắp nhất) nhưng mà dễ hiểu nhất
vì theo như định nghĩa toán học, một số nguyên dương mà có đúng 2 ước là số nguyên tô
Cái dzà... mấy cái này có từ đời nào rồi ---> Code của bạn đúng là cho tốc độ rất chậm đấy
Ít ra cũng phải vầy:
PHP:
Function Isprime_number(n As Long) As Boolean
  Dim i As Long
  Isprime_number = True
  For i = 2 To Int(Sqr(n))
    If n Mod i = 0 Then Isprime_number = False: Exit Function
  Next
End Function
 
Upvote 0
Cái dzà... mấy cái này có từ đời nào rồi ---> Code của bạn đúng là cho tốc độ rất chậm đấy
Ít ra cũng phải vầy:
PHP:
Function Isprime_number(n As Long) As Boolean
  Dim i As Long
  Isprime_number = True
  For i = 2 To Int(Sqr(n))
    If n Mod i = 0 Then Isprime_number = False: Exit Function
  Next
End Function

em biết là code em chạy chậm nhất mà, hihi
Anh biết không, không ai mới bắt đầu giải một bài toán mà tối ưu cả đâu
ít nhất là phải dễ hiểu và làm sao cho mọi người thấy dễ hiểu, dễ gần gũi và làm được, rồi sau đó tự họ tìm tồi ra những cách hay hơn thôi(đó mới là quan trọng)

Lúc trước mới vào nghề giáo viên em cũng dạy code toàn là tối ưu không, nhưng mà sau khi học khóa phương pháp giảng dạy và lập trình cơ bản do thầy" NGUYỄN TẤN TRẦN MINH KHANG" trường tự nhiên dạy, thì em mới nhận thức ra là mọi thứ càng đơn giản, càng dễ hiểu càng hay. Chính vì vậy những bài em soạn cực kỳ đơn giản và kiến thức cũng rất nhẹ nhàng (cho những người mới bắt đầu)
 
Upvote 0
Theo như định nghĩa toán học, một số nguyên dương mà có đúng 2 ước là số nguyên tô

Dùng thuật toán đếm ước số là đơn giản và dễ hiểu thật vì nó chứng minh thuận.
Nhưng nếu dùng thuật toán này cũng đơn giản không kém:
Nếu 1 số chia hết cho 1 số khác 1 và chính số đó, thì đó không phải là số nguyên tố. (Chứng minh phản chứng)

Chính từ 2 cách lập luận khác nhau, dẫn đến 2 thuật toán khác nhau, nhưng rõ ràng là chứng minh phản chứng nhanh gấp bội.
 
Upvote 0
em biết là code em chạy chậm nhất mà, hihi
Anh biết không, không ai mới bắt đầu giải một bài toán mà tối ưu cả đâu
ít nhất là phải dễ hiểu và làm sao cho mọi người thấy dễ hiểu, dễ gần gũi và làm được, rồi sau đó tự họ tìm tồi ra những cách hay hơn thôi(đó mới là quan trọng)

Lúc trước mới vào nghề giáo viên em cũng dạy code toàn là tối ưu không, nhưng mà sau khi học khóa phương pháp giảng dạy và lập trình cơ bản do thầy" NGUYỄN TẤN TRẦN MINH KHANG" trường tự nhiên dạy, thì em mới nhận thức ra là mọi thứ càng đơn giản, càng dễ hiểu càng hay. Chính vì vậy những bài em soạn cực kỳ đơn giản và kiến thức cũng rất nhẹ nhàng (cho những người mới bắt đầu)
Topic này là Tập hợp các Hàm tự tạo để làm thư viện. Thiết nghĩ những bài post vào topic này nên là những thuật toán tối ưu hoặc ít nhất là hiện tại chưa có thuật toán nào hay hơn. Có như thế thì mới mong thực hiện được mục tiêu của topic này là tập hợp hàm tự tạo để lập một thư viện.
Nếu cái gì cũng post vào đây thì không khéo sau một thời gian ta lại phải tập hợp những Hàm tự tạo hay từ những cái đã "tập hợp" ở đây.

Vài dòng chia sẻ theo quan điểm cá nhân. Nếu có gì không phải xin các anh chị và các bạn bỏ qua.
 
Upvote 0
Web KT

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

Back
Top Bottom