Cập nhật thông tin chi tiết về Viết Code Với Đối Tượng Range Trong Vba Excel Đơn Giản Nhất mới nhất trên website Trucbachconcert.com. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất.
Cách viết đối tượng Range trong VBA
Range được hiểu là 1 ô hoặc 1 vùng ô trong Excel. Trong VBA có 2 dạng biểu diễn đối tượng Range:
Dạng thứ 1: Range cố định địa chỉ (hay đã xác định cụ thể tọa độ)
Khi muốn biểu diễn 1 vùng ô mà bạn đã xác định rõ tọa độ của các dòng, cột trong vùng ô đó thì bạn có thể viết theo các cách sau:
Bạn có thể viết Range chỉ với 1 ô hoặc nhiều ô, trong đó các vùng ô có thể liên tiếp nhau hoặc tách rời nhau.
Bạn có thể viết Range dựa theo ô ở điểm đầu và ô ở điểm cuối (Range dựa vào Cells để viết)
Dạng thứ 2: Range không cố định địa chỉ
Khi bạn chưa xác định rõ được vùng cần làm việc là vùng nào, dòng bao nhiêu, cột bao nhiêu bởi vùng đó có thể thay đổi trong quá trình làm việc thì bạn phải thông qua các biến. Mỗi khi câu lệnh hoạt động thì biến đó sẽ nhận 1 giá trị, Căn cứ vào giá trị đó để xác định vùng ô mà bạn muốn làm việc.
Cách viết như sau:
Khi viết dạng này, thường chỉ xác định cho 1 ô hoặc 1 vùng ô liên tiếp nhau. Chúng ta chỉ dùng 1 cách viết giống như cách viết thứ 1 của dạng Range cố định địa chỉ vì đây là cách dễ viết nhất, thông dụng nhất trong VBA.
Một số phương thức, thuộc tính của Range thường sử dụng trong VBA
Vì Range là đối tượng thường sử dụng trong lập trình VBA nên có rất nhiều phương thức, thuộc tính được sử dụng. Một số cú pháp gọi thuộc tính tiêu biểu là:
Một số ví dụ minh họa về ứng dụng của Range trong lập trình VBA
Ví dụ thứ 1: Chọn vùng ô A2:D2
Range(“A2:D2”).Select
[A2:D2].Select
Ví dụ thứ 2: Gán giá trị vào 1 vùng ô
Range(“A1”).Value = “abc”
Có nghĩa là gán vào ô A1 đoạn text là abc
Range(“A2:A5”).Value = Range(“B2:B5”).Value
Có nghĩa là lấy giá trị vào vùng A2:A5 tương ứng theo giá trị vùng B2:B5
Range(“D5”).Formula = “=COUNTIF(D1:D4,””abc””)”
Có nghĩa là gán vào ô D5 công thức =COUNTIF(D1:D4,”abc”)
Ví dụ thứ 3: Ẩn dòng, cột
Range(“A1:A5”).EntireRow.Hidden = True
Có nghĩa là ẩn từ dòng 1 đến dòng 5
Range(“A1:F1”).EntireColumn.Hidden = False
Có nghĩa là bỏ ẩn từ cột A tới cột F
Ví dụ thứ 4: Xóa dữ liệu, xóa ô, xóa dòng, cột
Range(“A1:F10”).ClearContents
Có nghĩa là chỉ xóa dữ liệu trong vùng A1:F10
Range(“A1:F10”).Clear
Có nghĩa là xóa toàn bộ dữ liệu và định dạng trong vùng A1:F10
Range(“A2:A5”).Delete
Có nghĩa là xóa toàn bộ các ô trong vùng A2:A5
Range(“A2:A5”).EntireRow.Delete
Có nghĩa là xóa toàn bộ các dòng từ dòng 2 tới dòng 5
Range chỉ là 1 đối tượng nhỏ nằm trong đối tượng lớn hơn là các Worksheet, Workbook. Do đó:
Khi không nói cụ thể thuộc Worksheet nào, Workbook nào thì chúng ta hiểu: Đó là Range thuộc ActiveSheet (Sheet đang được kích hoạt), Sheet này thuộc ActiveWorkbook (Workbook đang được kích hoạt)
Range(“A1”).ClearContents cũng chính là ActiveWorkbook.ActiveSheet. Range(“A1”).ClearContents
Trong khi đó nếu file Excel có nhiều Sheet, rất dễ xảy ra trường hợp ActiveSheet thay đổi liên tục trong quá trình chạy lệnh code, dẫn tới kết quả sai.
Trong trường hợp làm việc với nhiều Workbook cùng lúc, cũng rất dễ xảy ra việc ActiveWorkbook được thay đổi liên tục trong quá trình làm việc, dẫn tới kết quả chạy sai vị trí mong muốn.
Nếu muốn nói 1 Range thuộc 1 Sheet khác, cần nói cụ thể Sheet đó trước khi nhắc tới Range. Nếu muốn nhắc tới Sheet đó thuộc 1 Workbook khác, cần chỉ rõ tên Workbook.
Ví dụ:
Sheet5.Range(“A2:A5”).Select
Chọn vùng A2:A5 của Sheet5, trong Workbook đang làm việc
Workbook(“abc.xlsm”).Sheets(“VD”).Range(“A1”).Value = “123”
Gán giá trị 123 vào ô A1 trong Sheet có tên là VD, thuộc Workbook có tên là abc, loại file là xlsm
ThisWorkbook.Worksheets(1).Range(“VungDK”).ClearContents
Xóa dữ liệu trong vùng được đặt tên (Define Name) là VungDK, vùng này nằm trong Sheet có thứ tự là 1 của Workbook nơi đặt lệnh code.
Khi mới học lập trình VBA, chúng ta nên lưu ý viết đầy đủ cả Workbook và Worksheet khi làm việc với đối tượng Range. Trường hợp chỉ có duy nhất 1 Workbook thì nên viết cụ thể tên sheet chứa Range cần làm việc. Điều này sẽ giúp các bạn tránh nhầm lẫn, biết rõ vị trí kết quả, tránh trường hợp chạy câu lệnh bị sai vùng Range sang sheet khác.
Tìm hiểu sự khác nhau giữa các thuộc tính Text Value và Value2 của đối tượng Range trong VBA Hướng dẫn cách viết thuộc tính OFFSET của đối tượng Range trong VBA Excel Hướng dẫn cách viết thuộc tính RESIZE của đối tượng Range trong VBA Excel Hướng dẫn sử dụng vòng lặp For.. Next trong VBA Hướng dẫn cách sử dụng vòng lặp For Each trong VBA Excel
Với sứ mệnh: ” Mang cơ hội phát triển kỹ năng, phát triển nghề nghiệp tới hàng triệu người “, đội ngũ phát triển đã và đang làm việc với những học viện, trung tâm đào tạo, các chuyên gia đầu ngành để nghiên cứu và xây dựng lên các chương trình đào tạo từ cơ bản đến chuyên sâu xung quanh các lĩnh vực: Tin học văn phòng, Phân tích dữ liệu, Thiết kế, Công nghệ thông tin, Kinh doanh, Marketing, Quản lý dự án…
Gitiho tự hào khi được đồng hành cùng:
50+ khách hàng doanh nghiệp lớn trong nhiều lĩnh vực như: Vietinbank, Vietcombank, BIDV, VP Bank, TH True Milk, VNPT, FPT Software, Samsung SDIV, Ajinomoto Việt Nam, Messer,…
Hướng Dẫn Cách Viết Code Với Đối Tượng Range Trong Vba Excel
Cách viết đối tượng Range trong VBA
Range được hiểu là 1 ô hoặc 1 vùng ô trong Excel. Trong VBA có 2 dạng biểu diễn đối tượng Range:
Khi muốn biểu diễn 1 vùng ô mà bạn đã xác định rõ tọa độ của các dòng, cột trong vùng ô đó thì bạn có thể viết theo các cách sau:
Bạn có thể viết Range dựa theo ô ở điểm đầu và ô ở điểm cuối (Range dựa vào Cells để viết)
Dạng thứ 2: Range không cố định địa chỉ
Khi bạn chưa xác định rõ được vùng cần làm việc là vùng nào, dòng bao nhiêu, cột bao nhiêu bởi vùng đó có thể thay đổi trong quá trình làm việc thì bạn phải thông qua các biến. Mỗi khi câu lệnh hoạt động thì biến đó sẽ nhận 1 giá trị, Căn cứ vào giá trị đó để xác định vùng ô mà bạn muốn làm việc.
Cách viết như sau:
Một số phương thức, thuộc tính của Range thường sử dụng trong VBA
Vì Range là đối tượng thường sử dụng trong lập trình VBA nên có rất nhiều phương thức, thuộc tính được sử dụng. Một số cú pháp gọi thuộc tính tiêu biểu là:
Ví dụ thứ 1: Chọn vùng ô A2:D2
Range(“A2:D2”).Select
[A2:D2].Select
Ví dụ thứ 2: Gán giá trị vào 1 vùng ô
Range(“A1”).Value = “abc”
Có nghĩa là gán vào ô A1 đoạn text là abc
Range(“A2:A5”).Value = Range(“B2:B5”).Value
Có nghĩa là lấy giá trị vào vùng A2:A5 tương ứng theo giá trị vùng B2:B5
Range(“D5”).Formula = “=COUNTIF(D1:D4,””abc””)”
Có nghĩa là gán vào ô D5 công thức =COUNTIF(D1:D4,”abc”)
Ví dụ thứ 3: Ẩn dòng, cột
Range(“A1:A5”).EntireRow.Hidden = True
Có nghĩa là ẩn từ dòng 1 đến dòng 5
Range(“A1:F1”).EntireColumn.Hidden = False
Có nghĩa là bỏ ẩn từ cột A tới cột F
Ví dụ thứ 4: Xóa dữ liệu, xóa ô, xóa dòng, cột
Range(“A1:F10”).ClearContents
Có nghĩa là chỉ xóa dữ liệu trong vùng A1:F10
Range(“A1:F10”).Clear
Có nghĩa là xóa toàn bộ dữ liệu và định dạng trong vùng A1:F10
Range(“A2:A5”).Delete
Có nghĩa là xóa toàn bộ các ô trong vùng A2:A5
Range(“A2:A5”).EntireRow.Delete
Có nghĩa là xóa toàn bộ các dòng từ dòng 2 tới dòng 5
Range chỉ là 1 đối tượng nhỏ nằm trong đối tượng lớn hơn là các Worksheet, Workbook. Do đó:
Khi không nói cụ thể thuộc Worksheet nào, Workbook nào thì chúng ta hiểu: Đó là Range thuộc ActiveSheet (Sheet đang được kích hoạt), Sheet này thuộc ActiveWorkbook (Workbook đang được kích hoạt)
Range(“A1”).ClearContents cũng chính là ActiveWorkbook.ActiveSheet. Range(“A1”).ClearContents
Trong khi đó nếu file Excel có nhiều Sheet, rất dễ xảy ra trường hợp ActiveSheet thay đổi liên tục trong quá trình chạy lệnh code, dẫn tới kết quả sai.
Trong trường hợp làm việc với nhiều Workbook cùng lúc, cũng rất dễ xảy ra việc ActiveWorkbook được thay đổi liên tục trong quá trình làm việc, dẫn tới kết quả chạy sai vị trí mong muốn.
Nếu muốn nói 1 Range thuộc 1 Sheet khác, cần nói cụ thể Sheet đó trước khi nhắc tới Range. Nếu muốn nhắc tới Sheet đó thuộc 1 Workbook khác, cần chỉ rõ tên Workbook.
Ví dụ:
Sheet5.Range(“A2:A5”).Select
Chọn vùng A2:A5 của Sheet5, trong Workbook đang làm việc
Workbook(“abc.xlsm”).Sheets(“VD”).Range(“A1”).Value = “123”
Gán giá trị 123 vào ô A1 trong Sheet có tên là VD, thuộc Workbook có tên là abc, loại file là xlsm
ThisWorkbook.Worksheets(1).Range(“VungDK”).ClearContents
Xóa dữ liệu trong vùng được đặt tên (Define Name) là VungDK, vùng này nằm trong Sheet có thứ tự là 1 của Workbook nơi đặt lệnh code.
Khi mới học lập trình VBA, chúng ta nên lưu ý viết đầy đủ cả Workbook và Worksheet khi làm việc với đối tượng Range. Trường hợp chỉ có duy nhất 1 Workbook thì nên viết cụ thể tên sheet chứa Range cần làm việc. Điều này sẽ giúp các bạn tránh nhầm lẫn, biết rõ vị trí kết quả, tránh trường hợp chạy câu lệnh bị sai vùng Range sang sheet khác.
Tìm hiểu sự khác nhau giữa các thuộc tính Text Value và Value2 của đối tượng Range trong VBA Hướng dẫn cách viết thuộc tính OFFSET của đối tượng Range trong VBA Excel Hướng dẫn cách viết thuộc tính RESIZE của đối tượng Range trong VBA Excel Hướng dẫn sử dụng vòng lặp For.. Next trong VBA Hướng dẫn cách sử dụng vòng lặp For Each trong VBA Excel
Excel Vba: Đối Tượng Range Trong Excel Vba
Phần trước đã giới thiệu về tổng quan về Excel VBA, phần này xin giới thiệu với các bạn về một trong những đối tượng được sử dụng nhiều nhất trong khi tự động hóa bất kỳ tác vụ nào với VBA – Range.
Chúng ta tham chiếu đến các Range khác nhau trong một Worksheet và thực hiện các hoạt động khác nhau trên Range trong Excel. Chúng ta có các thuộc tính và các phương thức khác nhau để xử lý các đối tượng Range trong Excel. Đối tượng Range là đại diện của một cell (hoặc cells) trên Worksheet, là đối tượng quan trọng nhất của Excel VBA.
Ví dụ 1: đặt một nút lệnh trên Worksheet và thêm dòng code sau:
Range("B3").Value = 2Kết quả:
Ví dụ 2: đặt một nút lệnh trên Worksheet và thêm dòng code sau:
Range("A1:A4").Value = 88Kết quả:
Đối tượng Cells
Thay vì Range, bạn có thể sử dụng Cells. Sử dụng Cells đặc biệt hữu ích khi bạn muốn lặp qua các ranges.
Ví dụ 3: đặt một nút lệnh trên Worksheet và thêm dòng code sau:
Cells(3, 2).Value = 2Kết quả:
Ví dụ 4: đặt một nút lệnh trên Worksheet và thêm dòng code sau:
Range(Cells(1, 3), Cells(4, 3)).Value = 11Kết quả:
Bạn có thể khai báo một đối tượng Range bằng cách sử dụng các từ khoá Dim và Set.
Sub buttoRange1() Dim rangeObj As Range Set rangeObj = Range("B1:E4") rangeObj.Value = 8 End SubKết quả:
Phương thức Select
Một phương pháp quan trọng của đối tượng Range là phương thức Select. Phương thức Select được sử dụng để chọn một range. Ví dụ:
Dim rangeObj As Range Set rangeObj = Range("A1:C4") rangeObj.SelectKết quả:
Lưu ý: Để chọn các ô trên một Worksheet khác, bạn phải kích hoạt Worksheet này trước. Ví dụ, các dòng code sau đây chọn ô B7 trên Worksheet thứ ba từ bên trái.
Worksheets(3).Activate Worksheets(3).Range("B7").SelectPhương thức Copy/Paste
Phương thức Copy và Paste sử dụng để sao chép một dãy và dán nó vào một nơi khác trên Worksheet.
Ví dụ:
Range("B1:B2").Select chúng tôi Range("D3").Select ActiveSheet.PasteKết quả:
Range("C3:C4").Value = Range("A1:A2").Value ActiveSheet.PastePhương thức ClearContents
Phương thức ClearContents được sử dụng để chỉ xóa nội dung của một Excel Range.
Ví dụ:
Range("A1").ClearContentsHoặc đơn giản hơn bằng cách sử dụng code sau:
Range("A1").Value = ""
Phương thức ClearFormats
Phương thức ClearFormats được sử dụng để chỉ xóa định dạng của một Excel Range.
Phương thức Clear
Phương thức Clear được sử dụng để xóa một Excel Range hoàn toàn bao gồm các định dạng và dữ liệu.
Phương thức Formula
Phương thức Formula được sử dụng để thêm công thức cho Excel Range.
Ví dụ:
Range("A1").Formula = "=Sum(B1:B5)"
Kết quả
Thuộc tính Rows
Thuộc tính Rows cho phép truy cập vào một hàng cụ thể của range.
Ví dụ:
Dim rangeObj As Range Set rangeObj = Range("A1:C4") rangeObj.Rows(3).SelectKết quả:
Thuộc tính Columns
Thuộc tính Columns cho phép truy cập vào một cột cụ thể của range.
Ví dụ:
Dim rangeObj As Range Set rangeObj = Range("A1:E4") rangeObj.Columns(3).SelectKết quả:
Thuộc tính Count
Thuộc tính Count được sử dụng để đếm số ô, hàng và cột của range.
Ví dụ 1:
Dim rangeObj As Range Set rangeObj = Range("A1:C4") MsgBox rangeObj.CountKết quả:
Ví dụ 2:
Dim rangeObj As Range Set rangeObj = Range("A1:C4") MsgBox rangeObj.Rows.CountKết quả:
All Rights Reserved
Đối Tượng Worksheet Trong Excel Vba
Đối tượng Worksheet trong Excel VBA là một trong những đối tượng được sử dụng thường xuyên nhất trong khi tự động hoá các tác vụ với VBA.
Đối tượng Worksheet đại diện cho các sheet trong Workbook, tức là mỗi Workbook chứa một hoặc nhiều Worksheet.
Các phương thức của đối tượng Worksheet
Phương thức Activate
Phương thức Activate của đối tượng Worksheet trong VBA được sử dụng để kích hoạt một Worksheet cụ thể của một Workbook đang được kích hoạt.
Tại sao chúng ta cần phải kích hoạt một Worksheet bằng VBA?
Khi chúng ta phải xử lý nhiều Worksheet (sheet trong một Workbook) và bạn muốn đọc hoặc ghi vào một Worksheet (sheet) cụ thể thì bạn phải kích hoạt Worksheet đó.
Cú pháp:
Worksheets("Worksheet Name").Activate ' Or Worksheets("Worksheet Index").ActivateÁp dụng cú pháp trên bạn sẽ kích hoạt được đối tượng Worksheet cụ thể của một Workbook đang được kích hoạt.
Ví dụ 1: Activate Worksheet trong VBA với tên của Worksheet
Sub ActiveWorksheetExample1() ' sử dụng tên của một Worksheet Worksheets("data").Activate 'Or Sheets("data").Activate End SubVí dụ 2: Activate Worksheet trong VBA với chỉ số của Worksheet
Sub ActiveWorksheetExample1() ' sử dụng tên của một Worksheet Worksheets(2).Activate 'Or Sheets(2).Activate End SubCách tiếp cận tốt nhất
Lưu ý: Luôn luôn sử dụng tên của Worksheet, thay vì chỉ số của Worksheet. Và cách tiếp cận tốt nhất là gán Worksheet cho một đối tượng và sau đó làm bất cứ nhiệm vụ nào bạn muốn làm với đối tượng Worksheet cụ thể đó.
Tạo biến tham chiếu đến Worksheet
Vấn đề: Khi bạn phải làm việc với nhiều Workshet (nhiều sheet), mỗi Workbook có nhiều Worksheet. Bạn phải sử dụng phương thức Activate với hết Workshet này đến Workshet khác để đọc hoặc ghi dữ liệu từ chúng, điều này có thể dẫn đến mã rối rắm, khó hiểu khiến bạn lúng túng.
Giải quyết vấn đề
Để giải quyết vấn đề trên, có một giải pháp cho bạn đó là với mỗi Worksheet bạn tạo ra một biến tham chiếu. Sau đó, bất cứ khi nào muốn sử dụng (Activate) Worksheet nào bạn chỉ cần tham chiếu đến biến tương ứng.
Ví dụ:
Sub vidu3() ' khai báo đối tượng wb Dim wb As Workbook ' khai báo đối tượng ws Dim wsInput As Worksheet Dim wsOutput As Worksheet ' gán wb cho active Workbook Set wb = Application.ActiveWorkbook ' gán wsInput cho đối tượng Worksheet có tên "input" Set wsInput = wb.Sheets("input") ' gán wsOutput cho đối tượng Worksheet có tên "output" Set wsOutput = wb.Sheets("output") End SubXem ví dụ cụ thể tại ví dụ đối tượng Workbook và Worksheet
Phương thức Copy
Phương thức Copy của đối tượng Worksheet trong VBA được sử dụng để sao chép một Worksheet từ vị trí này sang ví trí khác trong cùng một Workbook hoặc Workbook đang tồn tại hoặc Workbook mới khác.
Cú pháp:
Sheets("Worksheet Number").Copy([Before], [After])Ví dụ 1: Copy Worksheet trong VBA với Before
Ví dụ sau sao chép sheet “Sheet3” tới vị trí trước sheet đầu tiên trong cùng Workbook. Trường hợp ‘1’ đại diện cho số chỉ mục Worksheet đầu tiên.
Sub CopySheet_Beginning1() Worksheets("Sheet3").Copy Before:=Worksheets(1) End SubVí dụ trên, chúng ta sao chép worksheet đang hoạt động đến vị trí đầu tiên trong cùng Workbook.
Sub CopySheet_Beginning2() chúng tôi Before:=Worksheets(1) End SubVí dụ 2: Copy Worksheet trong VBA với After
Ví dụ sau sao chép sheet “Sheet3” tới vị trí trước sheet cuối cùng trong cùng Workbook. Trường hợp Worksheets.Count đại diện cho số chỉ mục Worksheet cuối cùng.
Sub CopySheet_Ending1() Worksheets("Sheet3").Copy After:=Worksheets(Worksheets.Count) End SubVí dụ trên, chúng ta sao chép worksheet đang hoạt động đến vị trí cuối cùng trong cùng Workbook.
Sub CopySheet_Ending2() chúng tôi After:=Worksheets(Worksheets.Count) End SubPhương thức Delete
Cú pháp:
Worksheets("Sheet Name").DeleteVí dụ 1: Xóa Worksheet trong VBA
Ví dụ sau xóa sheet có tên “Sheet2” từ một Workbook.
Sub DeleteSheetExample1() Sheets("Sheet2").Delete ' or Sheet2.Delete End SubVí dụ trên, sẽ hiển thị hộp thoại Excel và thông báo xác nhận tới người dùng để xóa “Sheet2”.
Ví dụ 2: Xóa Worksheet trong VBA
Sub DeleteSheetExample1() ActiveSheet.Delete End SubVí dụ trên, chúng ta thực hiện xóa đối tượng Worksheet đang hoạt động từ một Workbook bằng cách sử dụng phương thức Delete của đối tượng Worksheet.
Ví dụ 3: Xóa Worksheet trong VBA – không hiển thị alert
Sub DeleteSheetExample1() Application.DisplayAlerts = False Sheets("Sheet2").Delete Application.DisplayAlerts = True End SubVí dụ trên, xóa “Sheet2” nhưng KHÔNG hiển thị hộp thoại Excel thông báo xác nhận tới người dùng.
Tìm hiểu thêm: https://msdn.microsoft.com/en-us/vba/excel-vba/articles/worksheet-object-excel
Bạn đang xem bài viết Viết Code Với Đối Tượng Range Trong Vba Excel Đơn Giản Nhất trên website Trucbachconcert.com. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất. Chúc bạn một ngày tốt lành!