Mỗi tuần một hàm VBA (1 người xem)

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

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

KDK

Thành viên mới
Tham gia
9/6/06
Bài viết
3
Được thích
10
Tôi mạn phép lấy tên chủ đề này như thế, vì tôi chẳng biết gì nhiều về VBA mà lại lập ra Topic này. Nhưng khi vào diễn đàn trang www.ketcau.com, tôi thấy có Topic này hay quá, chỉ có điều là những hàm VBA ở trang này chỉ chuyên tính kết cấu xây dựng, dầm, pha, cốt thép..., do đó, tôi mong muốn chủ đề này sẽ được các anh chị quan tâm và từ đây, chúng ta sẽ có thêm rất nhiều các hàm VBA tự tạo đầy tính thiết thực phục vụ cho công việc của mỗi chúng ta
 
Hàm chuyển góc ở dạng số thập phân ra góc ở dạng độ

Hàm chuyển góc ở dạng số thập phân ra góc ở dạng độ (vd:12°15'):

PhanTuHuong (www.ketcau.com)

Function Chuyengoc(Gocthapphan As Double) 'Đổi thành góc độ
Dim Goc, Goctrai, Gocphai
Goc = Round(Gocthapphan, 2)
Goctrai = Int(Goc)
Gocphai = Round(Goctrai * 0.6, 0)
If Gocphai >= 10 Then
Chuyengoc = Goctrai & "°" & Gocphai & "'"
ElseIf Gocphai < 10 Then
Chuyengoc = Goctrai & "°" & "0" & Gocphai & "'"
Else
Chuyengoc = "Sai dau vao roi !!!!!!!!"
End If
End Function
 
Upvote 0
Hàm cho ra thứ mấy trong Tuần

Hàm cho ra thứ mấy trong Tuần​

Tuanktcdcn​

1/ Function Thutrongtuan(ByVal bDate As Date) As String
Dim Thu(7)
Thu(1) = "Chủ Nhật"
Thu(2) = "Thứ hai"
Thu(3) = "Thứ ba"
Thu(4) = "Thứ tư­"
Thu(5) = "Thứ năm"
Thu(6) = "Thứ sáu"
Thu(7) = "Thứ bảy"

Thutrongtuan = Thu(Weekday(bDate))
End Function

Workman​

2/ Function Thutrongtuan(ByVal bDate As Date) As String
Dim Thu(7)
Thu(1) = ChrW(67)+ChrW(104)+ChrW(7911)+ChrW(32)+ChrW(78)+Ch rW(104)+ChrW(7853)+ChrW(116)
Thu(2) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(104)+C hrW(97)+ChrW(105)
Thu(3) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(98)+Ch rW(97)
Thu(4) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(116)+C hrW(432)
Thu(5) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(110)+C hrW(259)+ChrW(109)
Thu(6) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(115)+C hrW(225)+ChrW(117)
Thu(7) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(98)+Ch rW(7843)+ChrW(121)

Thutrongtuan = Thu(Weekday(bDate))
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
Hàm cho một tháng có bao nhiêu ngày

Hàm cho một tháng có bao nhiêu ngày

Tuanktcdcn​

Function Ngaycuathang(ByVal bDate As Date) As Byte
Dim Namnhuan As Boolean
Dim NGAY As Byte, Thang As Byte
Namnhuan = ((Year(bDate) / 4 - Int(Year(bDate) / 4)) = 0)
MsgBox Namnhuan
Thang = Month(bDate)
If Thang = 4 Or Thang = 6 Or Thang = 9 Or Thang = 11 Then
NGAY = 30
ElseIf Thang = 2 Then
If Namnhuan Then
NGAY = 29
Else
NGAY = 28
End If
Else
NGAY = 31
End If
Ngaycuathang = NGAY
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
Hàm cho ngày cuối tháng

Tuanktcdcn

Hàm cho ngày cuối tháng (dd/mm/yyyy)
Mã:
Function NgayCuoiThang(ByVal bDate As Date) As Date
Dim NGAY As Byte

NGAY = Day(bDate)

NgayCuoiThang = bDate + (Ngaycuathang(bDate) - NGAY)

End Function
Hàm cho một chuỗi "Ngày xx tháng xx nam xxxx"
Mã:
Function NgayThangNam(ByVal bDate As Date) As String
Dim NGAY As Byte, Thang As Byte
Dim Nam As Integer
NGAY = Day(bDate)
Thang = Month(bDate)
Nam = Year(bDate)
NgayThangNam = "Ngày " & NGAY & " tháng " & Thang & " năm " & Nam
End Function
Hàm cho một chuỗi "Ngày xx tháng xx nam xxxx" cuối tháng
Mã:
Function NgayCuoiThangSTR(ByVal bDate As Date) As String
NgayCuoiThangSTR = NgayThangNam(NgayCuoiThang(bDate))
End Function
Hàm cho một chuỗi "Thứ - Ngày xx tháng xx nam xxxx"
Mã:
Function Thu_NTN(ByVal bDate As Date) As String
Thu_NTN = Thutrongtuan(bDate) & " - " & NgayThangNam(bDate)
End Function
Hàm cho một chuỗi "Thứ - Ngày xx tháng xx nam xxxx" cuối tháng
Mã:
Function Thu_NTN_EOM(ByVal bDate As Date) As String
Dim NgaycuoiTh As Date
NgaycuoiTh = NgayCuoiThang(bDate)
Thu_NTN_EOM = Thu_NTN(NgaycuoiTh)
End Function
'Bạn hãy copy tất cả các hàm trên, tạo một Module trong Excel rồi Paste (CTRL+V) là có thể dùng được cho chính file đó. Nếu muốn dùng cho tất cả các file trên máy thì phải tạo và cất về dạng Add-In (*.xla)
'Khi làm việc trên các Sheet bạn sử dụng các hàm dó theo các tình huống của mình.
Ứng dụng
Mã:
'A1 = Today()
'B1 = Thutrongtuan(A1)
'B1 = Ngaycuathang(A1)
'B1 = NgayCuoiThang(A1)
'B1 = NgayThangNam(A1)
'B1 = NgayCuoiThangSTR(A1)
'B1 = Thu_NTN(A1)
'B1 = Thu_NTN_EOM(A1)
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Xếp hạng

Hàm xếp thứ hạng

Hàm này cho kết quả gần như tương tự hàm Rank() sẵn có trong Excel, tôi giới thiệu để các bạn tham khảo.
Mã:
Function Thuhang(Diem, Mang)
' Trong đó: Diem là giá trị đơn lẻ, có thể nằm trong hoặc nằm ngoài Mang. Mang là tập hợp dãy số ở dạng cột.
Socot = Selection.Rows.Count
i = 1
For Each Cell In Mang
If Cell > Diem Then
i = i + 1
Thuhang = i ' Cho Thứ hạng theo thứ tự từ cao xuống thấp
Else
Thuhang = 1
End If
Next
End Function
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
handung107 đã viết:
Hàm cho ra thứ mấy trong Tuần​
Tuanktcdcn​

1/ Function Thutrongtuan(ByVal bDate As Date) As String
Dim Thu(7)
Thu(1) = "Chủ Nhật"
Thu(2) = "Thứ hai"
Thu(3) = "Thứ ba"
Thu(4) = "Thứ tư­"
Thu(5) = "Thứ năm"
Thu(6) = "Thứ sáu"
Thu(7) = "Thứ bảy"
2 Thutrongtuan = Thu(Weekday(bDate))
End Function
Chị Dung & tác giả cho biết hàm có thể như thế này không:
Mã:
2 [B]ThuTrongTuan = Choose( WeekDay( BDay)), "CN", "T2",. .  . ., "T7")[/B]
Workman​
handung107 đã viết:
2/ Function Thutrongtuan(ByVal bDate As Date) As String
Dim Thu(7)
Thu(1) = ChrW(67)+ChrW(104)+ChrW(7911)+ChrW(32)+ChrW(78)+Ch rW(104)+ChrW(7853)+ChrW(116)
Thu(2) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(104)+C hrW(97)+ChrW(105)
Thu(3) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(98)+Ch rW(97)
Thu(4) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(116)+C hrW(432)
Thu(5) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(110)+C hrW(259)+ChrW(109)
Thu(6) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(115)+C hrW(225)+ChrW(117)
Thu(7) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(98)+Ch rW(7843)+ChrW(121)
Thutrongtuan = Thu(Weekday(bDate))
End Function
Cũng sẽ tương tự như trên, nếu sau dòng định nghĩa biến Mảng Thu(7) ta gán lệnh
Thu(0) = ChrW(84) & ChrW(104) & ChrW(7913) & ChrW(32)
Thì các dòng lệnh từ Thu(2) . . . đến Thu(7) sẽ dễ đọc & theo dõi hơn!
(Thu(7) = Thu(0) & ChrW(98)+Ch rW(7843)+ChrW(121)
 
Lần chỉnh sửa cuối:
Upvote 0
DFIND() Ver 1.1

Lọc dữ liệu từ 2 Sheets

Cách làm việc của hàm như sau:

* Hàm đã được cài sẵn tại 'S0'!H2:K32 để đưa ra DSách học sinh loại giỏi từ các lớp & giới tính. Được trích xuất từ 2 Sheets "S3" & "S4"

* Khi bấm Combobox tại 'S3'!L2 để chọn phái tính & chọn lớp tại 'S3'!M2, cũng đồng thời kích hoạt Sub LocAdvance()

Kết quả hàm DFIND() sẽ được cập nhật ra ngay khi ta trở lại 'S0'

Dowload: clickhere

(Trích bài của anh SA_DQ)



 
Upvote 0
Tim và lấy giá trị thoả mãn nhiều đều kiện

CSDL là trường cấp 2 -3 tại bài #8 ( ở đây trường MaTinh - cột 7) các bạn tự thêm vô giúp)

Function Loc4DK(Sh1 As Object, Lop As String)
1 Dim K_Qua(1 To 30, 1 To 4) As Variant
2 Dim jZ As Integer, zJ As Integer
3 Application.ScreenUpdating = 0
For jZ = 1 To 999
5 If Sh1.Cells(jZ, 6) = Lop And Sh1.Cells(jZ, 5) = 0 And Mid(Sh1.Cells(jZ, 4), 4, 2) > "09" And Sh1.Cells(jZ, 7) = "08" Then
6 zJ = zJ + 1
7 K_Qua(zJ, 2) = Sh1.Cells(jZ, 3): K_Qua(zJ, 3) = Sh1.Cells(jZ, 4)
8 K_Qua(zJ, 4) = Sh1.Cells(jZ, 6): K_Qua(zJ, 1) = Sh1.Cells(jZ, 1)
9 End If
10 Next jZ
11 Loc4DK = K_Qua
End Function

Để nhận được kết quả ta chọn từ ô O1:R30 tại sheet 'S1' & nhập hàm tự tạo: =Loc4DK( A2:G989; K1) lên thanh CT & kết thúc bằng tổ hợp 3 fím sẽ cho kết quả các em HS nam ngụ tại TP HCM (có mã tỉnh = '08), có ngày sinh thuộc quí 4 theo lớp chọn từ ComboBox sẵn có trên S1 của CSDL.

Có nghĩa dùng Combo sẽ lọc được danh sách HS lần lượt từng lớp thoả 3 Đ/K còn lại nêu trên.

(Trích bài của anh SA_DQ)
 
Upvote 0
Đề nghị các bạn có hàm nào hay thì post lên cho mọi người dùng nhé.
 
Upvote 0
Hàm tìm vị trí của ký tự "trắng" thứ n của 1 chuỗi

Mã:
Function RONGA(ByVal S As String, ByVal n As Integer)
' Tim vi tri cua ky tu trang thu n cua chuoi
    Dim i, j, m, l As Integer
    Dim c As Variant
    l = Len(Trim(S))
    j = 0
    m = 0
    For i = 1 To l
        c = Mid(Trim(S), i, 1)
        If (c = " ") Then
            j = j + 1
            If (j = n) Then
                m = i
            End If
        End If
    Next i
    RONGA = m
End Function
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Anh có thể nêu lên một vài ứng dụng của hàm này không? Em nghĩ khi viết một hàm nào đó, các anh chị thường xuất phát từ yêu cầu cụ thể của công việc. Nhiều khi em đọc hàm, hiểu được, nhưng chưa biết để làm gì, rồi quên mất. Nếu các anh chị có thể nêu lên các ứng dụng, em nghĩ mọi người sẽ hiểu sâu hơn, nếu phù hợp có thể sử dụng ngay được.
Thanks!
 
Upvote 0
Lam_A0 đã viết:
Anh có thể nêu lên một vài ứng dụng của hàm này không? Em nghĩ khi viết một hàm nào đó, các anh chị thường xuất phát từ yêu cầu cụ thể của công việc. Nhiều khi em đọc hàm, hiểu được, nhưng chưa biết để làm gì, rồi quên mất. Nếu các anh chị có thể nêu lên các ứng dụng, em nghĩ mọi người sẽ hiểu sâu hơn, nếu phù hợp có thể sử dụng ngay được.
Thanks!

Ừm! Lam_A0 thân.
Chẳng có gì đâu. Một hôm mình nghĩ rằng cần tạo ra cái hàm để tìm ký tự "trắng" cuối cùng trong 1 chuỗi (để có thể ứng dụng vào việc tách tên ra khỏi họ tên) mình gọi là ham RONG() (rỗng ấy mà!):

Function RONG(S)
' Tim vi tri cua ky tu trang cuoi cung trong chuoi
Dim i, j, l As Integer
l = Len(Trim(S))
j = 0
For i = 1 To l
c = Mid(S, i, 1)
If (c = " ") Then
j = i
End If
Next i
RONG = j
End Function

(kết hợp với hàm MID, sẽ tách được tên ra khỏi họ và tên)

Thế rồi, mình nghĩ nếu tách cả họ riêng, tách tên lót riêng nữa thì hay biết mấy, mình nghĩ : Thử làm thêm cái RONGA(s,n) này. Mình thử kết hợp vào để tách mỗi thứ 1 cái thì thấy: Ờ, cũng được - Tuy có vẻ hơi rừng, không chuyên nghiệp lắm đâu.

Bên cạnh đó, có thể dùng để ứng dụng một số việc khác cũng thấy đường được,... ừ thì giới thiệu rồi các bạn trên diễn đàn góp ý cho câu cú, kể cả giải thuật nữa cho gọn gọn, dễ hiểu ấy mà.

Thân.
 
Lần chỉnh sửa cuối:
Upvote 0
Lam_A0 đã viết:
Anh có thể nêu lên một vài ứng dụng của hàm này không? Em nghĩ khi viết một hàm nào đó, các anh chị thường xuất phát từ yêu cầu cụ thể của công việc. Nhiều khi em đọc hàm, hiểu được, nhưng chưa biết để làm gì, rồi quên mất. Nếu các anh chị có thể nêu lên các ứng dụng, em nghĩ mọi người sẽ hiểu sâu hơn, nếu phù hợp có thể sử dụng ngay được.
Thanks!

Ứng dụng hàm này liên quan đến việc lấy nhanh dữ liệu trong 1 hàng chữ (string) khi dãy chữ có 1 thứ tự giống nhau & ta biết vị trí của phần dữ liệu cần lấy trong đó.

Chẳng hạn như khi nhập data từ txt/rtf file có vài chục ngàn dòng. Mỗi dòng có 1 phần dữ liệu ta muốn lấy.

Thí dụ "Cái máy model XX-XXX-XXX được bán với giá USD XXXXX ngày bán dd/mm/yyyy. Giá trị giá tiền và số máy thay đổi từng ô. Tuy vậy ta biết được là Số model là chử thứ 4 trong dãy string. Còn giá tiền là chử thứ 10 và loại tiền là thứ 9. Trong trường hợp này muốn lấy hàng loạt số model máy và giá tiền thì cần

1/ Dùng hàm trên để tìm ra vị trí chồ trắng thứ 4, 9 & 10.

2/ Tìm khoảng cách từ chử 4 dến 5, từ 10 đến 11 (loại tiền thì lúc nào cũng có 3 chử.

3/ Rồi sau đó dùng hàm Mid trong VBA để lấy data.
 
Upvote 0
To dvu58: Em mới học VBA nhưng phải thừa nhận chương trình của anh rất "không chuyên nghiệp". Từ cách copy đoạn code vào bài viết, đặt tên hàm và biến, đấy là em so sánh với các chương trình khác trên forum.

To digita: Nghe anh nói đến việc nhập data từ file txt/rtf, hiện tại em đang phải làm một chương trình đọc dữ liệu từ file .xls đang closed sang một file .txt. Việc đọc trong file .xls thì em làm được rồi, nhưng ghi vào file .txt thì vẫn chưa biết làm thế nào cả. Anh có hàm nào xử lý được vụ này không? Cám ơn anh nhiều!
 
Upvote 0
Lam_A0 đã viết:
To digita: Nghe anh nói đến việc nhập data từ file txt/rtf, hiện tại em đang phải làm một chương trình đọc dữ liệu từ file .xls đang closed sang một file .txt. Việc đọc trong file .xls thì em làm được rồi, nhưng ghi vào file .txt thì vẫn chưa biết làm thế nào cả. Anh có hàm nào xử lý được vụ này không? Cám ơn anh nhiều!

Chào bạn Lam_A0,

Không rõ là ý bạn cần biết cách mở 1 txt file trong XL hay là save 1 file từ trong XL qua dạng txt.

Thôi thì trả lời luôn 2 cách nha.

Mở 1 txt file

Trong hộp thoại file open bạn cần vô hộp "File of type" dưới cùng & chọn All files *.* & OK. Sau đó XL sẽ mở cái Text import wizard để cho bạn chọn cách hiển thị text data trên XL bạn chọn 1 trong các option rồi bấm nút OK.

Save qua dạng text

Chọn Save As trong thanh menu rồi trong hộp Save as Type chọn Text rồi cho tên mới vào và bấm OK.

Chúc bạn thành công
 
Upvote 0
digita đã viết:
Mở 1 txt file

Trong hộp thoại file open bạn cần vô hộp "File of type" dưới cùng & chọn All files *.* & OK. Sau đó XL sẽ mở cái Text import wizard để cho bạn chọn cách hiển thị text data trên XL bạn chọn 1 trong các option rồi bấm nút OK.

Save qua dạng text

Chọn Save As trong thanh menu rồi trong hộp Save as Type chọn Text rồi cho tên mới vào và bấm OK.

Để em giải thích bài toán của em cho anh nhé. Bây giờ em đang ở một Active Workbook nào đó, em cần phải đọc một số dữ liệu tại một Workbook đang closed sau đó xuất các dữ liệu này ra một file .txt. Chương trình này em viết cho người sử dụng không có nhiểu kiến thức về Excel cũng như VBA, vì vậy thao tác càng đơn giản càng tốt. Dẫu sao từ hướng dẫn của anh em đã có ý tưởng để giải bài này rồi, có vấn đề gì em sẽ làm phiền anh tiếp nhỉ!
Cám ơn anh!
 
Upvote 0
Lam_A0 đã viết:
Để em giải thích bài toán của em cho anh nhé. Bây giờ em đang ở một Active Workbook nào đó, em cần phải đọc một số dữ liệu tại một Workbook đang closed sau đó xuất các dữ liệu này ra một file .txt. Chương trình này em viết cho người sử dụng không có nhiểu kiến thức về Excel cũng như VBA, vì vậy thao tác càng đơn giản càng tốt. Dẫu sao từ hướng dẫn của anh em đã có ý tưởng để giải bài này rồi, có vấn đề gì em sẽ làm phiền anh tiếp nhỉ!
Cám ơn anh!

Xin các bạn hãy quay lại chủ đề chính mà KDK đã đề xướng: "Mỗi tuần 1 hàm"

Các nội dung khác xin trình bày ở đề tài khác nhé.
 
Upvote 0
Lam_A0 đã viết:
To dvu58: Em mới học VBA nhưng phải thừa nhận chương trình của anh rất "không chuyên nghiệp". Từ cách copy đoạn code vào bài viết, đặt tên hàm và biến, đấy là em so sánh với các chương trình khác trên forum.

Cảm ơn Lam_A0, mình đã tự nhận là không chuyên nghiệp vì mình chưa từng được học VBA (hoặc là cà VB) bao giờ, mà chỉ lên diễn đàn học hỏi rồi tự thực hành. Nhưng cái quan trọng là nó đã giúp được chính mình trong công việc thực tế mà mình đang làm rất nhiều, nó cũng giúp cho mình thực hiện các ý tưởng muốn làm.

Nhân đây, mình cũng mong muốn diễn đàn tăng cường trao đổi có tính chất bài bản hơn về VBA. Mình rất thích ý tưởng của KDK về topic này.
Cũng rất cảm ơn KDK.
 
Upvote 0
Hàm Dao_Chuoi

Hàm đảo chuỗi "cực chuẩn"/-*+/
=Dao_Chuoi(" Năm ---- Ngày ----- Tháng ")
Kết quả là " Tháng ----- Ngày ---- Năm "
Mã:
Function Dao_Chuoi(ByVal Text As String) As String
On Error GoTo RaiseErr

Dim S As String, tmpText As String
Dim p1, p2, nLen, nSpace1, nSpace2

Dao_Chuoi = Text
tmpText = Trim(Text)
If tmpText = "" Then Exit Function

nSpace1 = 0
GetSpace1:
    If Mid(Text, nSpace1 + 1, 1) = " " Then
        nSpace1 = nSpace1 + 1
        GoTo GetSpace1
    End If
    
nLen = Len(Text)
nSpace2 = 0
GetSpace2:
    If Mid(Text, nLen - nSpace2, 1) = " " Then
        nSpace2 = nSpace2 + 1
        GoTo GetSpace2
    End If
    
tmpText = tmpText & " "
S = ""
p1 = 0
p2 = 1
Do While p2 > 0
    p2 = InStr(p1 + 1, tmpText, " ")
    If p2 > 0 Then
        If S = "" Then
            S = Mid(tmpText, p1 + 1, p2 - p1 - 1) & S
        Else
            S = Mid(tmpText, p1 + 1, p2 - p1) & S
        End If
       p1 = p2
    End If
Loop

Dao_Chuoi = Space(nSpace2) & S & Space(nSpace1)
Exit Function

RaiseErr:
'Dao_Chuoi="Error!"
End Function
 
Upvote 0
handung107 đã viết:
Hàm cho một tháng có bao nhiêu ngày


Tuanktcdcn​


Function Ngaycuathang(ByVal bDate As Date) As Byte
Dim Namnhuan As Boolean
Dim NGAY As Byte, Thang As Byte
Namnhuan = ((Year(bDate) / 4 - Int(Year(bDate) / 4)) = 0)
MsgBox Namnhuan
Thang = Month(bDate)
If Thang = 4 Or Thang = 6 Or Thang = 9 Or Thang = 11 Then
NGAY = 30
ElseIf Thang = 2 Then
If Namnhuan Then
NGAY = 29
Else
NGAY = 28
End If
Else
NGAY = 31
End If
Ngaycuathang = NGAY
End Function

Phức tạp thế nhỉ ??
Theo em chỉ cần :
PHP:
Function Ngaycuathang(ByVal bDate As Date) As Byte
    Ngaycuathang = DateSerial(Year(bDate), Month(bDate) + 1, 1) - DateSerial(Year(bDate), Month(bDate), 1)
End Function

Thân!
 
Upvote 0
dvu58 đã viết:
Ừm! Lam_A0 thân.
Chẳng có gì đâu. Một hôm mình nghĩ rằng cần tạo ra cái hàm để tìm ký tự "trắng" cuối cùng trong 1 chuỗi (để có thể ứng dụng vào việc tách tên ra khỏi họ tên) mình gọi là ham RONG() (rỗng ấy mà!):

Function RONG(S)
' Tim vi tri cua ky tu trang cuoi cung trong chuoi
Dim i, j, l As Integer
l = Len(Trim(S))
j = 0
For i = 1 To l
c = Mid(S, i, 1)
If (c = " ") Then
j = i
End If
Next i
RONG = j
End Function

(kết hợp với hàm MID, sẽ tách được tên ra khỏi họ và tên)

Thế rồi, mình nghĩ nếu tách cả họ riêng, tách tên lót riêng nữa thì hay biết mấy, mình nghĩ : Thử làm thêm cái RONGA(s,n) này. Mình thử kết hợp vào để tách mỗi thứ 1 cái thì thấy: Ờ, cũng được - Tuy có vẻ hơi rừng, không chuyên nghiệp lắm đâu.

Bên cạnh đó, có thể dùng để ứng dụng một số việc khác cũng thấy đường được,... ừ thì giới thiệu rồi các bạn trên diễn đàn góp ý cho câu cú, kể cả giải thuật nữa cho gọn gọn, dễ hiểu ấy mà.

Thân.

Nếu chỉ là tìm ký tự trắng cuối cùng thì bác tham khảo nhé :
PHP:
Function RONGA(ByVal S As String) As Byte
    Dim i As Integer
    For i = Len(S) To 1 Step -1
        If Mid$(S, i, 1) = " " Then: RONGA = i: Exit For
    Next
End Function

Thân!
 
Upvote 0
Đổi rad ra độ, phút, giây. Ví dụ: 1.345 rad = 77° 03' 46''
Public Function dpg(a)
a = a * 648000 / 3.14159265358979
d = Int(a / 3600)
p = Int((a - d * 3600) / 60)
g = a - d * 3600 - p * 60
If p < 10 And g < 10 Then
dpg = d & "° " & "0" & p & "' " & "0" & Round(g, 0) & "''"
ElseIf p < 10 Then
dpg = d & "° " & "0" & p & "' " & Round(g, 0) & "''"
ElseIf g < 10 Then
dpg = d & "° " & p & "' " & "0" & Round(g, 0) & "''"
Else
dpg = d & "° " & p & "' " & Round(g, 0) & "''"
End If
End Function
 
Upvote 0
Chào mọi người!
Mình xem mọi người viết lệnh trong VBA mình thèm cực kỳ nhưng sao mình nghiên cứu sách VBA dùng cho bên xây dựng thấy khó hiểu quá.Vây mọi người có ai có tài liệu nào dễ hiểu hơn không thì giúp cho mình với. Khẩn cấp nhe! Mình cảm ơn thật nhiều.
Tại vì CV của mình liên quan đến rất nhiều bảng biểu trong EXcel và các bảng này có rất nhiều dữ kiện giống nhau và liên quan đến nhau. Mình nghĩ nếu lập trình được thì sẽ đỡ vất vả hơn nhiều. Rất mong mọi người giúp đỡ cho mình nhé. Chắc lúc ấy mình mới tham gia thảo luân sôi nổi được
 
Upvote 0
Chào mọi người!
Mình xem mọi người viết lệnh trong VBA mình thèm cực kỳ nhưng sao mình nghiên cứu sách VBA dùng cho bên xây dựng thấy khó hiểu quá.Vây mọi người có ai có tài liệu nào dễ hiểu hơn không thì giúp cho mình với. Khẩn cấp nhe! Mình cảm ơn thật nhiều.
Tại vì CV của mình liên quan đến rất nhiều bảng biểu trong EXcel và các bảng này có rất nhiều dữ kiện giống nhau và liên quan đến nhau. Mình nghĩ nếu lập trình được thì sẽ đỡ vất vả hơn nhiều. Rất mong mọi người giúp đỡ cho mình nhé. Chắc lúc ấy mình mới tham gia thảo luân sôi nổi được
Đã là KIẾN THỨC thì chẳng có cái nào dễ hiểu cả!
Làm nhiều, cày miệt mài, đến khi nào làm được thì tự nhiên bạn sẽ thấy nó dễ hiểu thôi
Còn nếu đã làm, đã cố gắng, đã cày miệt mài mà vẫn không tài nào hiểu được thì chỉ có thể nói rằng: MỖI NGƯỜI 1 NĂNG KHIẾU, TA KHÔNG THIÊN VỀ EXCEL THÌ TA CHUYỂN SANG HỌC MÓN KHÁC vậy!
 
Upvote 0
Chào mọi người!
Mình xem mọi người viết lệnh trong VBA mình thèm cực kỳ nhưng sao mình nghiên cứu sách VBA dùng cho bên xây dựng thấy khó hiểu quá.Vây mọi người có ai có tài liệu nào dễ hiểu hơn không thì giúp cho mình với. Khẩn cấp nhe! Mình cảm ơn thật nhiều.
Tại vì CV của mình liên quan đến rất nhiều bảng biểu trong EXcel và các bảng này có rất nhiều dữ kiện giống nhau và liên quan đến nhau. Mình nghĩ nếu lập trình được thì sẽ đỡ vất vả hơn nhiều. Rất mong mọi người giúp đỡ cho mình nhé. Chắc lúc ấy mình mới tham gia thảo luân sôi nổi được

Tham khảo ở đây, sau đó...tìm kiếm tiếp
Thân

http://www.songnam.com.vn/forum/showthread.php?t=869
 
Upvote 0
Upvote 0
Bài của thầy có đoạn cuối thế này:

Của người ta đâu có đâu ---> Không giống 100% là không phải COPY rồi
Ẹc... Ẹc...

Cũng thấy lọc bớt bác ndu ạ, nhưng lọc chẳng hết -+*/! Đọc vài từ chuyên môn là biết, mà thời đó mình vẫn còn "gà" về món VBA! --=0
 
Upvote 0
Đã là KIẾN THỨC thì chẳng có cái nào dễ hiểu cả!
Làm nhiều, cày miệt mài, đến khi nào làm được thì tự nhiên bạn sẽ thấy nó dễ hiểu thôi
Còn nếu đã làm, đã cố gắng, đã cày miệt mài mà vẫn không tài nào hiểu được thì chỉ có thể nói rằng: MỖI NGƯỜI 1 NĂNG KHIẾU, TA KHÔNG THIÊN VỀ EXCEL THÌ TA CHUYỂN SANG HỌC MÓN KHÁC vậy!
Mình thấy bạn tự kiêu và coi thường người khác quá bởi vì Kiến thức ok là khó => nhưng không có nghĩa là không thể học được. "Làm nhiều, cày miệt mài, đến khi nào làm được thì tự nhiên bạn sẽ thấy nó dễ hiểu thôi" => Cày miệt mài , cầy lung tung trong đống hỗn lôn khó hiểu thì mãi cũng chẳng hiểu => sẽ càng mụ mẫn đi => Chính vì thế ta cần sách vở tài liệu phù hợp, và người giúp đỡ ta là thầy cô , ban bè là nhưng trang như " Giaiphapexcel" này chứ đúng không. Nói tóm lại " Chưa làm thì không thể nói là không làm được"
Nếu nói như bạn mới học đã thấy khó tốt nhất là thôi ngay khỏi phải học thì phải
Những người viết sách với 1 chủ đề cũ như VBA chắc thất nghiệp hết
 
Upvote 0

Một lãnh tụ của giai cấp vô sản có nói rằng: "Con đường khoa học không có con đường nào là bằng fẵng cả, mà nó là chông gai, . .. (Chưa fải là nguyên văn)
Ngay chuyện tìm tài liệu với bạn đã là chông gai rồi đó; Hãy vô thư viện hay đến bài vỡ lòng VBA của mình "Chập chững đến với VBA" thử coi; nó ở BOX lập trình đó; Khoe thêm với bạn là cũng nhiều người tán dương lắm đó nghe; Những mong sẽ ít nhiều mang lại bổ ích cho bạn!
 
Upvote 0
Mình thấy bạn tự kiêu và coi thường người khác quá bởi vì Kiến thức ok là khó => nhưng không có nghĩa là không thể học được. "Làm nhiều, cày miệt mài, đến khi nào làm được thì tự nhiên bạn sẽ thấy nó dễ hiểu thôi" => Cày miệt mài , cầy lung tung trong đống hỗn lôn khó hiểu thì mãi cũng chẳng hiểu => sẽ càng mụ mẫn đi => Chính vì thế ta cần sách vở tài liệu phù hợp, và người giúp đỡ ta là thầy cô , ban bè là nhưng trang như " Giaiphapexcel" này chứ đúng không. Nói tóm lại " Chưa làm thì không thể nói là không làm được"
Nếu nói như bạn mới học đã thấy khó tốt nhất là thôi ngay khỏi phải học thì phải
Những người viết sách với 1 chủ đề cũ như VBA chắc thất nghiệp hết
Không biết bạn hiểu tôi nói theo ý gì nhưng dù thế nào cũng được, nếu bạn cảm thấy không phục... rằng mọi người làm được thì mình cũng làm được... rằng mình có thể học được mọi thứ nếu muốn... Vậy thì hãy dùng hành động để chứng minh
Rất hoan nghênh nếu một ngày nào đó bạn trở thành cao thủ
 
Upvote 0
Bạn ndu96081631 ah. Mình không có ham hố gì trở thành cao thủ gì cả, chỉ muốn học để phục vụ tốt cho công việc mà thôi! Việc xin tài liệu để cầy cấy VBA thì có gì là không tốt nhỉ. Mong rằng bạn và các cao thủ trong lĩnh vực này sẽ luôn giúp đỡ và ủng hộ cho những người muốn học VBA một cách thực sự. Chúc mọi người trên diễn đàn GPEX mạnh khỏe.
 
Upvote 0
Bạn ndu96081631 ah. Mình không có ham hố gì trở thành cao thủ gì cả, chỉ muốn học để phục vụ tốt cho công việc mà thôi! Việc xin tài liệu để cầy cấy VBA thì có gì là không tốt nhỉ. Mong rằng bạn và các cao thủ trong lĩnh vực này sẽ luôn giúp đỡ và ủng hộ cho những người muốn học VBA một cách thực sự. Chúc mọi người trên diễn đàn GPEX mạnh khỏe.
Bạn buồn cười nhỉ! Tài liệu có ai không cho?
Gia nhập thành viên Giải pháp Excel rồi thì cứ việc download thôi ---> Thích tài liệu gì down tài liệu nấy ---> Bạn không biết đi tìm sao?
 
Upvote 0
Bạn ndu96081631 ah. Mình không có ham hố gì trở thành cao thủ gì cả, chỉ muốn học để phục vụ tốt cho công việc mà thôi! Việc xin tài liệu để cầy cấy VBA thì có gì là không tốt nhỉ. Mong rằng bạn và các cao thủ trong lĩnh vực này sẽ luôn giúp đỡ và ủng hộ cho những người muốn học VBA một cách thực sự. Chúc mọi người trên diễn đàn GPEX mạnh khỏe.
- Tham khảo cái này trước: Chập chững đến với VBA
-Thấy Kỹ sư xây dựng này có vẻ muốn học lắm rồi. Vào Box lập trình lấy tài liệu:
Sách thì vào đây:
http://www.giaiphapexcel.com/forum/forumdisplay.php?55-Hướng-dẩn-lập-trình-Excel
 
Lần chỉnh sửa cuối:
Upvote 0
Còn mình thì đọc mãi mà cũng chưa biết bạn muốn làm gi
Nói vui thôi, bạn có thể nói rõ bạn muốn làm gì với cái hàm đó, phải hiểu anh em mới có thể tìm lỗi giúp bạn hoặc có thể viết cách khác mà kết quả vẫn Ok
Thân

Cũng may là mình đã gặp vụ này ở tháng nào đó trước đây vài năm!

Chuyện là bạn í muốn sở hữu 1 hàm ngưới dùng để kiểm tra cách bố trí thời khóa biểu cho giáo viên có trùng lắp hay không!?

(*) Chuyện này xin nhờ tác giả nói rõ thêm, để không những người trong ngành, mà ngoài ngành cùng rõ & hiểu bạn.

Sau đây là những góp í nhỏ với bạn trong các câu lệnh mà bạn xài:

(+) Sao bạn dùng cụm từ 'kiemtratkb' mà không là 'KiemTraTKB'; Tương tự như vậy, hãy xem bảng dưới đây:

Bạn dùng | Nên xài | Ghi chú
coti, cotj|CotI, CotJ|**
biena, bienb|BienA, BienB|**
Dim biena As Integer|Dim BienA As Long|*
dongk As Integer|DongK As Long|*
. . . |. . . |

(**) Dễ nhìn hơn & quan trọng là giúp ta kiểm soát chính tả trong câu lệnh;
(*) Làm việc với dòng của trang tính nên xài kiểu dữ liệu là 'Long' mới đúng & quan trọng là cho ta 1 thói quen tốt khi viết các câu lệnh.


Cũng chỉ mong muốn bạn tiến bộ hơn trong thời gian tới mà thôi!

Chúc vui nhân dịp xuân về!

************************************************************************

Ý em đúng như bác ChanhTQ
Chuyện là bạn í muốn sở hữu 1 hàm ngưới dùng để kiểm tra cách bố trí thời khóa biểu cho giáo viên có trùng lặp hay không!?

Có điều vô lý là Khi sử dụng hàm đó để tìm xem trên cùng một hàng có 2 giá trị (gồm chuỗi, số, ...) giống nhau hay không thì E thấy thế này:
+ Nếu giá trị cần kiểm tra ở đầu thì đúng (Ví dụ: cột đầu chứa a và cột 2 hoặc 3, hoặc 4, ... chứa a nữa là báo lỗi ngay)
+ Nếu giá trị giá trị cần kiểm tra không ở đầu thì sai (Ví dụ: cột 2 và cột 3 cùng chứa a không báo lỗi)

*************************************************************************************
P/s: Em không là dân lập trình, tình cờ đọc cài liệu "Lập trình Excel với VBA" thấy cấu trúc tương tự Turbo Pascal. Nên thử và đạt được thành quả nho nhỏ là: Cho ra đời "Chương trình tra cứu và quản lý thời khóa biểu giáo viên" (Có sự giúp đỡ rất lớn của bác ndu96081631)
Rất mong nhận được nhiều ý kiến thẳng thắn, bổ ý từ các huynh
 
Upvote 0
Cho mình hỏi là: Mình đã tọa được 1 thủ tục trong excel.
ví dụ thủ tục đổi ngược ký tự
Sub doinguoc()Text = Range("a1").Value
For i = 1 To Len(Text)
k = Mid(Text, i, 1)
Range("b1").Value = k & Range("b1").Value
Next i
End Sub
Bây giờ mình muốn chuyển thủ tục này sang hàm function để dùng cho tiện thì làm thể nào
 
Upvote 0
PHP:
Option Explicit
Function DaoNguoc(StrC As String) As String
 Dim J As Integer
  
 For J = 1 To Len(StrC)
    DaoNguoc = Mid(StrC, J, 1) & DaoNguoc
 Next J
End Function
 
Upvote 0
Topic này đóng rồi hả mọi người, em vào GPE giữa tháng 10, tập tành viết code, nay em viết được 1 hàm mới theo nhu cầu công việc.
Hy vọng giúp ích cho mọi người và cũng hy vọng nhận được sự chỉ bảo từ những người đi trước.
Em viết hàm TRANSPOSES(Dãy dữ liệu, số cột cần chia)

1604474164491.png

Mã:
Function TRANSPOSES(rng As Range, col As Integer)
Dim arr As Variant
Dim arr2 As Variant
Dim i As Integer
Dim j As Integer
arr2 = rng.Value
dong = UBound(arr2, 1)
cot = UBound(arr2, 2)
ReDim arr(cot / col, col) As Variant
For i = 1 To cot / col
     For j = 1 To col
    arr(i - 1, j - 1) = arr2(1, (i - 1) * col + j)
     Next j
Next i
TRANSPOSES = arr
End Function
 
Upvote 0

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

Back
Top Bottom