Mỗi ngày một hàm tự tạo VBA (ngộ nghĩnh) (1 người xem)

Liên hệ QC

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

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,723
Giới tính
Nam
Để cho không khí vui vẻ và tập hợp các hàm tự tạo VBA lạ lùng, ngộ nghĩnh, tôi mở topic này để ai đó có hàm thể loại này post lên cho mọi người tham khảo, học hỏi.

Tôi sẽ mở đầu trước nha các thành viên thân yêu!

Mã:
Function f() As WorksheetFunction
    Set f = WorksheetFunction
End Function

Đây là hàm để nhận các hàm từ Worksheet để thực hiện các việc tính toán mà VBA không có hoặc không đầy đủ để chúng ta làm việc.

Cách dùng:

TextBox1.Text = f.Trim(TextBox1.Text)

Mời các bạn tiếp tục!
 
Hoàng Trọng Nghĩa lập tiếp hàm chuyển đổi ngôn ngữ Tiếng Việt cũ sang Tiếng Việt mới và ngược lại đi, để mọi người làm quen với ngôn ngữ mới. hihi
 
Upvote 0
Có hàm này cũng hơi... vui
Mã:
Function Alarm(ByVal Exp As String) As Boolean
  On Error GoTo ErrHandler
  If Evaluate(Exp) Then
    Beep
    Alarm = True: Exit Function
  End If
ErrHandler: Alarm = False
End Function
Cú pháp =Alarm(chuỗi biểu thức)
Nếu chuỗi biểu thức trả về kết quả hợp lý thì hàm trả về kết quả =TRUE đồng thời phát ra âm thanh một tiếng "beng". Ví dụ =Alarm("4>3") sẽ cho kết quả TRUE và Beng...
Ví dụ... tùy biến đặc biệt:
- Gõ vào cell A1 chuỗi Nghĩa mập ú
- Cell B1 gõ công thức =Alarm(LEN(A1))
- Enter xong sẽ nghe máy tính phát ra tiếng "beng". Dịch ngôn ngữ máy sang ngôn ngữ người thì "True beng" nghĩa là "Ừ, đúng!"
Có thể thay chữ "Nghĩa" bằng chữ "Tôi không" để kiểm chứng độ chính xác
 
Upvote 0
Lỡ tôi dùng hàm này trong một vòng lặp. Điển hình là dùng trong một cột ở worksheet thì vừa kéo xuống, tôi sẽ nghe "beng, beng, beng..."; bao nhiêu ô đạt là bấy nhiêu beng
 
Upvote 0
Hoàng Trọng Nghĩa lập tiếp hàm chuyển đổi ngôn ngữ Tiếng Việt cũ sang Tiếng Việt mới và ngược lại đi, để mọi người làm quen với ngôn ngữ mới. hihi
Định viết rồi đó chứ! Nhưng chưa biết chữ QUẢ với chữ CỦA sẽ chuyển như thế nào theo "bộ tiếng vịt mới".
 
Upvote 0
Lỡ tôi dùng hàm này trong một vòng lặp. Điển hình là dùng trong một cột ở worksheet thì vừa kéo xuống, tôi sẽ nghe "beng, beng, beng..."; bao nhiêu ô đạt là bấy nhiêu beng
Do vòng lặp nó quá nhanh so với âm thanh, nên có chăng nó phát chừng 1 tiếng thôi.
 
Upvote 0
Thường làm trong UserForm các con số mà ta dùng hàm Format để định dạng kiểu số (chẳng hạn Format(TextBox1.Text,"#,##0") với TextBox1 = 123456 thành 123,345). Tới khi ta nhập từ TextBox1 đó vào trong sheet thì nó có kiểu dữ liệu dạng chuỗi, làm cho ta không tính toán được.

Dùng với hàm Val(TextBox1.Text) ta sẽ thu được kết quả là 123 (thiếu 456)

Dùng hàm Cdbl(TextBox1.Text) thì kết quả sẽ như ý, nhưng nếu đôi khi TextBox1.Text = "" thì lại phát sinh ra lỗi!

Thôi thì làm đại một hàm na ná đi cho vui!

Mã:
Function MyCDbl(ByVal strNumber As Variant) As Double
    On Error Resume Next
    MyCDbl = CDbl(Replace(strNumber, " ", ""))
End Function

Cách dùng:

Range("A1").Value = MyCDbl(TextBox1.Text)

P/s: Lẽ ra không cần phải dùng cái này: Replace(strNumber, " ", "") tuy nhiên có một số định dạng chuỗi như kiểu như số điện thoại đó như:

0938 520 520 , 0929 38 77 38 v.v...

Giờ muốn thu lại thành số thì dùng cái hàm này là OK rồi!
 
Upvote 0
Cũng không biết tiêu chí ngộ nghĩnh của là như thế nào, nên cũng
Thường làm trong UserForm các con số mà ta dùng hàm Format để định dạng kiểu số (chẳng hạn Format(TextBox1.Text,"#,##0") với TextBox1 = 123456 thành 123,345). Tới khi ta nhập từ TextBox1 đó vào trong sheet thì nó có kiểu dữ liệu dạng chuỗi, làm cho ta không tính toán được.

Dùng với hàm Val(TextBox1.Text) ta sẽ thu được kết quả là 123 (thiếu 456)

Dùng hàm Cdbl(TextBox1.Text) thì kết quả sẽ như ý, nhưng nếu đôi khi TextBox1.Text = "" thì lại phát sinh ra lỗi!

Thôi thì làm đại một hàm na ná đi cho vui!

Mã:
Function MyCDbl(ByVal strNumber As Variant) As Double
    On Error Resume Next
    MyCDbl = CDbl(Replace(strNumber, " ", ""))
End Function

Cách dùng:

Range("A1").Value = MyCDbl(TextBox1.Text)

P/s: Lẽ ra không cần phải dùng cái này: Replace(strNumber, " ", "") tuy nhiên có một số định dạng chuỗi như kiểu như số điện thoại đó như:

0938 520 520 , 0929 38 77 38 v.v...

Giờ muốn thu lại thành số thì dùng cái hàm này là OK rồi!
em cũng có cái hàm i chang vầy. :)
 
Upvote 0
Upvote 0
Upvote 0
Thêm hàm nữa cũng ngắn gọn và... vui:
Mã:
Function TextToSpeech(ByVal EngText As String)
  Application.Speech.Speak EngText
End Function
Cho code vào trong 1 module, xong ra bảng tính gõ:
=TextToSpeech("I go to school")
xem ta được kết quả gì
Tiếp theo gõ:
=TextToSpeech("Bà ba bán bánh bò bên bờ biển")
Xem được cái gì?
Cái vụ "bà ba bán bánh bò" này vui nhất đây!
 
Upvote 0
Ui trời! Nó đã là nó rồi thì dùng nó làm cái gì hả nàng? Đúng là ngộ nghĩnh!

Nó dùng để ép code chạy chậm 1 chút.
Không có hàm này thì WorkSheetFunction.Sum sử dụng kiểu kết nối sớm.
Có hàm này thì WorkSheetFunction.Sum sử dụng kiểu kết nối trễ.

(việc kết nối trễ cũng áp dụng cho hàm ở bài #1)
 
Upvote 0
Nó dùng để ép code chạy chậm 1 chút.
Không có hàm này thì WorkSheetFunction.Sum sử dụng kiểu kết nối sớm.
Có hàm này thì WorkSheetFunction.Sum sử dụng kiểu kết nối trễ.

(việc kết nối trễ cũng áp dụng cho hàm ở bài #1)
Tiêu chí "độc" mà anh.
 
Upvote 0
Nó dùng để ép code chạy chậm 1 chút.
Không có hàm này thì WorkSheetFunction.Sum sử dụng kiểu kết nối sớm.
Có hàm này thì WorkSheetFunction.Sum sử dụng kiểu kết nối trễ.

(việc kết nối trễ cũng áp dụng cho hàm ở bài #1)
Nó khác ở chỗ chuyển từ cái khó nhớ sang cái dễ nhớ, chứ nếu dùng nguyên bản thì dùng hàm tự tạo chi cho phí hen anh!?
 
Upvote 0
Nó khác ở chỗ chuyển từ cái khó nhớ sang cái dễ nhớ, chứ nếu dùng nguyên bản thì dùng hàm tự tạo chi cho phí hen anh!?

Không thuyết phục lắm.
Bởi hầu hết các bạn ở đây khoái code chạy nhanh nên tôi nhắc nhở rằng làm như vậy là kết nối trễ.

Thực ra đó là kỹ thuật "đổi ngữ cảnh". Và người ta làm như vậy vìcó lý do khác, quan trọng hơn. Tìm hiểu thử xem sao?
 
Upvote 0
Liệu hàm này có được coi là "ngộ nghĩnh" không? :D

Mã:
Function DoNotKillMe()
    DoNotKillMe = Application.Wait(1000000)
End Function

Vào bảng tính và chạy
=DoNotKillMe()
 
Upvote 0
Upvote 0
Web KT

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

Back
Top Bottom