Networks Business Online Việt Nam & International VH2

HƯỚNG DẪN VBA CƠ BẢN CHO NGƯỜI MỚI BẮT ĐẦU

Đăng ngày 06 November, 2022 bởi admin

Trong bài hướng dẫn VBA dưới đây, Học Excel Online sẽ giới thiệu bạn khóa học VBA cơ bản cho người mới bắt đầu, cụ thể là tập trung vào việc tạo macro Excel. Để hiểu rõ hơn bạn có thể xem qua một vài ví dụ trong bài viết và thực hiện theo.

Các thuật ngữ cơ bản sử dụng trong bài viết 

  • Macro Excel : chuỗi những lệnh mà bạn hoàn toàn có thể sử dụng để tự động hóa những tác vụ .
  • VBA : là ngôn từ lập trình sử dụng để tạo macro. Đây là viết tắt của Visual Basic for Application .
  • Line of code (dòng mã): Đây là các lệnh trong VBA.

  • SUB : một sub được tạo thành từ nhiều line of code ( dòng mã ). Khi sub chạy VBA sẽ đi qua những dòng mã và triển khai những thao tác thích hợp. Macro và Sub về cơ bản giống nhau .
  • Module : module chỉ đơn thuần là vùng chứa những Sub. Các sub chứa dòng mã. Không có số lượng giới hạn về số lượng so với module trong workbook hoặc số lượng sub trong một module .
  • VBA Editor : Đây là vị trí viết mã. Nhấn Alt + F11 sẽ quy đổi giữa Excel và Visual Basic Editor. Nếu Visual Basic không thì nhấn Alt + F11 sẽ tự động hóa mở .

Ảnh chụp màn hình hiển thị bên dưới hiển thị những phần chính của Visual Basic Editor :

Thủ thuật khi hoạt động VBA

Khi triển khai những hoạt động giải trí trong bài hướng dẫn này hãy đóng toàn bộ những workbook khác đang thao tác trong Excel .

Tạo module

Trong excel tất cả chúng ta sử dụng ngôn từ VBA để tạo macro. VBA là viết tắt của Visual Basic For Applications. Khi sử dụng thuật ngữ Excel Macro có nghĩa là đang đề cập đến VBA. Thuật ngữ macro về cơ bản là một tên gọi khác của sub .
Trong VBA tất cả chúng ta tạo những dòng hướng dẫn để VBA giải quyết và xử lý. Chúng ta đặt những dòng mã trong một sub. Các sub này được tàng trữ trong mô-đun .

Hoạt động 1:

  1. Mở một workbook thao tác mới trong Excel .
  2. Mở Visual Basic ( Alt + F11 ) .
  3. Chuyển đến hành lang cửa số Project – VBAProject ở bên trái ( hoặc nhấn Ctrl + R ) .
  4. Bấm chuột phải vào workbook và bấm Insert, sau đó nhấp vào Module .
  5. Nhấp vào Module 1 trong hành lang cửa số Project – VBAProject .
  6. Trong hành lang cửa số Property ở dưới cùng bên trái ( F4 nếu không hiển thị ) đổi khác tên module1 thành Myfirstmodule .

Kết thúc hoạt động 1

Module chỉ đơn thuần là nơi bạn chứa mã. Module giống như là những kệ sách trong hiệu sách. Mục đích chính là tàng trữ sách theo sự phân loại đơn cử để toàn diện và tổng thể có tổ chức triển khai và cấu trúc hơn .
Cửa sổ chính hay là hành lang cửa số mã là vị trí để viết mã. Để xem mã cho bất kể module nào bạn chỉ cần đúp vào mục Project-VBAProject .

Hoạt động 2

  1. Mở workbook mới và tạo một module giống hệt như đã làm trong hoạt động giải trí trước .
  2. Bấm đúp vào module mới trong hành lang cửa số Project-VBAProject .
  3. Cửa sổ mã cho module này mở ra. Bạn thấy tên thanh tiêu đề của Visual Basic .

Kết thúc hoạt động 2

Việc có bao nhiêu module trong workbook và bao nhiêu mục Sub trong một module là tùy vào mục tiêu tác vụ. Ngoài ra cách đặt tên cho module và cách tổ chức triển khai những Sub cũng sẽ tùy thuộc vào bạn .
Trong phần tiếp theo sẽ hướng dẫn sử dụng Sub .

Cách sử dụng Sub

Mỗi dòng mã là một lệnh để VBA giải quyết và xử lý. Và những dòng mã đó được nhóm lại gọi là sub và đặt những sub này trong module .

Chúng ta tạo sub để VBA xử lý các lệnh trong mỗi dòng mã mà chúng ta đưa ra. Khi chúng ta chọn Run Sub từ menu thì VBA sẽ quét qua các dòng mã trong Sub và xử lý lần lượt.

Hoạt động 3

  1. Tạo module như hướng dẫn tiên phong .
  2. Chọn module mở cửa sổ Project-VBAproject nhấp vào module cần chọn. Đảm bảo tên hiển thị trên thanh tiêu đề .
  3. Nhập dòng sau vào hành lang cửa số mã và nhấn Enter .
  1. VBA sẽ tự động hóa thêm dòng thứ 2 End Sub. Chúng ta đặt mã giữa hai dòn g này .
  2. Giữa 2 dòng này nhập dòng

Bạn đã tạo được một phụ :

  1. Nhấp vào sub để bảo vệ con trỏ được đặt ở đó. Chọn RunRun Sub / UserForm từ menu ( hoặc nhấn F5 ) .

Lưu ý : nếu bạn không đặt con trỏ vào sub VBA sẽ chạy những tab đang hiển thị .

  1. Mở Excel ( Alt + F11 ). Bạn sẽ thấy giá trị 5 trong ô A1 .
  2. Thêm từng dòng dưới đây vào sub, chạy sub và kiểm tra hiệu quả .

Bạn sẽ thấy “ some text ” trong ô B1 ; 5,55 trong ô C3 đến E5 và Now hiển thị trong ô F1 .

Kết thúc hoạt động 3.

Điền giá trị vào ô

Hãy xem dòng mã trong phần trước
Chúng ta cũng hoàn toàn có thể viết dòng này như thế này
Tuy nhiên bạn không cần sử dụng Value vì đây là thuộc tính mặc đinh. Chúng ta sử dụng những dòng mã như vậy để gán giá trị ( ví dụ như sao chép ) giữa những ô và những biến .
VBA nhìn nhận bên phải của dấu ” = ” và đặt tác dụng vào biến / cell / khoanh vùng phạm vi nằm bên trái dầu bằng .
Phần mã bên trái dấu bằng
Trong mã này, Sheet 1 đề cập đến tên mã của trang tính. Chúng ta sử dụng tên mã để tham chiếu đến những trang tính trong workbook. Khi tham chiếu đến một trang tính thì ta hoàn toàn có thể sử dụng thuộc tính Range ( Phạm vi ) của trang tính để số lượng giới hạn một ô hoặc nhiều ô .
Bằng cách này tất cả chúng ta hoàn toàn có thể sao chép giá trị từ ô này sang ô khác .
Dưới đây là ví dụ :

Hoạt động 4

  1. Tạo một workbook mới .
  2. Thêm những giá trị vào những ô trong Sheet1 bằng cách thủ công bằng tay như sau : 20 với C1 và 80 với C2 .
  3. Tạo một sub mới có tên là Act4 .
  4. Viết mã để đặt giá trị từ C1 vào A1 .
  5. Viết mã để đặt hiệu quả của C2 + 50 vào ô A2 .
  6. Viết mã để nhân những giá trị trong ô C1 vào C2. Đặt tác dụng vào ô A3 .
  7. Chạy mã. Các ô phải có giá trị A1 20. A2 130 và A3 là 1600 .

Các ô trong các trang tính khác nhau

Chúng ta hoàn toàn có thể thuận tiện sao chép giữa những ô trên những trang tính khác nhau. Nó cũng tương tự như với sao chép những ô trên cùng một trang tính. Sự độc lạ duy nhất là tên trang tính sử dụng trong mã .
Trong hoạt động giải trí dưới đây sẽ hướng dẫn tất cả chúng ta triển khai .

Hoạt động 5.

  1. Thêm một trang tính mới vào workbook thao tác. Bây giờ có 2 trang tính là sheet1 và sheet 2 .
  2. Tạo một sub mới có tên là Act5 .
  3. Thêm mã để sao chép giá trị từ C1 trên Sheet1 sang ô A1 trên Sheet2 .
  4. Thêm mã để đặt tác dụng từ C1 + C2 trên Sheet1 đến ô A2 trên Sheet2 .
  5. Thêm mã để đặt hiệu quả từ C1 * C2 trên Sheet1 đến ô A3 trên Sheet2 .
  6. Chạy mã trong sub ( F5 ). Các ô trên Sheet2 phải có những giá trị như sau : A1 20, A2 100 và A3 1600

Tên mã của trang tính

Tất cả hướng dẫn trên đây tất cả chúng ta sử dụng tên mặc định cho những trang tính như Sheet1 và Sheet 2. Để đặt tên khác tất cả chúng ta đổi khác tên mã của trang tính. Trong hành lang cửa số Project-VBAProject bạn sẽ thấy sheet1 cả bên trong và bên ngoài dấu ngoặc đơn .

  • Sheet1bên trái là tên mã của trang tính .
  • Sheet1bên phải ( trong ngoặc đơn ) là tên trang tính. Đây là tên bạn thấy trên tab trong Excel .

Tên mã có các thuộc tính sau:

  1. Có thể sử dụng nó tham chiếu trực tiếp trang tính như đã làm. Ví dụ :

Lưu ý : tất cả chúng ta chỉ hoàn toàn có thể sử dụng tên mã nếu trang tính nằm trong cũng workbook với mã .

  1. Nếu tên trang tính biến hóa mã sẽ vẫn hoạt động giải trí nếu tất cả chúng ta sử dụng tên mã để tham chiếu đến trang tính .

Tên trang tính có các thuộc tính sau:

  1. Để tham chiếu trang tính bằng cách sử dụng tên trang tính, tất cả chúng ta cần sử dụng cả workbook ví dụ như sau
  1. Nếu tên trang tính biến hóa tất cả chúng ta phải biến hóa tên trong mã của mình. Ví dụ : nếu biến hóa tên sheet1 thành Data thì cgungs ta cần thay như sau :

Chúng ta chỉ hoàn toàn có thể đổi khác tên mã trong hành lang cửa số Property .
Chúng ta hoàn toàn có thể đổi khác tên trang tính từ tab và cả hành lang cửa số Property .

Hoạt động 6: 

  1. Mở một workbook thao tác mới và tới Visual Basic .
  2. Nhấp vào Sheet1 trong Cửa sổ Project – VBAProject ( Ctrl + R nếu không hiển thị ) .
  3. Chuyển đến hành lang cửa số Thuộc tính ( F4 nếu không hiển thị ) .
  4. Thay đổi tên mã của trang tính thành shReport .
  5. Tạo một module mới đặt tên modAct6. .
  6. Thêm sub sau và chạy ( F5 )
  1. Sau đó thêm sub và chạy
  2. Ô A1 giờ đây phải có giá trị66và ô B2 phải có giá trị55.
  3. Thay đổi tên của trang tính trong Excel thànhreportbằng cách nhấp chuột phải vào tab trang tính và đổi tên .
  4. Xóa nội dung của những ô và chạy lại mãUseCodename. Mã sẽ vẫn chạy đúng mực .
  5. Chạy lạisubUseWorksheetname. Bạn sẽ gặp lỗi

    “Subscript out of Range”

    có nghĩa là không có trang tính nào được gọi làSheet1trong bộ sưu tập trang tính .

  6. Thay đổi mã như sau và chạy lại. Bây giờ mã sẽ chạy đúng chuẩn .

Lệnh With

Có một điều dễ nhận thấy đó là tất cả chúng ta cần sử dụng tên trang tính nhiều mỗi khi muốn tham chiếu khoanh vùng phạm vi trong mã. Một cách đơn thuần hơn là tất cả chúng ta sử dụng câu lệnh With .
Chúng ta chỉ cần đề cập tên trang tính một lần và VBA sẽ vận dụng cho bất kể khoanh vùng phạm vi nào tất cả chúng ta sử dụng .
Trong VBA tất cả chúng ta lấy bất kỳ mục nào trước khi dừng mã và sử dụng câu lệnh With .
Cập nhật với câu lệnh With
Chúng ta sử dụng With để bắt đầu trong ví dụ trên. Bất cứ khi nào VBA dừng trọn vẹn nó sẽ sử dụng trang tính trước đó .
Chúng ta sử dụng lệnh With với những đối tượng người tiêu dùng trong VBA gồm có workbook, range, biểu đồ …
Biểu thị kết thúc lệnh with bằng Endwith .

Thụt lề với các dòng mã

Bạn quan tâm là những dòng dòng mã giữa ở giữa đều thụt sang phải. Điều này gọi là thụt lề mã .
Chúng ta luôn luôn thụt lề mã giữa những mục trong VBA như Sub, câu lệnh IF, with For loop …
Bạn hoàn toàn có thể sắp xếp những dòng mã ở bên phải bằng cách chọn những dòng mã thích hợp và nhấn phím Tab. Nhấn Shift và Tab sẽ chuyển sang trái .

Hoạt động 7

  1. Viết lại đoạn mã sau bằng câu lệnh With

Lời giải :

Sao chép giá trị giữa nhiều ô

Bạn hoàn toàn có thể sao chép những giá trị từ dải ô này sang dải ô khác
Điều cần quan tâm là tất cả chúng ta sử dụng thuộc tính Value của vùng tài liệu nguồn. Nếu bỏ lỡ nó để trống vào vùng tài liệu đích .
Đoạn mã trên là một cách rất hiệu suất cao để sao chép giá trị giữa những ô. Bạn không cần phải chọn, sao chép và dán một cách thủ công bằng tay .
Khi thao tác nên nhớ vùng tài liệu nguồn và tài liệu đích phải có cùng kích cỡ .

  • Nếu vùng tài liệu đích nhỏ thì chỉ ô trong phạm bị mới được lấp đầy. Điều này khác với Copy / Paste ở chỗ tất cả chúng ta chỉ cần chỉ định ô tiên phong và Excel sẽ điền những ô còn lại .
  • Nếu vùng tài liệu đích lớn hơn thì những ô bị dư sẽ hiển thị # N.A.

Hoạt động 8:

  1. Tạo một workbook .
  2. Thêm một trang tính mới vào workbook gồm có sheet 1 và sheet 2 .
  3. Thêm tài liệu sau vào vùng tài liệu C2 : E4 trên sheet1 .
  1. Viết mã để sao chép tài liệu từ Sheet1 sang khoanh vùng phạm vi B3 : D5 trên Sheet2 .
  2. Chạy mã ( F5 ) .
  3. Xóa hiệu quả và sau đó đổi khác khoanh vùng phạm vi đích nhỏ hơn khoanh vùng phạm vi nguồn. Chạy lại và kiểm tra hiệu quả .
  4. Xóa tác dụng và sau đó đổi khác khoanh vùng phạm vi đích lớn hơn khoanh vùng phạm vi nguồn. Chạy lại và kiểm tra tác dụng .

Lời giải

Chuyển đổi vùng dữ liệu ô

Nếu bạn cần quy đổi từ hàng sang cột và ngược lại hoàn toàn có thể sử dụng WorksheetFunction Transpose. Đặt những giá trị từ 1 đến 4 vào những ô A1 đến A4. Đoạn mã sau sẽ ghi những giá trị từ E1 đến H1
Đoạn mã sau sẽ đọc từ E1 : H1 đến L1 : L4
Chúng ta hoàn toàn có thể chia một dòng trên nhiều dòng bằng cách sử dụng dấu gạch dưới ( _ ), ví dụ :

Cách sử dụng các biến

Biến là một phần trong ngôn từ lập trình. Các biến giống như những ô nhỏ trong bộ nhớ. Chúng ta sử dụng để lưu những giá trị trong thời điểm tạm thời trong khi mã đang chạy .
Chúng ta thực thi với biến như sau :

  1. Khai báo ( tức là tạo biến ) .
  2. Lưu trữ một giá trị trong biến .
  3. Đọc một giá trị tàng trữ trong biến .

Các kiểu biến tất cả chúng ta sử dụng cũng tương tự như những kiểu tài liệu tất cả chúng ta sử dụng trong Excel .
Bảng dưới đây cho thấy những biến thông dụng. . Trên trong thực tiễn, bạn hoàn toàn có thể sẽ sử dụng Long và String cho 90 % những biến của mình .

Type Chi tiết
Boolean Chỉ hoàn toàn có thể đúng hoặc sai
Currency Giống như số thập phân nhưng chỉ có 4 số thập phân
Date Sử dụng cho ngày / giờ
Double Sử dụng cho số thập phân
Long Sử dụng cho số nguyên
String Sử dụng cho văn bản
Variant VBA sẽ quyết định hành động loại biến trong thời hạn chạy

Khai báo các biến

VBA không bắt buộc khai báo biến tuy nhiên tất cả chúng ta nên thực thi thao tác này để những thao tác sau sẽ thuận tiện hơn. Để “ Require Variable Declaration ” ( nhu yếu khai báo biến ) tất cả chúng ta thêm dòng sau vào module :

Để VBA tự động thêm dòng này, hãy chọn Tools-> Options  từ menu và chọn Require Variable Declaration . Bất cứ khi nào bạn tạo một module  mới, VBA sẽ thêm dòng này vào đầu.

Khai báo một biến rất đơn thuần, chỉ cần sử dụng định dạng sau :
Bạn hoàn toàn có thể tùy ý đặt tên biến. Dưới đây là ví dụ về khai báo :
Để đặt giá trị trong một biến, tất cả chúng ta sử dụng cùng kiểu câu lệnh có dấu bằng .

Hoạt động 9:

  1. Tạo một sub mới và đặt tên làusingVariables.
  2. Khai báo một biến để lưu số đếm và đặt giá trị là5.
  3. Khai báo một biến để lưu giá vé ( price ) và đặt giá trị là99,99.
  4. Khai báo một biến để tàng trữ một vương quốc và đặt giá trị thành“ Spain ”.
  5. Khai báo một biến để tàng trữ ngày kết thúc và đặt giá trị làngày 21 st March 2020 .
  6. Khai báo một biến để tàng trữ nếu một cái gì đó được hoàn thành xong. Đặt giá trị thànhWrong.

Lời giải:

Immediate Window

VBA có một công cụ tiện lợi thực sự cho phép chúng tôi kiểm tra đầu ra Công cụ này là Immediate window. Bằng cách sử dụng Debug.Print, chúng ta có thể ghi các giá trị, văn bản và kết quả của các phép tính vào immediate window.

Để xem cửa sổ này, bạn có thể chọn View-> Immediate window từ menu hoặc nhấn Ctrl + G. Các giá trị sẽ được ghi ngay cả khi Immediate window không hiển thị.

Chúng ta hoàn toàn có thể sử dụng Immediate window để viết ra những biến để kiểm tra những giá trị nó chứa. Nếu update mã từ hoạt động giải trí ở đầu cuối, tất cả chúng ta hoàn toàn có thể ghi ra những giá trị của mỗi biến. Chạy mã bên dưới và kiểm tra hiệu quả trong Immediate window .

Điền vào giữa các biến và ô

Chúng ta hoàn toàn có thể ghi và đọc giá trị giữa ô và ô, ô và biến, biến và biến bằng cách sử dụng dòng gán .
Ví dụ :

Hoạt động 10:

  1. Tạo một workbook trống với có hai trang tính : Sheet1 và Sheet2 .
  2. Đặt văn bản “ Thành Phố New York ” vào ô A1 trên sheet1. Đặt số 49 vào ô C1 trên Sheet2 .
  3. Tạo sub đọc những giá trị thành những biến từ những ô này .
  4. Thêm mã để ghi những giá trị vào Immediate window .

Lỗi không khớp (Type Mismatch)

VBA hoàn toàn có thể quy đổi biến. Nếu tất cả chúng ta gán 99,55 cho biến Long thì VBA sẽ chuyển thành số nguyên. Ví dụ trong đoạn mã dưới đây sẽ làm tròn thành 100 .
VBA hoàn toàn có thể quy đổi khá nhiều số như sau :

Tuy nhiên, ngay cả VBA cũng có giới hạn của nó. Đoạn mã sau sẽ dẫn đến lỗi Loại không khớp vì VBA không thể chuyển đổi văn bản thành số

Mẹo : Các lỗi không khớp thường xảy ra do người dùng vô tình đặt văn bản vào một ô mà chứa tài liệu số .

Hoạt động 11:

  1. Khai báo kiểu biếnDoublegọi là

    Amount.

  2. Gán một giá trị gây ra lỗi Loại Không khớp ( Mismatch type ) .
  3. Chạy mã và bảo vệ lỗi xảy ra .

Chuỗi nội dung trong Power Query

Source: https://vh2.com.vn
Category : Tin Học