Mỗi tuần một hàm VBA

Liên hệ QC

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
 
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
Web KT

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

Back
Top Bottom