Cách sử dụng visual basic trong excel

Excel 2010 Xem thêm...Ít hơn

Nếu bạn vô hiệu hóa Microsoft Visual Basic for Applications [VBA] và chạy Microsoft Excel, một số tính năng Excel trong các mục sau đây sẽ không khả dụng:

  • Các dự án VBA, Mã XLM Macro và Các điều khiển ActiveX

  • Tiện ích bổ sung chưa được biên soạn [tệp .xla]

  • Khoản mục trên menu, nút thanh công cụ và phím tắt về VBA

Lưu ý Bạn có thể vô hiệu hoá VBA trong hai cách:

  • Bằng cách đặt thiết lập cài đặt Không khả dụng khi bạn cài đặt Excel.

  • Bằng cách sử dụng chính sách hệ thống Tắt VBA cho các ứng dụng Office .

Các tính năng trong Microsoft Excel bị vô hiệu hoá khi VBA không được phép.

  • Bạn không thể tạo mã mới hoặc điều khiển ActiveX hoặc bạn có thể chạy mã hiện tại hoặc điều khiển ActiveX.

  • Khi bạn mở tệp chứa các đối tượng liên quan đến khả năng lập trình, các đối tượng bị xoá, và bạn nhận được cảnh báo sau:

    Sổ làm việc này đã mất của dự án VBA, ActiveX và bất kỳ tính năng liên quan đến khả năng lập trình khác.

    Nếu bạn bấm OK, Excel sẽ mở tệp ở chế độ chỉ đọc để đảm bảo rằng phần lập trình không vô tình bị mất.

  • Mô hình đối tượng Excel là vẫn có sẵn cho các chương trình khác; Tuy nhiên, các chương trình khác sẽ không thể tự động hóa Excel sử dụng các đối tượng lập trình.

Một uncompiled add-in là thêm vào tệp được tạo ra bằng cách sử dụng VBA. Nếu bạn mở một uncompiled add-in, bạn nhận được cảnh báo tương tự như khi bạn mở tệp chứa một dự án VBA thông thường.

Danh sách sau chứa một số trình tích hợp bổ sung có sẵn:

  • Analysis ToolPak

  • Giải quyết

  • Hướng dẫn điều kiện tổng hợp

  • Công cụ tiền tệ châu Âu

  • Hướng dẫn tìm kiếm

  • Tất cả trình bổ sung, bao gồm quản lý báo cáo và trình bổ sung từ nhà cung cấp bên thứ ba

Khi VBA không được cài đặt, bạn mở một tập tin có chức năng cung cấp trình bổ sung, Excel thay đổi kết quả công thức #NAME? bởi vì các chức năng không sẵn dùng.

Lưu ý Biên soạn trình bổ sung như tệp .xll COM Add-in, và tự động bổ sung không bị ảnh hưởng bởi VBA được cài đặt hay không.

  • Tất cả các mục trong menu con Macro menu Công cụ có sẵn, chẳng hạn như Macro, Ghi lại Macro Mớivà Visual Basic Editor

  • Thanh công cụ chuẩn Visual Basic vẫn có, nhưng nó được giới hạn có ba nút: bảo mật, Công cụ kiểm soátvà Microsoft Script Editor.

  • Điều khiển công cụ có sẵn, nhưng không có nút có sẵn.

  • Phím tắt ALT + F11 để chuyển đến Visual Basic Editor bị vô hiệu hóa, bạn hiện có thể sử dụng phím tắt ALT + F8 để mở hộp thoại Chạy Macro .

Lưu ý Các Analysis ToolPak bảng hàm trả về #NAME? Nếu VBA không được cài đặt trong các phiên bản trước Excel 2007 bao gồm:ACCRINT CUMIPMT HEX2BIN IMSUM PRICEMATACCRINTM CUMPRINC HEX2DEC INTRATE QUOTIENTAMORDEGRC DEC2BIN HEX2OCT ISEVEN RANDBETWEENAMORLINC DEC2HEX IMABS ISODD RECEIVEDBESSELI DEC2OCT IMAGINARY LCM SERIESSUMBESSELJ DELTA IMARGUMENT MDURATION SQRTPIBESSELK DISC IMCONJUGATE MROUND TBILLEQBESSELY DOLLARDE IMCOS MULTINOMIAL TBILLPRICEBIN2DEC DOLLARFR IMDIV NETWORKDAYS TBILLYIELDBIN2HEX DURATION IMEXP NOMINAL WEEKNUMBIN2OCT EDATE IMLN OCT2BIN WORKDAYCOMPLEX EFFECT IMLOG10 OCT2DEC XIRRCONVERT EOMONTH IMLOG2 OCT2HEX XNPVCOUPDAYBS ERF IMPOWER ODDFPRICE YEARFRACCOUPDAYS ERFC IMPRODUCT ODDFYIELD YIELDCOUPDAYSNC FACTDOUBLE IMREAL ODDLPRICE YIELDDISCCOUPNCD FVSCHEDULE IMSIN ODDLYIELD YIELDMATCOUPNUM GCD IMSQRT PRICECOUPPCD GESTEP IMSUB PRICEDISC

Để biết thêm thông tin về không cài đặt VBA hỗ trợ trong Office, hãy bấm vào số bài viết sau để xem bài viết trong Cơ sở Kiến thức Microsoft:

Tính năng 281953 tắt khi Visual Basic for Applications không được cài đặt

Với VBA trong Excel, bạn có thể tự động hóa các tác vụ bằng cách viết cái gọi là macro. Trong phần đầu của bài viết này, hãy cùng Gitiho tìm hiểu cách tạo một macro đơn giản sẽ được thực thi sau khi kích vào nút lệnh. Bắt đầu bằng cách bật thẻ nhà phát triển Developer. 

Developer Tab

Để bật tab Developer bạn hãy thực hiện theo các bước sau: 

Bước 1: Kích chuột phải vào bất kỳ vị trí nào trên giao diện ribbon của Excel rồi chọn tùy chọn Customize the Ribbon … trong menu xổ xuống. 


Bước 2: Trong cửa sổ mới hiện thị, chọn tùy chọn Main Tabs phía dưới mục Customize the Ribbon ở bên phải [nếu cần].

Bước 3: Di chuyển xuống phía dưới của mục Main Tabs, kích vào tùy chọn Developer.


Bước 4: Bấm nút OK để hoàn tất.

Bước 5: Quay trở lại giao diện ribbon, bạn sẽ tìm thấy thẻ Developer bên cạnh tab View như hình dưới đây.


Nút lệnh

Để đặt một nút lệnh trên file Excel của bạn, hãy thực hiện các bước sau.

Bước 1: Trên tab Developer bấm nút Insert. 

Bước 2: Trong nhóm ActiveX Controls của menu xổ xuống, bấm nút Command Button.


Bước 3: Kích giữ chuột trái và kéo để tạo một nút lệnh trên sheets bất kỳ trong file Excel, nơi bạn muốn đặt nút lệnh.

Chỉ định Macro

Để gán macro [một hoặc nhiều dòng mã] cho nút lệnh, hãy thực hiện các bước sau.

Bước 1: Kích chuột phải vào nút CommandButton1 [đảm bảo nút Design Mode được chọn].

Bước 2: Chọn tùy chọn View Code trong menu xổ xuống. Trình soạn thảo Visual Basic xuất hiện.


Bước 3: Đặt con trỏ của bạn giữa Private Sub CommandButton1_Click[] và End Sub.

Bước 4: Nhập vào dòng mã hiển thị như bên dưới.

Range["A1"].Value = "Gitiho xin chào các bạn"


Lưu ý: Cửa sổ bên trái có tên là Sheet1 [Sheet1] và ThisWorkbook được gọi là Project Explorer. Nếu Project Explorer không hiển thị, hãy bấm View, Project Explorer. Nếu cửa sổ Code cho Sheet1không hiển thị, hãy bấm Sheet1 [Sheet1]. 

Bước 5: Đóng cửa sổ Visual Basic Editor.

Bước 6: Kích vào nút lệnh trên trang tính [đảm bảo nút Design Mode được bỏ chọn].

Kết quả sẽ hiển thị như hình dưới đây:


Như vậy bạn vừa tạo một macro đơn giản trong Excel.

Trình soạn thảo Visual Basic Editor

Để mở trình soạn thảo Visual Basic Editor, trên tab Developer, bấm nút Visual Basic hoặc nhấn tổ hợp phím Alt+F11.


Cửa sổ trình soạn thảo Visual Basic Editor sẽ hiển thị như hình dưới đây.

Xem thêm: Hướng dẫn về đối tượng Range trong VBA cơ bản

MsgBox trong Excel

Để tăng tính tương tác cho bảng tính Excel có sử dụng VBA của bạn, cụ thể trong trường hợp bạn muốn đưa ra một thông báo, một lưu ý cho người dùng, chúng ta dùng MsgBox trong Excel VBA.

MsgBox là một hộp thoại trong Excel có sử dụng VBA. Mục đích của việc tạp hộp thoại này là đưa ra một thông báo cho người dùng. Một MsgBox trong Excel VBA có thể được tạo ra trong trình soạn thảo code VBA của Excel như sau:

Một tin nhắn đơn giản

Bằng cách thực hiện các bước tương tự như mục Chỉ định macro ở trên, nhưng đến bước 3 thì bạn nhập vào mã sau: 

    MsgBox "Học tin học với Gitiho thật thú vị"

Lưu ý: Đoạn mã trên phải được nhập vào giữa dòng Private Sub CommandButton1_Click [] và End Sub. Có nghĩa mã đầy đủ sẽ như sau:

Private Sub CommandButton1_Click [] 
    MsgBox "Hoc tin hoc voi Gitiho that thu vi"
End Sub

Sau đó đóng cửa sổ Visual Basic Editor và bấm vào nút lệnh để chạy đoạn code trên trong Excel VBA, chúng ta sẽ nhận được kết quả như sau:


Một tin nhắn nâng cao hơn một chút

Thay vì đưa ra một thông báo đơn giản như trên bạn có thể tạo một thông báo kiểu như yêu cầu nhập một số vào ô A1. Lúc này mã chính sẽ như sau: 

MsgBox "Entered value is " & Range["A1"].Value

Khi bạn bấm vào nút lệnh trong Excel VBA sẽ nhận được kết quả như sau:


Lưu ý: Trong câu lệnh trên Gitiho đã sử dụng toán tử & để nối [nối] hai chuỗi. Mặc dù giá trị Range ["A1"]. Không phải là một chuỗi, nhưng nó vẫn hoạt động ở đây.

Để bắt đầu một dòng mới trong tin nhắn, hãy sử dụng vbNewLine

Sử dụng đoạn mã sau

MsgBox "Line 1" & vbNewLine & "Line 2"

Khi bạn bấm vào nút lệnh trong Excel VBA sẽ nhận được kết quả như sau


Lưu ý: Những đoạn mã chỉ có mình phần mã chính. Bạn phải nhập các đoạn mã đó nằm giữa Private Sub CommandButton1_Click[] và End Sub để có được một mã VBA hoàn chỉnh.

Xem thêm: Tìm hiểu về cách tự tạo hàm Excel trong VBA 

Đối tượng Workbook và Worksheet

Phần tiếp theo Gitiho sẽ cùng các bạn tìm hiểu thêm về đối tượng Workbook và Worksheet trong Excel VBA .

Cấu trúc phân cấp đối tượng

Trong Excel VBA, một đối tượng có thể chứa một đối tượng khác và đối tượng đó có thể chứa một đối tượng khác ... Nói cách khác, lập trình VBA trong Excel liên quan đến việc làm việc với một hệ thống phân cấp đối tượng. Điều này nghe có vẻ khá khó hiểu, nhưng chúng tôi sẽ nói rõ.

“Mẹ” của tất cả các đối tượng là chính Excel. Chúng tôi gọi nó là đối tượng Ứng dụng [Application]. Đối tượng ứng dụng chứa các đối tượng khác. Ví dụ, đối tượng Workbook [tệp Excel]. Đây có thể là bất kỳ workbook nào bạn đã tạo. Đối tượng Workbook chứa các đối tượng khác, chẳng hạn như đối tượng Worksheet. Đối tượng Worksheet lại chứa các đối tượng khác, chẳng hạn như đối tượng Phạm vi [Range object].

Ở phần tạo Macro đầu tiên trong bài này đã hướng dẫn chi tiết về cách chạy một mã VBA bằng cách bám vào nút lệnh. Trong đó chúng tôi đã sử dụng dòng mã sau:

Range["A1"].Value = "Hello"

Nhưng ý nghĩa của dòng mã trên thực sự là:

Application.Workbooks["create-a-macro"].Worksheets[1].Range["A1"].Value = "Hello"

Lưu ý: Các đối tượng được kết nối bằng dấu chấm. Tuy nhiên chúng ta không phải thêm một dòng mã theo cách này. Đó là vì chúng ta đã đặt một nút lệnh của mình trong tệp create-a-macro.xlsm, trên worksheet đầu tiên. Nhưng nếu bạn muốn thay đổi mọi thứ trên các worksheet khác nhau, phải bao gồm đối tượng Worksheet.

Bộ sưu tập

Bạn có thể nhận thấy rằng Workbooks và Worksheets đều là số nhiều. Đó là bởi vì chúng là bộ sưu tập. Bộ sưu tập Workbooks chứa tất cả các đối tượng Workbook hiện đang mở. Trong khi bộ sưu tập Worksheets lại chứa tất cả các đối tượng Worksheet trong sổ làm việc.


Bạn có thể tham chiếu đến một thành viên của bộ sưu tập, ví dụ một đối tượng Worksheet đơn lẻ, theo ba cách.

1. Sử dụng tên Worksheet.

Worksheets["Sales"].Range["A1"].Value = "Hello"

2. Sử dụng số chỉ mục [1 là trang tính đầu tiên bắt đầu từ bên trái].

Worksheets[1].Range["A1"].Value = "Hello"

3. Sử dụng CodeName.

Sheet1.Range["A1"].Value = "Hello"

Để xem CodeName của một worksheet bạn cần mở trình soạn thảo Visual Basic Editor. Trong Project Explorer, tên đầu tiên là CodeName. Tên thứ hai là tên worksheet [Sales], như hình ảnh dưới đây


Lưu ý: CodeName vẫn giữ nguyên nếu bạn thay đổi tên worksheet hoặc thứ tự các worksheet của mình, vì vậy đây là cách an toàn nhất để tham chiếu worksheet. Bằng cách bấm menu View > Properties để thay đổi CodeName của một worksheet. Nhưng có một nhược điểm của phương pháp này đó là bạn không thể sử dụng CodeName nếu tham chiếu một worksheet trong một workbook khác.

Thuộc tính và phương thức

Bây giờ chúng ta hãy xem xét một số thuộc tính [Properties] và phương thức [Methods] của bộ sưu tập Workbooks và Worksheets. Thuộc tính là cái gì đó mà một bộ sưu tập có [chúng mô tả bộ sưu tập], trong khi phương thức thực hiện một cái gì đó [chúng thực hiện một hành động với một bộ sưu tập].

Để đặt một nút lệnh trên worksheet của bạn và thêm các dòng mã:

1. Chèn Method của bộ sưu tập Workbooks để tạo một workbook mới.

Workbooks.Add

2. Thuộc tính Count của bộ sưu tập Worksheets đếm số trang tính trong worksheets.

MsgBox Worksheets.Count

Kết quả khi bạn bấm vào nút lệnh trên trang tính sẽ có bảng thông báo như dưới đây hiển thị:


Lưu ý: Thuộc tính Count của bộ sưu tập Workbooks sẽ đếm số lượng workbooks đang hoạt động.

Lưu ý: Những đoạn mã chỉ có mình phần mã chính. Bạn phải nhập các đoạn mã đó nằm giữa Private Sub CommandButton1_Click[] và End Sub để có được một mã VBA hoàn chỉnh.

Xem thêm:  Hướng dẫn các phép toán trong VBA: Phép nhân, phép chia, phép cộng, mô đun

Đối tượng phạm vi Range Object

Đối tượng phạm vi Range Object là đại diện của một ô [hoặc nhiều ô] trên bảng tính [worksheet] của bạn, là đối tượng quan trọng nhất của Excel VBA. 

Ở phần tiếp theo này Gitiho sẽ giới thiệu tổng quan về các thuộc tính và phương thức của đối tượng Range. Thuộc tính là một cái gì đó mà một đối tượng có [chúng mô tả đối tượng], trong khi các phương thức thực hiện một cái gì đó [chúng thực hiện một hành động với một đối tượng].

Ví dụ về phạm vi

Đặt một nút lệnh trên trang tính của bạn và nhập vào các dòng mã sau vào cửa sổ Visual Basic Editor:

Private Sub CommandButton1_Click [] Range["B3"].Value = 2 

End Sub

Khi bạn nhấp vào nút lệnh trên trang tính, chúng ta sẽ nhật được kết quả như sau:


Với mã sau:

Private Sub CommandButton1_Click [] Range["A1:A4"].Value = 5 

End Sub

Bạn sẽ nhận được kết quả như hình dưới đây


Tương tự như vậy với mã sau:

Range["A1:A2,B3:C4"].Value = 10

Bạn sẽ nhận được kết quả như hình dưới đây


Lưu ý: Để tham chiếu đến phạm vi được đặt tên trong mã VBA Excel của bạn, hãy sử dụng dòng mã như sau:

Range["Prices"].Value = 15

Cell

Thay vì phạm vi [Range], bạn cũng có thể sử dụng Ô [cell]. Sử dụng Ô đặc biệt hữu ích khi bạn muốn lặp qua các phạm vi.

Mã sử dụng sẽ như sau:

Cells[3, 2].Value = 2

Kết quả trả về của lệnh trên sẽ như hình dưới đây.


Giải thích: Excel VBA nhập giá trị 2 vào ô ở giao điểm của hàng 3 và cột 2.

Với đoạn mã sau:

Range[Cells[1, 1], Cells[4, 1]].Value = 5

Kết quả sẽ trả về trong trang tính như hình dưới đây.


Khai báo một đối tượng phạm vi

Bạn có thể khai báo một đối tượng phạm vi bằng cách sử dụng các từ khóa Dim và Set.

Sử dụng đoạn mã đầy đủ như sau để thực hiện:

Private Sub CommandButton1_Click [] Dim example As RangeSet example = Range["A1:C4"]example.Value = 8 

End Sub

Kết quả của đoạn mã trên sẽ trả về như hình dưới đây:


Select 

Một phương thức quan trọng của đối tượng Range là phương thức Select. Phương thức Select chỉ đơn giản là chọn một phạm vi.

Tương tự bạn có thể sử dụng đoạn mã sau:

Dim example As RangeSet example = Range["A1:C4"]

example.Select 

Kết quả sẽ trả về như hình dưới đây:


Lưu ý: Để chọn các ô trên một trang tính khác [worksheet], trước tiên bạn phải kích hoạt trang tính này. Ví dụ, các dòng mã sau đây sẽ chọn ô B7 trên trang tính thứ ba từ bên trái.

Worksheets[3].Activate
Worksheets[3].Range["B7"].Select

Hàng [Rows]

Thuộc tính Rows cho phép truy cập vào một hàng cụ thể của một dải ô.

Bạn có thể sử dụng đoạn mã sau:

Dim example As RangeSet example = Range["A1:C4"]

example.Rows[3].Select

Kết quả sẽ trả về như hình dưới đây:


Cột [Columns]

Thuộc tính Columns cho phép truy cập vào một cột cụ thể của một dải ô.

Bạn có thể sử dụng đoạn mã sau:

Dim example As RangeSet example = Range["A1:C4"]

example.Columns[2].Select

Kết quả sẽ trả về như hình dưới đây:


Copy/Paste

Phương pháp Copy và Paste được sử dụng để sao chép một dải ô và dán vào một nơi khác trên trang tính.

Bạn có thể sử dụng đoạn mã sau:

Range["A1:A2"].SelectSelection.CopyRange["C3"].Select

ActiveSheet.Paste

Kết quả sẽ trả về như hình dưới đây:


Mặc dù điều này được cho phép trong Excel VBA, nhưng tốt hơn nhiều là sử dụng dòng mã bên dưới để làm chính xác như vậy.

Range["C3:C4"].Value = Range["A1:A2"].Value

Xóa [Clear]

Để xóa nội dung của một phạm vi Excel, bạn có thể sử dụng phương pháp ClearContents với mã cực kỳ đơn giản sau:

Range["A1"].ClearContents

Hoặc đơn giản là sử dụng mã:

Range["A1"].Value = ""

Lưu ý: Sử dụng phương pháp Clear để xóa nội dung và định dạng của một dải ô. Sử dụng phương pháp ClearFormats để chỉ xóa định dạng.

Đếm [Count]

Với thuộc tính Count, bạn có thể đếm số ô, hàng và cột của một phạm vi.


Bạn có thể sử dụng đoạn mã sau:

Dim example As RangeSet example = Range["A1:C4"]

MsgBox example.Count

Kết quả trả về sẽ là bảng thông báo sau hiển thị:


Hoặc cũng có thể sử dụng mã sau:

Dim example As RangeSet example = Range["A1:C4"]

MsgBox example.Rows.Count

Kết quả trả về sẽ như hình dưới đây:


Lưu ý: Theo cách tương tự, bạn có thể đếm số cột của một phạm vi.

Lưu ý: Những đoạn mã chỉ có mình phần mã chính. Bạn phải nhập các đoạn mã đó nằm giữa Private Sub CommandButton1_Click[] và End Sub để có được một mã VBA hoàn chỉnh.

Xem thêm:  Hướng dẫn các phép toán trong VBA: Phép nhân, phép chia, phép cộng, mô đun

Ở phần này của bài viết, Gitiho sẽ hướng dẫn các bạn cách khai báo, khởi tạo và hiển thị một biến trong Excel VBA. Việc cho phép Excel VBA biết bạn đang sử dụng một biến được gọi là khai báo một biến. Khởi tạo đơn giản có nghĩa là gán giá trị bắt đầu [ban đầu] cho một biến.

Đặt một nút lệnh trên trang tính của bạn và thêm các dòng mã bên dưới. Để thực hiện các dòng mã, hãy bấm vào nút lệnh trên trang tính.

Số nguyên [Integer]

Biến số nguyên được sử dụng để lưu trữ số nguyên.

Đặt một nút lệnh trên trang tính của bạn và nhập vào các dòng mã sau vào cửa sổ Visual Basic Editor:

Dim x As Integerx = 6

Range["A1"].Value = x

Mã đầy đủ phải nhập sẽ là 

Private Sub CommandButton1_Click [] Dim x As Integerx = 6Range["A1"].Value = x

End Sub

Kết quả khi bạn bấm vào nút lệnh trên trang tính sẽ hiển thị như hình dưới đây:


Giải thích: Dòng mã đầu tiên sẽ khai báo một biến có tên x kiểu Integer. Tiếp theo, chúng ta khởi tạo x với giá trị 6. Cuối cùng ghi giá trị của x vào ô A1.

Chuỗi [String]

Biến chuỗi được sử dụng để lưu trữ văn bản.

Đoạn mã cụ thể như sau:

Dim book As Stringbook = "bible"

Range["A1"].Value = book

Kết quả trả về sẽ như hình ảnh dưới đây:


Giải thích: Dòng mã đầu tiên khai báo một biến có sổ tên kiểu String. Tiếp theo, khởi tạo sách bằng văn bản. Luôn sử dụng dấu nháy đơn để khởi tạo biến String. Cuối cùng, ghi văn bản của sổ biến vào ô A1.

Gấp đôi [Double]

Một biến kiểu Double chính xác hơn một biến kiểu Integer và cũng có thể lưu số sau dấu phẩy.

Đoạn mã cụ thể như sau:

Dim x As Integerx = 5.5

MsgBox "value is " & x

Kết quả bảng thông báo sau sẽ hiển thị:


Nhưng đó không phải là giá trị phù hợp. Vì chúng tôi khởi tạo biến với giá trị 5.5 và nhận được giá trị 6. Những gì chúng tôi cần là một biến kiểu Double vì vậy mã sẽ như sau:

Dim x As Doublex = 5.5

MsgBox "value is " & x

Kết quả trả về sẽ là bảng thông báo sau:


Boolean

Sử dụng biến Boolean để giữ giá trị True hoặc False.

Đoạn mã cụ thể như sau:

Dim continue As Booleancontinue = True

If continue = True Then MsgBox "Boolean variables are cool"

Kết quả trả về sẽ là bảng thông báo sau:


Giải thích: Dòng đầu tiên khai báo một biến có tên là kiểu Boolean. Tiếp theo, chúng ta khởi tạo continue với giá trị True. Cuối cùng, sử dụng biến Boolean để chỉ hiển thị MsgBox nếu biến giữ giá trị True.

Lưu ý: Những đoạn mã chỉ có mình phần mã chính. Bạn phải nhập các đoạn mã đó nằm giữa Private Sub CommandButton1_Click[] và End Sub để có được một mã VBA hoàn chỉnh.

Xem thêm: Hướng dẫn cách tùy biến comment trong Excel bằng VBA [Phần 1]

Câu lệnh If Then

Sử dụng câu lệnh If Then trong Excel VBA để thực thi các dòng mã nếu một điều kiện cụ thể được đáp ứng.

Câu lệnh If Then

Đầu tiên bạn đặt một nút lệnh VBA trên trang tính [thực hiện như phần đầu Cách tạo Macro trong Excel] của bạn và nhập vào các dòng mã sau:

Dim score As Integer, result As Stringscore = Range["A1"].ValueIf score >= 60 Then result = "pass"

Range["B1"].Value = result

Mã đầy đủ phải nhập sẽ là 

Private Sub CommandButton1_Click [] Dim score As Integer, result As Stringscore = Range["A1"].ValueIf score >= 60 Then result = "pass"Range["B1"].Value = result

End Sub

Giải thích: Nếu phạm vi ô A1 lớn hơn hoặc bằng 60, Excel VBA sẽ trả về kết quả Pass [Đạt].

Kết quả khi bạn bấm vào nút lệnh trên trang tính sẽ hiển thị như hình dưới đây:


Lưu ý: Nếu phạm vi ô A1 nhỏ hơn 60, Excel VBA sẽ đặt giá trị của kết quả trống vào ô B1.

Else Statement

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

Dim score As Integer, result As Stringscore = Range["A1"].ValueIf score >= 60 Then    result = "pass"Else    result = "fail"End If

Range["B1"].Value = result

Giải thích: Nếu phạm vi ô A1 lớn hơn hoặc bằng 60, Excel VBA trả về kết quả là Pass [Đậu], nếu không Excel VBA trả về kết quả là Fail [Trượt].

Kết quả khi bạn bấm vào nút lệnh trên trang tính sẽ hiển thị như hình dưới đây:


Lưu ý: Chỉ khi bạn có một dòng mã sau câu lệnh Then và no Else statement thì mới được phép đặt một dòng mã ngay sau Then và bỏ qua [bỏ đi] End If [ví dụ đầu tiên]. Nếu không, hãy bắt đầu một dòng mới sau các từ Then và Else và kết thúc bằng End If [ví dụ thứ hai].

Lưu ý: Những đoạn mã chỉ có mình phần mã chính. Bạn phải nhập các đoạn mã đó nằm giữa Private Sub CommandButton1_Click[] và End Sub để có được một mã VBA hoàn chỉnh.

Xem thêm: Hướng dẫn cách tùy biến comment trong Excel bằng VBA [Phần 2]

Vòng lặp Loop

Looping [vòng lặp] là một trong những kỹ thuật lập trình mạnh mẽ nhất. Nó là quá trình lặp lại 1 đoạn mã theo một số lần nhất định trong VBA. Ưu điểm của nó là giúp giảm thời gian của những việc phải thực hiện lặp đi lặp lại nhiều lần như in ấn hàng loạt Hóa đơn, phiếu thu, phiếu chi … với một mẫu phiếu duy nhất.

Single Loop [Vòng lặp đơn]

Bạn có thể sử dụng một vòng lặp đơn để lặp qua phạm vi ô một chiều.

Bạn có thể đặt một nút lệnh trên trang tính của mình và nhập vào các dòng mã sau:

Dim i As IntegerFor i = 1 to 6    Cells [i, 1] .Value = 100

Next i

Mã đầy đủ phải nhập sẽ là 

Private Sub CommandButton1_Click [] Dim i As IntegerFor i = 1 to 6    Cells [i, 1] .Value = 100Next i

End Sub

Kết quả khi bạn bấm vào nút lệnh trên trang tính sẽ hiển thị như hình dưới đây:


Giải thích: Các dòng mã giữa For và Next sẽ được thực thi sáu lần. Với i = 1, Excel VBA nhập giá trị 100 vào ô ở giao điểm của hàng 1 và cột 1. Khi Excel VBA đến Next i, nó tăng i với 1 và nhảy trở lại câu lệnh For. Đối với i = 2, Excel VBA nhập giá trị 100 vào ô ở giao điểm của hàng 2 và cột 1 …

Lưu ý: Nên sử dụng phím tab để tạo thụt lề cho mã giữa các từ For và Next. Điều này sẽ giúp cho mã của bạn dễ đọc hơn.

Double Loop [Vòng lặp kép]

Khi chúng ta cần thực hiện nhiều vòng lặp lồng nhau trong cùng 1 câu lệnh VBA, khi đó chúng ta cần sử dụng vòng lặp kép.

Bạn có thể đặt một nút lệnh trên trang tính của mình và nhập vào các dòng mã sau:

Dim i As Integer , j As IntegerFor i = 1 To 6    For j = 1 To 2        Cells [i, j] .Value = 100    Next j

Next i

Kết quả khi bạn bấm vào nút lệnh trên trang tính sẽ hiển thị như hình dưới đây:


Giải thích: Với i = 1 và j = 1, Excel VBA nhập giá trị 100 vào ô ở giao điểm của hàng 1 và cột 1. Khi Excel VBA đến Next j, nó tăng j với 1 và nhảy trở lại câu lệnh For j. Đối với i = 1 và j = 2, Excel VBA nhập giá trị 100 vào ô ở giao điểm của hàng 1 và cột 2. 

Tiếp theo, Excel VBA bỏ qua Next j vì j chỉ chạy từ 1 đến 2. Khi Excel VBA đến Next i, nó tăng i với 1 và nhảy trở lại câu lệnh For i. Đối với i = 2 và j = 1, Excel VBA nhập giá trị 100 vào ô ở giao điểm của hàng 2 và cột 1 …

Triple Loop [Vòng lặp ba]

Bạn có thể sử dụng một vòng lặp ba để lặp qua các phạm vi hai chiều trên nhiều trang tính Excel.

Đặt một nút lệnh trên trang tính của bạn và nhập vào các dòng mã sau vào cửa sổ Visual Basic Editor:

Dim c As Integer, i As Integer, j As IntegerFor c = 1 To 3    For i = 1 To 6        For j = 1 To 2            Worksheets[c].Cells[i, j].Value = 100        Next j    Next i

Next c

Giải thích: Thay đổi duy nhất được thực hiện so với mã cho vòng lặp kép là chúng tôi đã thêm một vòng lặp nữa và thêm Worksheets[c]. Ở phía trước Cells để lấy phạm vi hai chiều trên sheet đầu tiên cho c = 1, sheet thứ hai cho c = 2 và sheet thứ ba cho c = 3. 

Do While Loop

Bên cạnh vòng lặp For Next, còn có các vòng lặp khác trong Excel VBA. Ví dụ, vòng lặp Do While Loop. Mã được đặt giữa Do While và Loop sẽ được lặp lại miễn là phần sau Do While là đúng.

Bạn tiến hành đặt một nút lệnh trên trang tính của mình và nhập vào các dòng mã sau vào cửa sổ Visual Basic Editor:

Dim i As Integeri = 1Do While i < 6    Cells[i, 1].Value = 20    i = i + 1

Loop

Kết quả khi bạn bấm vào nút lệnh trên trang tính sẽ hiển thị như hình dưới đây:


Giải thích: Miễn là i nhỏ hơn 6, Excel VBA nhập giá trị 20 vào ô ở giao điểm của hàng i và cột 1 và tăng i lên 1. Trong Excel VBA [và trong các ngôn ngữ lập trình khác], ký hiệu '= 'nghĩa là trở thành. Nó không có nghĩa là bình đẳng. Vì vậy, i = i + 1 có nghĩa là i trở thành i + 1. 

Nói cách khác lấy giá trị hiện tại của i và thêm 1 vào nó. Ví dụ: nếu i = 1, i trở thành 1 + 1 = 2. Kết quả là giá trị 20 sẽ được đặt vào cột A năm lần [không phải 6 vì Excel VBA dừng khi kết quả bằng 6].

[Còn tiếp]

Trên đây Gitiho vừa giới thiệu với các bạn Phần 1 của bài viết Tìm hiểu về VBA và cách sử dụng cơ bản nhất trong Excel. Hãy tiếp tục theo dõi các bài viết tiếp theo của chúng tôi để tiếp tục tìm hiểu về VBA nhé. Chúc các bạn thành công!.

Thời đại công nghệ 4.0 đang dần đi vào cuộc sống đòi hỏi mọi người phải tự trang bị kiến thức tin học cho phù hợp để có thể bắt kịp nhưng thay đổi nhanh chóng này. Chẳng ai khác ngoài bạn hiểu mình cần trang bị thêm kiến thức gì. Hãy tìm hiểu ngay TẠI ĐÂY những khóa học hấp dẫn, có tính thực tế cao của Gitiho và đăng ký nhận tư vấn ngay hôm nay.

Cùng tham gia cộng đồng hỏi đáp về chủ đề Tin học văn phòng

Video liên quan

Chủ Đề