Xem Nhiều 3/2023 #️ Viết Code Với Đối Tượng Range Trong Vba Excel Đơn Giản Nhất # Top 6 Trend | Trucbachconcert.com

Xem Nhiều 3/2023 # Viết Code Với Đối Tượng Range Trong Vba Excel Đơn Giản Nhất # Top 6 Trend

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 = 2

Kế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 = 88

Kế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 = 2

Kế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 = 11

Kế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 Sub

Kế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.Select

Kế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").Select

Phươ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.Paste

Kết quả:

Range("C3:C4").Value = Range("A1:A2").Value ActiveSheet.Paste

Phươ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").ClearContents

Hoặ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).Select

Kế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).Select

Kế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.Count

Kết quả:

Ví dụ 2:

Dim rangeObj As Range Set rangeObj = Range("A1:C4") MsgBox rangeObj.Rows.Count

Kế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 Sub

Ví 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 Sub

Cá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 Sub

Xem 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 Sub

Ví 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 Sub

Ví 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 Sub

Ví 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 Sub

Phương thức Delete

Cú pháp:

Worksheets("Sheet Name").Delete

Ví 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 Sub

Ví 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 Sub

Ví 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 Sub

Ví 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!