Chuyển 1 hàm có sẵn trong VBA (Excel)

  • Thread starter 8020
  • Ngày gửi
8

8020

Guest
30/3/04
17
0
0
Hi,
8020 thấy trong VBA của Excel có nhiều hàm rất tiện lợi mà lại không có sẵn trong các hàm (function) của Excel, ví dụ, hàm StrReverse để đảo thứ tự các ký tự trong 1 chuỗi. Vậy có cách nào để chuyển hàm đó sang một hàm user-defined Excel function để tiện sử dụng không? 8020 đã thử vào VBA viết cú lệnh đơn giản như sau nhưng khi dùng trong Excel thì bị trả về kết quả là [HASHTAG]#VALUE[/HASHTAG]! k hà! Mong chỉ giáo!

Function StrReverse(hoten)
StrReverse(hoten) = StrReverse(hoten)
End Function
 
Khóa học Quản trị dòng tiền
Q

quocnghia

Guest
24/3/04
64
0
6
Bạn phải gõ như thế này mới đúng

Function StrReverse(hoten)
StrReverse= StrReverse(hoten)
End Function
 
8

8020

Guest
30/3/04
17
0
0
Tks QuocNghia, 8020 sua lai roi, nhung ket qua vẫn ... the same ([HASHTAG]#VALUE[/HASHTAG]! )???
 
Q

quocnghia

Guest
24/3/04
64
0
6
Mở 1 new file (vd : Book1), vào Tool , MacRo, VBA, Insert Module, gõ cthức như trên, đóng VBA, save Book1, chọn type Xla. Sau đó Add in vaò là xài được.
 
S

SA_DQ

Thành viên Cố vấn - Webketoan Mentors
29/6/05
568
99
28
66
HCM city
Đem đồ cũ ra xài chơi, hỉ!

Mình đề nghị các bạn nên đổi tên khác một chút so với VB chứ không bị kiện cáo lôi thôi hay bị sung đột đấy nha; Ngay trong office nó cũng thế rồi VD: các hàm có chức năng tương tự nhau trong Excel, VB & Access cũng lấy tên khác nhau: FIND - InStr, . . .
Function DaoChu (SChuoi as String) As String
dim ii as Integer, Iz as Integer, Chu As String
Iz=len(SChuoi)
for ii=1 to iZ
SChuoi=Right(SChuoi;1) & Left(SChuoi,iZ-1)
next ii
DaoChu=SChuoi
end Function
 
D

daovietcuong

Guest
Sài lại đồ cũ

Dear all
--------
Nếu sài lại đồ cũ thì phải thế này:

Function funReverse(strHoten as String) as String
funReverse = StrReverse(strHoten)
End Function

Lưu ý là đưa "phănsừn" này vào module để sử dụng được trên worksheet!
Làm như SA_DQ thì chạy chậm lắm!
---------------------------------
Always careful - Always successful
 
W

workman

Guest
22/7/05
372
2
0
51
Ho Chi Minh
daovietcuong nói:
Dear all
--------
Nếu sài lại đồ cũ thì phải thế này:

Function funReverse(strHoten as String) as String
funReverse = StrReverse(strHoten)
End Function

Lưu ý là đưa "phănsừn" này vào module để sử dụng được trên worksheet!
Làm như SA_DQ thì chạy chậm lắm!
---------------------------------
Always careful - Always successful


Chào cả nhà

Lâu quá mới rảnh rỗi vào diễn đàn. Mà các bác dùng hàm StrReverse để làm gì thế nhỉ. Bác nào cho ví dụ cụ thể mục đích chế ra hàm này để làm gì được không?
 
HongViet

HongViet

Cao cấp
10/11/05
286
10
18
Đà nẵng
workman nói:
Chào cả nhà
Mà các bác dùng hàm . . .cho ví dụ cụ thể mục đích chế ra hàm này để làm gì được không?
Cái hàm của B. Sa_DQ sẽ làm Form quảng cáo chữ chạy được, nếu thêm vô nó một vòng lặp đễ giết thời gian:

Dim iW As Long, Bien as Long
for iW = -32222 to 456789
if iw < 0 then Bien = Bien - 1
If iW>0 Then Bien= 1 + Bien
next iW
:dzo:
 
adam_tran

adam_tran

Guitar inspiration
17/5/05
1,374
36
48
46
Goooogle
Quảng cáo chạy chữ thì dùng Form với Animation Image Cotrol tốt hơn chứ nhẩy :banana:
Chỉ cần chọn background cho form theo ý muồn cộng với vài dòng lệnh cố định vị trí của form thôi...
Tớ nhớ không lầm thì ngay Windows 98 đã hỗ trợ cả Flash Shockware Control (support *.swf image) cho VBA nữa đấy!
 
hai2hai

hai2hai

VNUNI Makes a difference
29/4/04
2,032
125
63
50
Hà nội
vnuni.net
daovietcuong nói:
Dear all
--------
Nếu sài lại đồ cũ thì phải thế này:

Function funReverse(strHoten as String) as String
funReverse = StrReverse(strHoten)
End Function

Lưu ý là đưa "phănsừn" này vào module để sử dụng được trên worksheet!
Làm như SA_DQ thì chạy chậm lắm!
---------------------------------
Always careful - Always successful


Tên hàm, tên method nên là 1 động từ, tên property nên là danh từ. Nếu viết StrReverse thì sẽ hiểu là 1 biến có kiểu String. Mọi người thử đọc thêm về Coding convention và cố gắng tạo thói quen viết code "đẹp" nhé.

Cheers!
 
T

Tuanktcdcn

Lão già ham vui
18/6/04
549
52
28
47
Hà Nội
www.bluesofts.net
quocnghia nói:
Bạn phải gõ như thế này mới đúng

Function StrReverse(hoten)
StrReverse= StrReverse(hoten)
End Function

Với cách viết trên thì khi bạn gán "= StrReverse(hoten)" EXCEL sẽ dùng luôn hàm trong khai báo "Function StrReverse(hoten)" chứ không phải dùng StrReverse(expression) trong VBA6.DLL. Tóm lại không được dùng chung tên hàm nếu có mục đích riêng.

Cần sửa lại như sau:

Function UDF_StrReverse(hoten)
UDF_StrReverse = StrReverse(hoten)
End Function

Mục đích sử dụng hàm UDF_StrReverse
* Tách tên ra khỏi cột "Họ và tên", mục đích để sắp xếp danh sách theo Tên.
Giả sử cột A là "Họ và tên". Cột B ta cần tách Tên, gõ công thức:

=RIGHT(A2,FIND(" ",UDF_StrReverse(A2))-1)

Ví dụ này nếu dùng theo cách viết hàm thông thường (không dùng VBA) thì dài gấp 7 lần.
*........
........
 

Xem nhiều

Webketoan Zalo OA