Bắt đầu với VBA cơ bản họcExcel Online select from EXCEL Hello VBA họcExcel Online select from EXCEL Cảm ơn các bạn đã quyết định chọn cuốn sách này Có thể vì tò mò, có thể vì muốn thử học 1 k.Sách VBA tặng kèm khoá học20230426T031956Z001
Bắt đầu với VBA họcExcel.Online select * from [EXCEL] Hello VBA họcExcel.Online select * from [EXCEL] Cảm ơn bạn định chọn sách Có thể tị mị, muốn thử học kiến thức mới, dù bạn trạng thái sách mang lại cho bạn bắt đầu nhẹ nhàng với ngơn ngữ lập trình VBA sử dụng rộng rãi phần mềm tin học văn phòng, đặc biệt Excel Qua sách này, bạn hiểu VBA gì, chí cịn bắt đầu áp dụng kiến thức sách để phần nâng cao suất làm việc Nếu bạn muốn tiếp tục tìm hiểu sâu hơn, áp dụng nhiều hơn, tiết kiệm nhiều thời gian hơn, học chương trình tổ chức VPBank, VietinBank, KPMG tin tưởng sử dụng Hãy đăng ký khố học VBA101 Lập trình VBA cho người bắt đầu Thanh địa chỉ: http://bit.ly/2eEOWsZ P.S: Sau đọc xong, mong bạn để lại feedback, reviews, nhận xét để nội dung hoàn thiện tốt Sách xuất địa trang web: https://hocexcel.online Các file, đoạn code ví dụ sách tìm thấy đường link sau https://github.com/ndthanh/vbabook Về Thanh: https://www.linkedin.com/in/ducthanhnguyen/ Trang chủ: https://blog.hocexcel.online họcExcel.Online select * from [EXCEL] Nguyễn Đức Thanh: - Trình bày - Thiết kế bìa - Viết nội dung - Thiết kế trang - Xuất Cập nhật nội dung: 23/07/2017 họcExcel.Online select * from [EXCEL] Excel Macros gì? VBA gì? Làm để bắt đầu? Sử dụng chức Macro Recorder Ứng dụng VBA / Macros Làm việc với đối tượng Workbook Làm việc với đối tượng Worksheet Làm việc với đối tượng Range Thuộc tính Cells đối tượng Worksheet 10 Biến số kiểu liệu 11 Cấu trúc IF VBA 12 Cấu trúc WITH … END WITH 13 Vòng lặp VBA 14 Lọc liệu từ Sheet nhiều sheets 15 Tổng hợp liệu nhiều sheets vào sheet 16 Làm việc với mảng VBA 17 Sub Function Excel 18.Hàm người dùng - UDF (User defined function) 01 01 01 05 13 14 19 23 30 31 35 39 40 48 51 52 54 55 họcExcel.Online select * from [EXCEL] 01 Excel Macros gì? Excel Macros chương trình nhỏ giúp lặp lặp lại thao tác từ đơn giản đến phức tạp cách tự động Excel Ngồi Excel Macros, cịn gặp Word Macro, PowerPoint Macro, Outlook Macro … VBA gì? VBA viết tắt Visual Basic for Applications, ngơn ngữ lập trình kèm với số phần mềm Microsoft, có Excel, Word, PowerPoint, Outlook, … Làm để bắt đầu? Để bắt đầu với Excel Macros nói riêng hay Macros nói chung ngơn ngữ lập trình VBA, mở trình soạn thảo VBA Để mở trình soạn thảo VBA, bạn theo bước sau Trong Excel, bấm chuột phải vào Ribbon chọn mục Customize the Ribbon … họcExcel.Online select * from [EXCEL] 02 Trong cửa sổ Excel Options, chọn mục Customize Ribbon bên tay trái Trong Main Tabs, tích vào lựa chọn Developer nhấn OK Kết bước số 2, thẻ Developer hiển thị Ribbon Excel họcExcel.Online select * from [EXCEL] 03 Để chạy file Excel có chứa Macros code VBA, tuỳ chỉnh Macro Security cần thiết lập sau Trong thẻ Developer, bấm nút Macro Security Trong cửa sổ Trust Center, thiết lập lựa chọn hình vẽ họcExcel.Online select * from [EXCEL] 04 Đến bước này, file Excel làm việc cần lưu dạng có hỗ trợ Macros code VBA với phần mở rộng XLSM Để thực việc này, Excel, chọn thẻ File > Save as … sử dụng phím tắt F12 bàn phím Đến bước này, file Excel sẵn sàng cho việc sử dụng với Macros VBA họcExcel.Online select * from [EXCEL] 05 Sử dụng chức Macro Recorder Chức Macro Recorder giúp nhiều việc học VBA Để ghi macro đầu tiên: chọn thẻ Developer > bấm nút Record Macro họcExcel.Online select * from [EXCEL] Sử dụng chức Macro Recorder Chức Macro Recorder giúp nhiều việc học VBA Để ghi macro đầu tiên: chọn thẻ Developer > bấm nút Record Macro Trong hộp thoại Record Macro, đặt tên cho Macro gán phím tắt viết miêu tả cho Macro Ở đây, để tiếp tục ta bấm nút OK họcExcel.Online select * from [EXCEL] 41 13 Vòng lặp VBA Vịng lặp với số Để thực cơng việc lặp lặp lại cách nhanh chóng, dùng tới vòng lặp VBA Chúng ta tìm hiểu vịng lặp qua ví dụ sau đây: In cửa sổ Immediate số từ tới 10 Nếu chưa biết vòng lặp, làm sau: Sub vong_lap() Debug.Print Debug.Print Debug.Print Debug.Print Debug.Print Debug.Print Debug.Print Debug.Print Debug.Print Debug.Print End Sub 10 Nếu biết sử dụng vòng lặp, làm sau Sub vong_lap_2() Dim i as Long For i = to 10 Debug.Print i Next i End Sub Trong ví dụ trên: • • For, to, next từ khố i = to 10 cho VBA biết muốn lặp từ giá trị số nguyên đến giá trị số nguyên 10 Vòng For thực thi bắt đầu với i = Với i Debug.Print i cho kết cửa sổ Immediate Tương tự hết i = 10 File ví dụ: Github: Vịng lặp VBA / vong_lap.xlsm họcExcel.Online select * from [EXCEL] 42 Một số ví dụ đơn giản bạn thực với vịng lặp Ví dụ 1: Liệt kê tên sheet bảng tính thời ghi cột A sheet1 ô A4 Diễn giải: Vòng lặp đến số lượng sheets Workbook trả lệnh Worksheets.Count Vì bắt đầu ghi tên sheets ô A4, tiếp đến A5 A6, … nên cần tìm cách tạo dãy số từ giá trị i, i = Để làm điều này, viết Range(“A” & (3 + i)) Như vậy, với i = 1, tham chiếu đến ô A4, ghi tên sheets với thứ tự = Tiếp tục với i = ta tham chiếu đến ô A5, ghi tên sheets thứ 2, v.v Chúng ta cịn thực ví dụ sau với thuộc tính Cells họcExcel.Online select * from [EXCEL] Chúng ta cịn sử dụng thuộc tính Offset đối tượng Range để thực ví dụ Vịng lặp For … Each Với số đối tượng Excel biết Range, Worksheet, Workbook, sử dụng vòng lặp for … each sau để giải vấn đề nêu ví dụ Diễn giải, vòng lặp for … each đoạn code hiểu là: với bảng tính tập hợp bảng tính ghi tên bảng tính vào cột A, ô A4 Trong phần tiếp theo, cịn gặp lại nhiều ví dụ với đối tượng khác với ứng dụng kiểu vòng lặp For … each họcExcel.Online select * from [EXCEL] 44 Vịng lặp với bước nhảy Đơi khi, cần số vòng lặp tăng lên 2, đơn vị sau vịng lặp khơng phải đơn vị ví dụ vịng lặp đơn giản, xét ví dụ sau đây: In số lẻ từ đến nhỏ 23 Với vấn đề này, bắt đầu số lặp từ 3, 5, 7, … , 23, vòng lặp cần tăng giá trị số lặp lên đơn vị, code trông sau Từ khố Step thơng báo cho VBA biết muốn tăng giá trị số lặp lên đơn vị sau vòng lặp Cũng với vấn đề tương tự trên, in số cửa sổ Immediate theo chiều ngược lại: in số lẻ từ 23 đến sử dụng bước nhảy -2 họcExcel.Online select * from [EXCEL] 45 Vịng lặp lồng Giả sử có ma trận 3x5 Excel lưu vùng A1:E3, cần điền toạ độ vào ô vùng từ A1:E3, sử dụng vịng lặp lồng sau họcExcel.Online select * from [EXCEL] Thốt khỏi vịng lặp - Exit for Vịng lặp tốn thời gian làm chương trình chậm lại, đơi muốn khỏi vịng lặp điều kiện thoả mãn, ví dụ sau: muốn tìm cột 5000 cột chứa giá trị “x” hàng số 1: Vịng lặp vơ tận Trong VBA, vịng lặp vơ tân khơng chạy Ví dụ sau: Sub vong_lap_vo_tan() Dim i as Integer For i = to i=1 Next i End Sub Trong đoạn code trên, giá trị i không chạy hết đến 4, có vịng lặp vơ hạn họcExcel.Online select * from [EXCEL] 47 Vịng lặp Do … While … Loop Ngồi vịng lặp For, cịn có cấu trúc lặp … while … loop Một ví dụ cho trường hợp sử dụng vịng lặp kiểu sau: Chương trình đốn số may mắn số từ tới 10, bạn phép đốn lần, thơng báo chúc mừng, sai thông báo chúc bạn may mắn lần sau Đoạn code viết sau Diễn giải: Ở vòng lặp trên, code Do … Loop While chạy lần, người dùng đốn kết lượt thơng báo chúc mừng Biến count để kiểm soát số lượt đoán cho phép, trường hợp này, người dùng đốn khơng q lần Exit Do giúp khỏi vịng lặp Vịng lặp thoát người dùng đoán số lượt đoán lớn họcExcel.Online select * from [EXCEL] 48 14 Lọc liệu từ Sheet nhiều sheets Kĩ thuật lọc liệu chương nhiều kĩ thuật để đạt mục tiêu lọc liệu nhiều sheets Mình giới thiệu kĩ thuật để bạn bắt đầu với VBA dễ dàng nắm bắt áp dụng từ phát triển ứng dụng cho cơng việc họcExcel.Online select * from [EXCEL] 49 14 Lọc liệu từ Sheet nhiều sheets Đến đây, có số lưu ý bạn định gõ lại Code vào trình soạn thảo VBA: Criteria1: ký tự cuối từ số xlPasteValues: ký tự thứ từ chữ l File ví dụ: Github: Lọc liệu từ Sheet nhiều Sheets / loc_du_lieu_01.xlsm họcExcel.Online select * from [EXCEL] 50 Diễn giải Quy trình lọc liệu từ Sheet nhiều sheets diễn giải sau: Sử dụng vịng lặp để lặp qua vùng H1:H3 chứa tên chi nhánh Với chi nhánh làm việc sau đây: Bật lọc cho vùng liệu nguồn A1:B7 Thiết lập tham số cho lọc: lọc theo cột (Field:=1), điều kiện lọc theo tên chi nhánh (Criteria1:=ten_chi_nhanh.Value) Copy kết lọc Tạo Sheet phía sau Sheet cuối Đổi tên Sheet tạo trùng tên với tên chi nhánh xử lý Dán liệu vào Sheet xử lý Trường hợp mở rộng Tách sheet nhiều sheets dựa cột liệu Sau hồn thành ví dụ phía trên, dễ dàng mở rộng ví dụ cho trường hợp tách files dựa theo nhiều cột, sau ví dụ tách sheet nhiều sheets dựa cột File ví dụ: Github: Lọc liệu từ Sheet nhiều Sheets / loc_du_lieu_02.xlsm Tách sheet liệu nhiều Workbooks Excel / Files Excel Một trường hợp hay gặp thực tế công việc nhu cầu tách sheet liệu nhiều Workbooks Excel hay Files Excel Chỉ với thay đổi nhỏ code ta giải vấn đề File ví dụ: Github: Lọc liệu từ Sheet nhiều Sheets / loc_du_lieu_03.xlsm họcExcel.Online select * from [EXCEL] 51 15 Tổng hợp liệu nhiều sheets vào sheet Để bắt đầu với ví dụ này, đầu tiên, bạn cần phải download file kèm theo xuống File ví dụ: Github: Tổng hợp liệu nhiều sheets vào sheet / tong_hop01.xlsm Diễn giải Với bảng tính files Excel, sử dụng vòng lặp for each để lặp qua tên bảng tính Nếu tên bảng tính xử lý khác “Tong hop” gán vùng liệu tuỳ thuộc điều kiện bảng tính có phải bảng tính cần xử lý hay khơng Nếu bảng tính cần xử lý, copy tiêu đề bảng tính Nếu khơng phải bảng tính cần xử lý, bỏ qua tiêu đề copy liệu mà họcExcel.Online select * from [EXCEL] 52 16 Làm việc với mảng VBA Mảng kiểu liệu VBA dùng để lưu danh sách giá trị thuộc kiểu liệu Chúng ta tưởng tượng mảng danh sách tên chi nhánh ngân hàng, dánh sách nhân viên, … Việc đưa liệu cần xử lý từ bảng tính Excel vào mảng để xử lý VBA giúp tốc độ xử lý nhanh thao tác xử lý linh hoạt File ví dụ: Github: Mảng VBA / mang_VBA_01.xlsm Trong VBA, có kiểu mảng: mảng tĩnh mảng động Tổng hợp thao tác với mảng liệu VBA, mời bạn theo dõi trang file ví dụ hướng dẫn họcExcel.Online select * from [EXCEL] 53 Mảng tĩnh Mảng động Khai báo Dim arr(0 to 5) As Long Dim arr() As Long Dim arr As Variant Đặt kích thước Kích thước mảng tĩnh đặt khai báo Redim arr(0 to 5) as Variant Thay đổi kích thước giữ ngun liệu Kích thước mảng tĩnh khơng thể thay đổi Redim Preserve arr(0 to 6) Gán dữ liệu cho phần tử mảng arr(1) = 234 arr(1) = 234 Lấy liệu từ phần tử mảng total = arr(1) total = arr(1) Chỉ số Lbound(arr) Lbound(arr) Chỉ số Ubound(arr) Ubound(arr) Lặp mảng chiều For i = Lbound(arr) to Ubound(arr) Next i For i = Lbound (arr) to Ubound(arr) Next i Lặp mảng chiều For i = Lbound(arr,1) to Ubound(arr,1) For j = Lbound(arr,2) to Ubound(arr,2) Next j Next i For i = Lbound(arr,1) to Ubound(arr,1) For j = Lbound(arr,2) to Ubound(arr,2) Next j Next i Lặp mảng Variant Dim item as Variant For Each item in arr Next item Dim item as Variant For Each item in arr Next item Function trả mảng Function GetArray() As Long() Dim arr(0 To 5) As Long GetArray = arr End Function Function GetArray() As Long() Dim arr(0 To 5) As Long GetArray = arr End Function Xoá mảng Erase arr Erase arr Chuỗi => Mảng Không áp dụng cho mảng tĩnh Dim arr as Variant arr = Split(“Học-Excel-Online”,”-“) Mảng => Chuỗi Dim sName As String sName = Join(arr, ":") Dim sName As String sName = Join(arr, ":") Range => Array Không áp dụng cho mảng tĩnh Dim arr As Variant arr = Range("A1:D2") Array => Range Dim arr As Variant Range("A5:D6") = arr Dim arr As Variant Range("A5:D6") = arr Gán giá trị Không áp dụng cho mảng tĩnh Dim arr As Variant arr = Array(“Học”, “Excel”, “Online”) họcExcel.Online select * from [EXCEL] 54 17 Sub Function Excel Từ đầu sách tới giờ, làm việc nhiều với Sub - hay gọi thủ tục Sub giúp tự động hố quy trình làm việc Ngồi Sub, VBA cịn hỗ trợ Function Function giúp cho phải viết code lặp lặp lại hơn, Function cịn giúp tự tạo hàm người dùng (UDF - User Defined Function) để sử dụng trực tiếp bảng tính Sub Function Đặc điểm Có thể chạy từ Button, Event, … Không trả giá trị Không chạy từ Button, Event, … Có thể trả giá trị đối tượng Có thể sử dụng bảng tính Khởi tạo Sub ChayBaoCao() ‘… code VBA End Sub Function DongCuoi() as Long ‘… code VBA End Function Tạo Sub/Function với tham số Sub ChayBaoCao(TenSheet as String) Function DongCuoi(TenSheet as String) Gọi Sub/Function Sử dụng Sub/Function Call ChayBaoCao ‘ ChayBaoCao Call DongCuoi ‘ DongCuoi Gọi Sub/Function với tham số Call ChayBaoCao(“CN1”) ‘ ChayBaoCao “CN1” Call DongCuoi(“CN1”) ‘ DongCuoi “CN1” Gán giá trị trả từ Function vào biến - Trả giá trị dạng nguyên thuỷ Trả đối tượng từ Function (có thêm từ khố Set) Thốt khỏi Sub / Function điều kiện thoả mãn LR = DongCuoi(“CN1”) Function GetIndex as Long GetIndex = 234 End Function - If IsError(Range("A1")) Then Exit Sub End If Function GetSheet as Worksheet Set GetSheet = ActiveSheet End Function If IsError(Range("A1")) Then Exit Function End If họcExcel.Online select * from [EXCEL] 55 18 Hàm người dùng - UDF (User defined function) Hàm người dùng Excel VBA viết Function trả lại giá trị người dùng định nghĩa Vì Function trả lại giá trị nên sử dụng bảng tính Ví dụ sau: Module (lưu ý: Module), bạn có Function tính diện tích sau Cách dùng: dùng trực tiếp với số dùng với tham chiếu tới range