1. Trang chủ
  2. » Công Nghệ Thông Tin

LẬP TRÌNH EXCEL VBA QUA CÁC VÍ DỤ

110 200 5

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 110
Dung lượng 2,62 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

LẬP TRÌNH EXCEL VBA QUA CÁC VÍ DỤ (Phần cơ bản) Hướng dẫn tự học lập trình Excel VBA cho người mới bắt đầu. Từng bước làm chủ Excel VBA ứng dụng trong quản trị và khai thác dữ liệu... LỜI NÓI ĐẦU Microsoft Excel là công cụ hàng đầu trong quản lý dữ liệu, đặc biết là các tác vụ như quản kế toán, tài chính, nhân sự, … Các bạn đã được làm quen với phần mềm Excel từ. Tuy nhiên, hầu hết các bạn chưa khai thác hết sức mạnh của công cụ ngày. Cuốn sách này sẽ giúp bạn làm quen với và khai thác một chức năng nâng cao vô cùng hiệu quả trong quản lý, phân tích dữ liệu với lập trình Excel VBA. Bạn sẽ được tìm hiểu lập trình Excel VBA qua các ví dụ cụ thể, điều đó giúp các bạn có thể hình dung một cách dễ dàng.

Trang 1

THANH TRAN, TRAN T X.

Copyright © 2019 by Thanh Tran

Trang 2

L Ờ I NÓI Đ U ẦMicrosoft Excel là công cụ hàng đầu trong quản lý dữ liệu,đặc biết là các tác vụ như quản kế toán, tài chính, nhân sự,

… Các bạn đã được làm quen với phần mềm Excel từ Tuynhiên, hầu hết các bạn chưa khai thác hết sức mạnh củacông cụ ngày

Cuốn sách này sẽ giúp bạn làm quen với và khai thác mộtchức năng nâng cao vô cùng hiệu quả trong quản lý, phântích dữ liệu với lập trình Excel VBA

Bạn sẽ được tìm hiểu lập trình Excel VBA qua các ví dụ cụthể, điều đó giúp các bạn có thể hình dung một cách dễdàng

Trang 3

Bài 6 Câu l nh If then (If Then Statement) ệ Bài 7 C u trúc l p (Loop) ấ ặ

Bài 8 L i Macro (Macro Errors) ỗ

Trang 4

B ÀI 1 T Ạ O M T Ộ MACRO (C REATE A

M ACRO )

Nội dung:

Swap Values, Run Code from a Module, Macro Recorder, Use Relative References, FormulaR1C1, Add a Macro to the Toolbar, Macro Security, Protect Macro

TRAO Đ IỔ GIÁTRỊ (SWAP VALUES)

Ví d này h ụ ướ ng d n cho b n cách trao đ i hai giá tr trong ẫ ạ ổ ị Excel VBA B n th ạ ườ ng sẽ c n c u trúc này trong các ch ầ ấ ươ ng trình ph c t p h n ứ ạ ơ

Tình hu ng: ố

Cho 2 giá tr ị

Trong commandButton1 b n vi t code nh sau: ạ ế ư

1 Khai báo bi n ế temp ki u Double.

Dim temp As Double

2 Kh i t o giá tr ban đ u cho bi n temp t ô A1, lúc này ở ạ ị ầ ế ừ temp là bi n trung gian ế

Trang 5

Ví dụ này hướng dẫn bạn cách chạy mã từ một mô-đun.

1 Mở Visual Basic Editor.

Trang 6

2 Click Insert, Module.

3 Tạo một thủ tục (macro) tên là Cyan.

Cells.Interior.ColorIndex = 28

Chạy thủ tục để thực hiện bước tiếp theo

5 Click Macros

Trang 7

6 Chọn Cyan và click Run.

Kết quả:

Trang 8

Lưu ý: mã được đặt vào một mô-đun có sẵn cho toàn bộ sổ

làm việc Điều đó có nghĩa là, bạn có thể chọn Sheet2 hoặc Sheet3 và thay đổi màu nền của các trang tính này Chươngtrình thêm Macro vào thanh công cụ minh họa cách cung cấp macro cho tất cả các sổ làm việc của bạn (tệp Excel) Hãy nhớ rằng, mã được đặt trên một trang tính (được gán cho nút lệnh) chỉ khả dụng cho trang tính cụ thể đó

BẢNGHI MACRO (MACRO RECORDER)

Trình bản ghi Macro, một công cụ rất hữu ích có trong

Excel VBA, ghi lại mọi tác vụ bạn thực hiện với Excel Tất

cả bạn phải làm là ghi lại một nhiệm vụ cụ thể một lần Tiếp theo, bạn có thể thực hiện nhiệm vụ nhiều lần với một nút bấm Trình ghi Macro cũng là một trợ giúp tuyệt vời khi bạn không biết cách lập trình một tác vụ cụ thể trong Excel VBA Chỉ cần mở Trình soạn thảo Visual Basic sau khi ghi tác vụ để xem cách lập trình

Thật không may, có rất nhiều điều bạn không thể làm với Trình ghi Macro Ví dụ: bạn không thể lặp qua một vùng

Trang 9

hay một phạm vi dữ liệu với Trình bản ghi Macro Hơn nữa, Trình bản ghi Macro sử dụng nhiều mã hơn mức cần thiết, điều này có thể làm chậm quá trình của bạn.

Trang 10

Lưu ý: nếu bạn lưu trữ macro của bạn trong Personal

Macro Workbook, macro sẽ có sẵn cho tất cả các sổ làm việc của bạn (tệp Excel) Nếu bạn lưu trữ macro của bạn trong New Workbook, macro sẽ chỉ khả dụng trong một sổ làm việc mới được mở tự động

4 Click OK

5 Nhấp chuột phải vào ô hành động (ô đã chọn) Hãy chắc chắn không chọn bất kỳ ổ nào khác! Tiếp theo, nhấp vào Format Cells

6 Chọn Percentage

Trang 11

7 Click OK.

8 Cuối cùng, click Stop Recording

Xin chúc mừng Bạn vừa ghi một macro với Trình bản ghi Macro!

Trang 12

C H Y Ạ TRÌNH B N Ả GHI M ACRO (R UN A R ECORDED M ACRO )

Bây giờ chúng tôi sẽ kiểm tra macro để xem liệu nó có thể thay đổi định dạng số thành Phần tram (Percertage) hay không

1 Nhấp số bất ký trong khoảng tử 0 đến 1

2 Chọn các số

3 Trên tab Developer, click Macros

4 Click Run

Trang 13

Kết quả:

X EM M ACRO

Để xem macro, hãy mở Visual Basic Editor

Trang 14

Lưu ý: macro đã được đặt vào mô-đun có tên Module1

Mã được đặt vào một mô-đun có sẵn cho toàn bộ bảng tính.Điều đó có nghĩa là, bạn có thể chọn Sheet2 hoặc Sheet3 vàthay đổi định dạng số lượng ô trên các trang tính này Hãy nhớ rằng, mã được đặt trên một trang tính (được gán cho nút lệnh) chỉ khả dụng cho trang tính cụ thể đó

SỬ D NGỤ TÀILI UỆ THAM KH OẢ TƯƠNGĐ IỐ(USE RELATIVE REFERENCES)

Theo mặc định, Excel ghi lại các macro ở chế độ tuyệt

đối Tuy nhiên, đôi khi rất hữu ích khi ghi macro ở chế độ

tương đối Chương trình này hướng dẫn bạn làm thế nào

để làm điều này Nếu bạn không biết cách ghi macro, chúngtôi khuyên bạn nên đọc ví dụ này trước

G HI Ở CHẾ ĐỘ TUY T Ệ Đ I Ố

Để ghi lại một macro trong chế độ tuyệt đối, thực hiện các bước sau

1 Đầu tiên, click Record Macro.

2 Tiếp theo, chọn ô B3 Nhập Sales và nhấn enter

Trang 16

Một macro được ghi ở chế độ tuyệt đối luôn tạo ra kết quả tương tự.

Trang 17

6 Nhập Logistics và nhấn enter.

Kết quả:

7 Click Stop Recording.

8 Chọn ổ bất kỳ (ví dụ, ô D4) và chạy macro đã tạo.Kết quả:

Trang 18

Excel đặt các từ liên quan đến ô được chọn ban đầu Đó là

lý do tại sao nó được gọi là ghi âm ở chế độ tương đối

FORMULAR1C1

Ví dụ này minh họa sự khác biệt giữa A1, R1C1 và

R[1]C[1] trong Excel VBA.

1 Tại một câu lệnh button trên bảng tính của bạn, biết các dòng code (kiểu A1)

Trang 19

Giải thích: ô D4 tham chiếu ô B3 (dòng (row) 3, cột

(column) 2) Đây là một tham chiếu tuyệt đối (ký hiệu $ ở phía trước số hàng và ký tự cột)

3 Thêm dòng code (kiểu R[1]C[1]):

Range("D4").FormulaR1C1 = "=R[-1]C[-2]*10"Kết quả:

Giải thích: ô D4 tham chiếu ô B3 (dòng dịch 1 lên phía trên, cột dịch 2 sang trái) Đây là một tài liệu tham khảo tương đối Dòng mã này cho kết quả chính xác giống như dòng mã được sử dụng ở bước 1

4 Tại sao học về điều này? Bởi vì Trình bản ghi Macro sử dụng thuộc tính FormulaR1C1 (kiểu R [1] C [1]) Trình ghi Macro tạo các dòng mã sau nếu bạn nhập công thức = B3 *

10 vào ô D4

Giải thích: bạn có thể thấy rằng đây là cùng một dòng mã được sử dụng ở bước 3

Trang 20

THÊMM TỘ MACROVÀOTOOLBAR

Nếu bạn sử dụng một Excel macro thường xuyên, bạn có thể thêm nó vào Quick Access Toolbar

1 Trên tab Developer, click Record Macro.

2 Tên macro MyName Chọn macro trong Personal

Macro Workbook Bằng cách này, macro sẽ có sẵn cho tất

cả các sổ làm việc của bạn (tệp Excel) Điều này là có thể bởi vì Excel lưu trữ macro của bạn trong một sổ làm việc

ẩn tự động mở khi Excel khởi động

Trang 21

3 Click Stop Recording.

4 Mở Visual Basic Editor.

5 Tạo một macro:

Trong macro này bạn đặt tên của bạn trong ActiveCell

6 Bây giờ chúng ta có thể bổ sung them macro này vào

Quick Access Toolbar Click phải Quick Access Toolbar

và chọn Customize Quick Access Toolbar

Trang 22

7 Dưới Choose commands, chọn Macros.

8 Chọn macro và click Add

9 Bạn có thể sửa đổi nút sẽ được thêm vào Quick Access Toolbar bằng cách nhấp vào Modify Ví dụ, chọn một nụ cười

Trang 24

Save để lưu macro này trong sổ làm việc ẩn tự động mở khiExcel khởi động Bằng cách này, macro sẽ có sẵn cho tất cảcác sổ làm việc của bạn (tệp Excel).

B OẢ M TẬ MACRO (MACRO SECURITY)

Để thiết lập cài đặt bảo mật macro trong Excel, hãy thực hiện các bước sau

1 Tên tab Developer, click Macro Security.

2 Ở đây bạn có bốn lựa chọn Tùy chọn đầu tiên sẽ vô hiệuhóa tất cả các macro Tùy chọn thứ hai sẽ luôn yêu cầu bạn kích hoạt macro Tùy chọn thứ ba sẽ chỉ cho phép các macro có chữ ký số chạy và yêu cầu bạn kích hoạt các macro khác Tùy chọn thứ tư sẽ kích hoạt tất cả các macro

Trang 25

Lời khuyên của chúng tôi là sử dụng cấp bảo mật thứ hai nếu bạn đang tải xuống nhiều tệp Excel từ Internet Với mức bảo mật này, bạn luôn có thể vô hiệu hóa macro nếu bạn không tin tưởng chủ sở hữu tệp Excel Sử dụng cấp độ bảo mật thứ tư nếu bạn là người mới bắt đầu và chỉ nhập các macro của riêng bạn vào lúc này Với mức bảo mật này,bạn không cần phải bật macro mọi lúc.

BẢOM TẬ MACRO

Giống như bạn có thể mật khẩu bảo vệ sổ làm việc và bảng

tính, bạn có thể dung mật khẩu bảo vệ một macro trong

Excel khỏi bị xem (và được thực thi)

Đặt nút lệnh trên bảng tính của bạn và thêm các dòng mã sau:

1 Đầu tiên, tạo một macro đơn giản bạn muốn bảo vệ

Range("A1").Value = "This is secret code"

Trang 26

2 Tiếp theo, click Tools, VBAProject Properties.

3 Trên tab Protection, tích chọn "Lock project for

viewing" và nhập password 2 lần.

4 Click OK

5 Save, đóng và mở lại file Excel Thử mở code macro.Bạn nhận được thông báo:

Trang 27

Bạn muốn mở được, bạn cần nhập đúng mật khẩu đã đặt.

6 Nếu bạn muốn mật khẩu bảo vệ macro khỏi bị thực thi, hãy thêm các dòng mã sau:

Dim password As Variant

password = Application.InputBox("Enter

Password", "Password Protected")

Select Case password

Trang 29

B ÀI 2 L ÀM VI C Ệ V I Ớ M SG B OX

Nội dung:

MsgBox Function, InputBox Function

HÀM MSGBOX

Hàm MsgBox trong Excel VBA có thể trả về kết quả trong

khi MsgBox đơn giản

Tính huống:

Tại command button trong worksheet của bạn, bạn thêm các dòng lệnh:

1 Đầu tiên, khai báo một biến answer kiểu Integer

Dim answer As Integer

Trang 30

2 Sử dụng hàm MsgBox để khởi tạo giá trị cho biến answer bằng việc nhập từ form.

Hàm MsgBox, khi sử dụng dấu ngoặc đơn, có ba đối số Phần đầu tiên được sử dụng cho tin nhắn trong hộp tin nhắn Sử dụng phần thứ hai để chỉ định các nút và biểu tượng bạn muốn xuất hiện trong hộp thông báo Phần thứ

ba được hiển thị trong thanh tiêu đề của hộp thông báo

answer = MsgBox("Are you sure you want to emptythe sheet?", vbYesNo + vbQuestion, "Empty

Sheet")

Lưu ý: Đặt con trỏ của bạn trên vbYesNo trong Visual Basic Editor và click F1 để xem các nút và biểu tượng khác

mà bạn có thể sử dụng Thay vì hằng số vbYesNo và vbQuestion, bạn cũng có thể sử dụng các giá trị tương ứng

4 và 32

3 Nếu clicks nút Yes, Excel VBA xóa trống Sheet Nếu clicks nút No, không có sự kiện gì Thêm các dòng mã sau

để đạt được điều này

If answer = vbYes Then

Trang 31

Kết quả:

HÀM INPUTBOX

Bạn có thể sử dụng hàm InputBox trong Excel VBA để nhắc người dùng nhập giá trị Đặt nút lệnh trên bảng tính của bạn và thêm các dòng mã sau:

1 Đầu tiên, khai báo biến myValue kiểu Variant

Dim myValue As Variant

Lưu ý: chúng tôi sử dụng biến kiểu Variant ở đây bởi vì biến Variant có thể giữ bất kỳ loại giá trị

2 Thêm dòng lệnh

Trang 32

myValue = InputBox("Give me some input")

3 Nhập một giá trị cho myValue từ ô A1

Range("A1").Value = myValue

Kết quả khi người dùng nhập giá trị 5 và nhấp vào nút OK

4 Hàm InputBox có nhiều đối số tùy chọn hơn Dòng mã sau đây hiển thị hộp đầu vào có tiêu đề được hiển thị trên thanh tiêu đề và có giá trị mặc định Giá trị mặc định sẽ được sử dụng nếu không có đầu vào nào khác được cung cấp

myValue = InputBox("Give me some input", "Hi", 1)

Trang 33

Kết quả khi click nút OK.

Lưu ý: Đặt con trỏ của bạn trên InputBox trong Trình soạn thảo Visual Basic và nhấp vào F1 để được trợ giúp về các đối số tùy chọn khác

Trang 34

B ÀI 3 Đ Ố I T ƯỢ NG W ORKBOOK VÀ

Nội dung:

Sales Calculator, Path and FullName, Close and Open, Loop through Books and Sheets, Import Sheets,

Programming Charts, Files in a Directory

ĐƯỜNGD NẪ VÀTÊNĐ YẦ ĐỦ (PATH AND

FULLNAME )

Thuộc tính Path trong Excel VBA trả về hoàn chỉnh,

đường dẫn lưu vào sổ làm việc (Excel file) Thuộc

tính FullName trong Excel VBA trả về hoàn chỉnh, lưu

đường dẫn, bao gồm tên của bảng tính

Download path-fullname.xls (bit.ly/2ZgB0fx) và thêm nó vào ổ "C:\test\"

Đặt nút lệnh trên bảng tính của bạn và thêm các dòng mã sau:

1 Dòng mã sau đây trả về đường dẫn đầy đủ đến fullname.xls

path-MsgBox Workbooks("path-fullname.xls").Path

Kết quả:

Trang 35

2 Dòng mã sau đây trả về đường dẫn đầy đủ, bao gồm tên của sổ làm việc đang hoạt động.

MsgBox ActiveWorkbook.FullName

Kết quả:

MỞVÀĐÓNG (CLOSEAND OPEN)

Phương thức Close và Open trong Excel VBA có thể dung

để mở và đóng workbooks Nhớ rằng, Workbooks chứa các đối tượng Workbook hiện đang mở

Trang 36

Đặt nút lệnh trên bảng tính của bạn và thêm các dòng mã sau:

Trang 37

Kết quả:

7 Tiếp theo, bạn có mở file thường dùng

Workbooks.Open (MyFile)

LẶPQUA BOOKS VÀ SHEETS

Dưới đây chúng tôi sẽ xem xét một chương trình trong Excel VBA lặp qua tất cả các bảng tính và bảng tính đang

mở và hiển thị tất cả các tên

Tình huống:

Trang 38

Thêm các dòng lệnh vào command button:

1 Đầu tiên, chúng ta khai báo hai đối tượng và một biến Một đối tượng của loại Workbook mà chúng ta gọi là book, một đối tượng của loại Worksheet mà chúng ta gọi là sheet

và một biến kiểu String chúng ta gọi là text

Dim book As Workbook, sheet As Worksheet, text As String

2 Chúng tôi muốn lặp qua tất cả các sách bài tập mở Để đạt được điều này, hãy thêm dòng mã sau:

For Each book In Workbooks

3 Viế dòng chữ "Workbook: ", tên của bảng tính, và dòng chữ "Worksheets: "" để đến biến văn bản

text = text & "Workbook: " & book.Name &

vbNewLine & "Worksheets: " & vbNewLine

Lưu ý: bạn có thể sử dụng toán tử & toán tử để nối các phần tử (nối) Để bắt đầu một dòng mới, bạn có thể sử dụngvbNewLine

4 Để lặp qua tất cả các bảng tính của sổ làm việc, hãy thêmdòng mã sau:

For Each sheet In book.Worksheets

5 Chúng tôi viết tên của các bảng tính của một bảng tính vào văn bản biến

text = text & sheet.Name & vbNewLine

Trang 39

6 Đóng vòng lặp thứ hai.

Next sheet

7 Thêm một dòng trắng

text = text & vbNewLine

8 Đừng quên đóng vòng lặp đầu tiên

Kết quả:

Trang 40

MÁY TÍNHBÁNHÀNG

Dưới đây chúng tôi sẽ xem xét một chương trình trong

Excel VBA tính toán tổng doanh số của mỗi nhân viên

trong khoảng thời gian ba năm

Tình huống:

Hai sheet khác nhau có cùng một thiết lập, nhưng với sự kết hợp khác nhau của tháng và nhân viên, và số lượng bán hàng khác nhau Có một số cách để tính tổng doanh số của

Trang 41

từng nhân viên trong Excel, nhưng chúng ta sẽ thấy rằng nó

có thể được thực hiện trong Excel VBA rất dễ dàng

Đặt nút lệnh trên bảng tính của bạn và thêm các dòng mã sau:

1 Đầu tiên, chúng tôi khai báo ba biến và một đối tượng Worksheet Một biến kiểu Chuỗi chúng ta gọi là worker, một biến kiểu Integer mà chúng ta gọi là Total, một đối tượng Worksheet mà chúng ta gọi là sheet và một biến kiểu Integer mà chúng ta gọi là i

Dim employee As String, total As Integer,

sheet As Worksheet, i As Integer

2 Chúng tôi khởi tạo hai biến Chúng tôi khởi tạo tổng biếnvới giá trị 0 Chúng tôi sử dụng hàm InputBox để lấy tên nhân viên từ người dùng

Trang 42

For Each sheet In Worksheets

4 Bắt đầu lặp For Next

For i = 2 To 13

5 Nếu tên nhân viên đã nhập khớp với tên nhân viên trong cột B, Excel VBA sẽ thêm số doanh thu vào tổng biến Thêm các dòng mã sau:

If sheet.Cells(i, 2).Value = employee Then

total = total + sheet.Cells(i, 3).Value

8 Kiểm tra chương trình

Kết quả for David:

Trang 43

TỆPTINTRONG THƯM CỤ (FILESIN A

DIRECTORY)

Dưới đây chúng tôi sẽ xem xét một chương trình trong Excel VBA lặp lại tất cả các sổ làm việc và bảng tính đã đóng trong một thư mục và hiển thị tất cả các tên

Download file: Book1.xls, Book2.xls, Book3.xls,

Book4.xls và Book5.xls (tại: http://bit.ly/31WSiLq) lưu vàothư mục "C:\test\"

Tính huống:

Thêm các dòng mã sau vào nút lệnh:

1 Khai báo 2 biến kiểu String, một biến kiểu Worksheet và

2 biến kiểu Integer

Dim directory As String, fileName As String, sheet As Worksheet, i As Integer, j AsInteger

2 Để tránh hiện tượng nhấp nháy màn hình, hãy tắt cập nhật màn hình

Application.ScreenUpdating = False

Trang 44

3 Khởi tạo thư mục biến Chúng tôi sử dụng hàm Dir để tìm * xl đầu tiên ?? tập tin được lưu trữ trong thư mục này.

directory = "c:\test\"

fileName = Dir(directory & "*.xl??")

Lưu ý: hàm Dir hỗ trợ sử dụng nhiều ký tự (*) và ký tự đơn(?) Để tìm kiếm tất cả các loại tệp Excel khác nhau

4 Biến fileName hiện giữ tên của tệp Excel đầu tiên được tìm thấy trong thư mục Thêm một vòng lặp Do While

Do While fileName <> ""

Loop

Thêm các dòng mã sau (tại 5, 6, 7, 8 và 9) vào vòng lặp

5 Khởi tạo các biến kiểu Integer và thêm tên của tệp Excel vào cột đầu tiên của hàng i

Workbooks.Open (directory & fileName)

7 Thêm tất cả các tên trang tính của tệp Excel vào các cột khác của hàng i

For Each sheet In Workbooks(fileName).Worksheets Workbooks("files-in-a-

Ngày đăng: 22/04/2021, 10:14

TỪ KHÓA LIÊN QUAN

w