Hãy giúp em tiếp cận VBA cụ thể ví dụ hàm sum, hàm sumif bằng ngôn ngữ VBA

Liên hệ QC

nguyenmanhnam

Thành viên tiêu biểu
Tham gia
24/7/10
Bài viết
434
Được thích
266
Em hoàn toàn chưa có kiến thức về VBA, em thử tải một số ví dụ của các bác xuống chạy thấy thực sự quá lôi cuốn, em cũng đã tải một số sách về VBA nhưng đọc thấy nó rộng quá. Giả sử em muốn tiếp cận VBA bằng cách không dùng hàm sum và sumif trong Excel nữa mà dùng bằng hàm do em tự tạo ví dụ nó tên là hàm Cong, cong có dieu kien do mình tự lập thì phải làm như thế nào hả các bác. Xin cảm ơn
 
Em hoàn toàn chưa có kiến thức về VBA, em thử tải một số ví dụ của các bác xuống chạy thấy thực sự quá lôi cuốn, em cũng đã tải một số sách về VBA nhưng đọc thấy nó rộng quá. Giả sử em muốn tiếp cận VBA bằng cách không dùng hàm sum và sumif trong Excel nữa mà dùng bằng hàm do em tự tạo ví dụ nó tên là hàm Cong, cong có dieu kien do mình tự lập thì phải làm như thế nào hả các bác. Xin cảm ơn
Bạn ơi! Bắt đầu tiếp cận với VBA với trình độ "chưa biết gì" thì không phải thực hành theo kiểu vậy đâu ----> Nhanh nhất và hay nhất là tập tành với RECORD MACRO bạn à!
 
Upvote 0
Bạn thử ngâm cứu hàm sau:

PHP:
Option Explicit
Function AllSum(Rng As Range, Optional DKien As String, Optional Co As Boolean = True) As Double
 Dim Cls As Range
 
 If Co Then
   If Rng.Columns.Count < 2 Then
      Exit Function
   Else
      Set Rng = Rng.Cells(1, 2).Resize(Rng.Rows.Count)
 End If:              End If
 For Each Cls In Rng
   AllSum = AllSum + Cls.Value
   If Co And Cls.Offset(, -1).Value <> DKien Then _
      AllSum = AllSum - Cls.Value
 Next Cls
End Function
 
Upvote 0
Bạn ơi! Bắt đầu tiếp cận với VBA với trình độ "chưa biết gì" thì không phải thực hành theo kiểu vậy đâu ----> Nhanh nhất và hay nhất là tập tành với RECORD MACRO bạn à!
Cảm ơn anh, em ngồi tập ghi với RECORD MACRO em thấy nó rất hay, khi em thử chuyển sang cửa số VBE
để viết có điều em không biết là chương trình có hỗ trợ cho người viết không, có nghĩa là ví dụ em dùng lệnh sumif thì em phải hoàn toàn đánh tay vào ạh? Hay có sự trợ giúp nào cho em để tránh được viết sai chính tả không. Em lấy ví dụ đoạn If Rng.Columns.Count < 2 Then nếu mà dùng tay gõ thủ công như trong Word đặc biệt là những người mới dùng như em thì làm sao nhớ được. Mong anh mách cho cách.
 
Upvote 0
Cảm ơn anh, em ngồi tập ghi với RECORD MACRO em thấy nó rất hay, khi em thử chuyển sang cửa số VBE
để viết có điều em không biết là chương trình có hỗ trợ cho người viết không, có nghĩa là ví dụ em dùng lệnh sumif thì em phải hoàn toàn đánh tay vào ạh? Hay có sự trợ giúp nào cho em để tránh được viết sai chính tả không. Em lấy ví dụ đoạn If Rng.Columns.Count < 2 Then nếu mà dùng tay gõ thủ công như trong Word đặc biệt là những người mới dùng như em thì làm sao nhớ được. Mong anh mách cho cách.

Mình viết mấy nghìn dòng code mà không cấn phải hỗ trợ gì cả, đó là do mình làm nhiều nên quen thôi. Nếu bạn gõ sai cú pháp hay câu lệnh thì máy sẽ báo lỗi cho bạn biết.
Tuy nhiên, trong VBE cũng có hỗ trợ cho bạn phần nào đó trong phần nhập liệu này. VD khi bạn đã khai báo biến Rng ( Dim Rng as range) thì phần code phía sau, sau khi bạn gõ Rng.C thì sẽ có một list các từ có chữ C đầu cho bạn chọn, trong đó có Colums, bạn chỉ cần đúp chọn là ok.
 
Upvote 0
Mình nghĩ là biết phải tra cứu và tìm kiếm dữ liệu như thế nào mới quan trọng. Bạn thử nhấn vào các nút như trong hình xem.
Rồi nhấn chuột phải lên lệnh hay hàm nào muốn biết cách dùng. Nó sẽ cho bạn biết sơ sơ cách viết về hàm đó. Và có cả ví dụ đính kèm nữa.
Nếu muốn đi từ công thức Excel qua thì chỉ cần gõ vào khung phía trên "worksheetfunction" thì bạn sẽ thấy các hàm của Excel được VBA định nghĩa như thế nào. Việc còn lại là lấy chúng ra sắp xếp với các dữ liệu cần thiết thì đã có ngay 1 Macro (Sub) hoàn chỉnh rùi.
Đơn giản là điều đầu tiên cần học mà! hihi :D

anhg.png

anhh.png
anht.png
 
Upvote 0
Cảm ơn anh, em ngồi tập ghi với RECORD MACRO em thấy nó rất hay,...
nếu mà dùng tay gõ thủ công như trong Word đặc biệt là những người mới dùng như em thì làm sao nhớ được. Mong anh mách cho cách

Không biết khi viết code bạn tự gõ được bao nhiêu % còn tôi thì tự gõ được khoảng 20%. Do trí nhớ của tôi kém cộng với mù tiếng Anh nên mặc dù tôi tập viết code đã lâu (khoảng 5-6 năm gì đó) nhưng cũng chẳng hơn gì bạn. Tuy nhiên tôi có cách riêng là dùng Macro ghi hoặc copy code của người khác rồi sửa lại theo ý mình. Để làm được điều này thì khi nghiên cứu code từ Macro hoặc code của người khác tôi phải cố lần mò (dịch nghĩa) để hiểu hoặc đoán được tác dụng của từng câu lệnh sau đó sửa lại. Với tôi việc tập ghi và sửa Macro là rất quan trọng, ví dụ ta dùng Macro ghi hành động Format font sau đó sửa lại như sau:

PHP:
    Sub Macro2()
'
' Macro2 Macro
' Macro recorded 06/08/2010 by Nguyen Van Phong
'

'
    With Selection.Font
        .Name = "Times New Roman"
        .FontStyle = "Bold"
        .Size = 14
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
End Sub

Sửa lại
PHP:
    Sub Macro2()
    With Selection.Font
        .Name = "Times New Roman"
        .FontStyle = "Bold"
        .Size = 14
    End With
End Sub

Vài lời chia xẻ cùng bạn vì cách của tôi không phải lúc nào cũng thành công nhưng "có công mài sắt ắt có ngày thành...xà beng"
Chúc bạn vui và học hành tiến bộ.
 
Upvote 0
Bạn thử ngâm cứu hàm sau:
. . .

Bác này, dạy người yếu đánh vật rồi. Từ record macro đến tự viết 1 cái Sub chạy đàng hoàng không bị lỗi, chưa nói tới tốc độ, mất biết bao nhiêu lâu mới làm được. Từ Sub qua Function, có người như tôi chẳng hạn, mất cả năm trời mày mò mà vẫn trật vuột. Thế mà người ta mới vừa mua sách chưa kịp đọc đã . . .

Lẽ ra phải bắt họ ăn uống tẩm bổ, làm việc nhẹ, rồi cho khiêng vác vật nặng tăng dần dần, đằng này, mới vô bắt cõng voi.
 
Upvote 0
Ai da! Vậy phải có cái đề để làm bài tập chứ nhỉ? Để như thế nào được gọi là vừa sức nhỉ, vừa có thể học code vừa có thể loay hoay 1 chút mới có đáp án thì mới thấy thú vị nhỉ?
Vậy mạn phép ra đề đơn giản như vầy nha:

+Bạn hãy dùng công cụ Record Macro lưu lại 1 công thức tính tổng từ A1 đến A5 sau đó rút gọn code lại và gửi lên để mọi người chấm điểm nha.
+Dựa vào câu trên. Bạn hãy cải tiến code vừa rồi để có thể tính tổng vùng như vậy nhưng có cột tuần tự từ cột A đến cột G.

Mọi người nghĩ sao?
Thân.
 
Upvote 0
Ai da! Vậy phải có cái đề để làm bài tập chứ nhỉ? Để như thế nào được gọi là vừa sức nhỉ, vừa có thể học code vừa có thể loay hoay 1 chút mới có đáp án thì mới thấy thú vị nhỉ?
Vậy mạn phép ra đề đơn giản như vầy nha:

+Bạn hãy dùng công cụ Record Macro lưu lại 1 công thức tính tổng từ A1 đến A5 sau đó rút gọn code lại và gửi lên để mọi người chấm điểm nha.
+Dựa vào câu trên. Bạn hãy cải tiến code vừa rồi để có thể tính tổng vùng như vậy nhưng có cột tuần tự từ cột A đến cột G.

Mọi người nghĩ sao?
Thân.
Tôi thấy rằng nếu đã "vấn thân" vào con đường "đau khổ" này thì sớm muộn gì cũng sẽ đụng đến vòng lập FOR... NEXT
Và đây là những bài tập cơ bản nhất: Giới thiệu Cơ bản về vòng lặp For . . . next
Tôi đã từng bước mà "nên người" từ những bài tập trên đấy
-----------------------------------------
(Đương nhiên, hãy làm bài tập nhỏ của Po_Pikachu trước nhé)
 
Upvote 0
Em hoàn toàn chưa có kiến thức về VBA, em thử tải một số ví dụ của các bác xuống chạy thấy thực sự quá lôi cuốn, em cũng đã tải một số sách về VBA nhưng đọc thấy nó rộng quá. Giả sử em muốn tiếp cận VBA bằng cách không dùng hàm sum và sumif trong Excel nữa mà dùng bằng hàm do em tự tạo ví dụ nó tên là hàm Cong, cong có dieu kien do mình tự lập thì phải làm như thế nào hả các bác. Xin cảm ơn
Tôi cũng giống bạn, nếu thu xếp đ][cj thời gian bạn hãy đăng ký học VBA nhé http://www.giaiphapexcel.com/forum/showthread.php?38507-Học-VBA-ở-Hà-Nội/page2&p=258785
 
Upvote 0
Tôi đang rất cần phần mềm theo dõi nợ trên excel. Bạn nào giúp tôi được không
Theo dõi thủ công mất thời gian công sức lắm.
 

File đính kèm

Upvote 0
PHP:
Option Explicit
Function AllSum(Rng As Range, Optional DKien As String, Optional Co As Boolean = True) As Double
 Dim Cls As Range
 
 If Co Then
   If Rng.Columns.Count < 2 Then
      Exit Function
   Else
      Set Rng = Rng.Cells(1, 2).Resize(Rng.Rows.Count)
 End If:              End If
 For Each Cls In Rng
   AllSum = AllSum + Cls.Value
   If Co And Cls.Offset(, -1).Value <> DKien Then _
      AllSum = AllSum - Cls.Value
 Next Cls
End Function
Em đang rất cần có những ví dụ đơn giản để nghiên cứu, rất mong mọi người chia sẻ cho em một số bài tập đơn giản để em ngâm cứu ah.
 
Upvote 0
Web KT

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

Back
Top Bottom