befaint
|||||||||||||
- Tham gia
- 6/1/11
- Bài viết
- 14,515
- Được thích
- 19,699
Bài 6. Range, Cells
(Danh sách các bài viết về VBA xem ở đây Index - Các bài viết về VBA)
1. Đối tượng Range
+ Cấu trúc:
Cell1 là cell đầu tiên trong vùng được gọi tới, tham số bắt buộc.
Cell2 là cell cuối cùng trong vùng được gọi tới, tham số không bắt buộc.
- Range có thể gồm một hoặc nhiều cells.
- Range có thể gồm một hoặc nhiều dòng/ cột, vùng không liên tục:
Ví dụ:
+ Các cách viết gọi một range trong VBA:
*Lưu ý:
- Khi gọi một range ta viết chỉ định cho một worksheet nào đó: Sheet1.Range("A5:B10")
Nếu không viết chỉ định Range("A5:B10") cho một worksheet cụ thể thì sẽ được hiểu Range đang gán cho worksheet hiện hành ActiveSheet.Range("A5:B10"). Khi gọi một Sub (thủ tục) nào đó trong cửa sổ VBA phải đảm bảo worksheet muốn thực hiện Sub đó phải đang được Active, nếu không sẽ chạy nhầm worksheet; hoặc ta có thể gán Sub đó vào nút lệnh trên worksheet muốn thực hiện và kích hoạt Sub bằng cách click vào nút lệnh.
2. Đối tượng Cells
+ Cấu trúc:
- RowIndex: Địa chỉ dòng của cell cần gọi, nếu bỏ qua thì mặc định tham số nhận giá trị là 1.
- ColumnIndex: Địa chỉ cột của cell cần gọi, nếu bỏ qua thì Cells trả về có chỉ số trong Range được tính từ trái sang phải, từ trên xuống dưới.
- Nếu bỏ qua cả 2 tham số thì trả về toàn bộ Cells trong Range.
Ví dụ:
3. Một số thuộc tính, phương thức thường dùng
3.1. Thuộc tính:
Value
Value2
Text
Xét ví dụ cụ thể bên dưới:
Formula / Hasformula
Offset
Cú pháp:
RowOffset: Số dòng giữa vùng tham chiếu gốc và vùng đích, hướng về phía trên Range thì RowOffset mang giá trị âm.
Nếu không nhập thì RowOffset=0, cú pháp khi đó:
ColumnOffset: Số cột giữa vùng gốc và vùng đích, hướng về bên trái Range thì ColumnOffset mang giá trị âm.
Nếu không nhập thì ColumnOffset=0, cú pháp khi đó:
Ví dụ:
Resize
Cú pháp:
RowSize: Số dòng dãn ra so với cell đầu tiên của vùng tham chiếu gốc.
- Nếu không nhập thì RowSize=Range.Rows.Count, cú pháp khi đó:
ColumnSize: Số cột dãn ra so với cell đầu tiên của vùng tham chiếu gốc.
- Nếu không nhập thì ColumnSize=Range.Columns.Count, cú pháp khi đó:
Ví dụ:
Count: Đếm các ô có trong range
Cell.Row: Trả về địa chỉ dòng của ô được gọi.
Cell.Column: Trả về địa chỉ cột của ô được gọi.
Address: Trả về địa chỉ của vùng được gọi
Numberformat: Định dạng dữ liệu vùng tham chiếu tới.
End: Trả về cell cuối cùng theo hướng chỉ định.
(Nó tương ứng với việc nhấn Ctrl + Up/Down/Left/Right Arrow)
Cú pháp:
Với XlDirection có 4 tham số: xlDown, xlToLeft, xlToRight, xlUp
Ứng dụng thuộc tính End() để xác định dòng cuối cùng có dữ liệu:
3.2. Phương thức:
Select: Chọn vùng
Activate: Kích hoạt cell chỉ định hiện hành
Copy: Sao chép vùng dữ liệu, bằng với thao tác chọn vùng dữ liệu rồi nhấn Ctrl + C
Paste: Dán dữ liệu sau khi sao chép, bằng với thao tác nhấn Ctrl + V
Clear: Xóa nội dung và định dạng của vùng chỉ định
ClearContents: Chỉ xóa nội dung
ClearFormats: Chỉ xóa định dạng
Delete: Xóa vùng, xóa dòng/cột, xóa ô (bằng với thao tác nhấn tổ hợp phím Ctrl và dấu trừ -)
Find: Tham khảo các bài viết sau.
http://www.giaiphapexcel.com/dienda...-phương-thức-tìm-kiếm-find-find-method.15116/
http://www.giaiphapexcel.com/diendan/threads/dùng-phương-thức-find.92686/page-2
http://www.giaiphapexcel.com/dienda...ng-thức-find-findnext-trong-hàm-tự-tạo.37436/
(Danh sách các bài viết về VBA xem ở đây Index - Các bài viết về VBA)
1. Đối tượng Range
+ Cấu trúc:
PHP:
Worksheets.Range(Cell1, [Cell2])
Cell2 là cell cuối cùng trong vùng được gọi tới, tham số không bắt buộc.
- Range có thể gồm một hoặc nhiều cells.
- Range có thể gồm một hoặc nhiều dòng/ cột, vùng không liên tục:
Ví dụ:
PHP:
Set Rng1 = Sheet1.Range("A5", "B10")
Set Rng2 = Sheet1.Columns("B:D")
Set Rng3 = Sheet1.Rows("2:5")
PHP:
Range("A5", "B10")
'Hoặc:'
Range("A5:B10")
'Hoặc:'
[A5:B10]
- Khi gọi một range ta viết chỉ định cho một worksheet nào đó: Sheet1.Range("A5:B10")
Nếu không viết chỉ định Range("A5:B10") cho một worksheet cụ thể thì sẽ được hiểu Range đang gán cho worksheet hiện hành ActiveSheet.Range("A5:B10"). Khi gọi một Sub (thủ tục) nào đó trong cửa sổ VBA phải đảm bảo worksheet muốn thực hiện Sub đó phải đang được Active, nếu không sẽ chạy nhầm worksheet; hoặc ta có thể gán Sub đó vào nút lệnh trên worksheet muốn thực hiện và kích hoạt Sub bằng cách click vào nút lệnh.
2. Đối tượng Cells
+ Cấu trúc:
PHP:
Worksheets.Cells([RowIndex], [ColumnIndex])
Range.Cells([RowIndex], [ColumnIndex])
- ColumnIndex: Địa chỉ cột của cell cần gọi, nếu bỏ qua thì Cells trả về có chỉ số trong Range được tính từ trái sang phải, từ trên xuống dưới.
- Nếu bỏ qua cả 2 tham số thì trả về toàn bộ Cells trong Range.
Ví dụ:
PHP:
Sub RngObject()
Dim Rng As Range, Cll As Range, Cll1 As Range
Set Rng = Sheet1.Range("A5:B10")
Set Cll = Sheet1.Cells(1, 1)
Set Cll1 = Rng.Cells(1, 1)
MsgBox Rng.Address & vbNewLine & Cll.Address & vbNewLine & Cll1.Address
End Sub
3. Một số thuộc tính, phương thức thường dùng
3.1. Thuộc tính:
Value
Value2
Text
Xét ví dụ cụ thể bên dưới:
Formula / Hasformula
PHP:
Sub Set_Formula()
Dim Cll As Range, i As Long
Set Cll = Sheet1.Range("C5")
For i = 0 To 5
Cll.Offset(i, 0).Value = i + 10
Next i
Cll.Offset(6, 0).Formula = "=Sum(C5:C10)"
MsgBox Cll.Offset(6, 0).HasFormula
End Sub
Cú pháp:
PHP:
Range.Offset([RowOffset],[ColumnOffset])
Nếu không nhập thì RowOffset=0, cú pháp khi đó:
PHP:
Range.Offset(, ColumnOffset)
Nếu không nhập thì ColumnOffset=0, cú pháp khi đó:
PHP:
Range.Offset(RowOffset)
PHP:
Sub Offset()
'Range.Offset([RowOffset],[ColumnOffset])'
Dim Cll As Range, Rng As Range
Set Cll = Sheet1.Range("B2")
Set Rng = Sheet1.Range("A5:A10")
MsgBox Cll.Offset(1, 1).Address '$C$3'
MsgBox Cll.Offset(, 2).Address '$D$2'
MsgBox Cll.Offset(2).Address '$B$4'
MsgBox Rng.Offset(1, 1).Address '$B$6:$B$11'
MsgBox Rng.Offset(, 1).Address '$B$5:$B$10'
MsgBox Rng.Offset(2).Address '$A$7:$A$12'
End Sub
Resize
Cú pháp:
PHP:
Range.Resize([RowSize],[ColumnSize])
- Nếu không nhập thì RowSize=Range.Rows.Count, cú pháp khi đó:
PHP:
Range.Resize(, ColumnSize)
- Nếu không nhập thì ColumnSize=Range.Columns.Count, cú pháp khi đó:
PHP:
Range.Offset(RowSize)
PHP:
Sub Resize()
'Range.Resize([RowSize],[ColumnSize])'
Dim Cll As Range, Rng As Range
Set Cll = Sheet1.Range("B2")
Set Rng = Sheet1.Range("A5:A10")
MsgBox Cll.Resize(2, 2).Address '$B$2:$C$3'
MsgBox Cll.Resize(, 2).Address '$B$2:$C$2'
MsgBox Cll.Resize(2).Address '$B$2:$B$3'
MsgBox Rng.Resize(3, 3).Address '$A$5:$C$7'
MsgBox Rng.Resize(, 2).Address '$A$5:$B$10'
MsgBox Rng.Resize(2).Address '$A$5:$A$6'
End Sub
PHP:
Sub CountCells()
Dim Rng As Range
Set Rng = Sheet1.Range("A1:B10")
MsgBox Rng.Count
''20
End Sub
Cell.Column: Trả về địa chỉ cột của ô được gọi.
PHP:
Sub RowColumnOfCell()
MsgBox Sheet1.Range("D20").Row '20'
MsgBox Sheet1.Range("D20").Column '4'
End Sub
PHP:
Sub RngAddress()
MsgBox Sheet1.Range("A2:B9").Address
'"$A$2:$B$9" '
End Sub
PHP:
Sub FormatRange()
Sheet1.Range("A15").Value = 1000000
Sheet1.Range("A15").NumberFormat = "#,0"
Sheet1.Range("A16").Value = Date
Sheet1.Range("A16").NumberFormat = "dd/mm/yyyy"
End Sub
(Nó tương ứng với việc nhấn Ctrl + Up/Down/Left/Right Arrow)
Cú pháp:
PHP:
Range.End(XlDirection)
PHP:
Sub EndDirection()
Range("G20").End(xlDown).Select
'Tra vê cell duoi cung côt G có du liêu liên tuc, tinh tu G20'
'Press: Ctrl + Arrow Down from cell G20'
Range("G20").End(xlUp).Select
'Tra vê cell trên cung côt G có du liêu dâu tiên, tinh tu G20'
'Press: Ctrl + Arrow Up from cell G20'
Range("G20").End(xlToLeft).Select
'Tra vê cell dâu tiên bên trái trên dòng 20 có du liêu, tinh tu G20'
'Press: Ctrl + Arrow Left from cell G20'
Range("G20").End(xlToRight).Select
'Tra vê cell ngoài cùng bên phai trên dòng 20 có du liêu liên tuc, tinh tu G20'
'Press: Ctrl + Arrow Right from cell G20'
End Sub
PHP:
Sub LastRow1()
'Tra vê dòng trên cùng có du liêu dâu tiên, xet tu cell duoi cùng bang tinh tro lên'
Dim lRow As Long
lRow = Sheet1.Range("A" & Sheet1.Rows.Count).End(xlUp).Row
'Voi Excel 2003-97: Rows.Count=65,536 '
'Voi Excel 2007 tro len: Rows.Count=1,048,576 '
MsgBox lRow
End Sub
PHP:
Sub LastRow2()
'Tra vê dòng duoi cùng có du liêu liên tuc, xet tu cell chi dinh tro xuong'
Dim lRow As Long
lRow = Sheet1.Range("A5").End(xlDown).Row
MsgBox lRow
End Sub
3.2. Phương thức:
Select: Chọn vùng
PHP:
Range("A2:C10").Select
PHP:
Cells(2,5).Activate
PHP:
Range("A2:C10").Copy
PHP:
Sub CopyRange()
Range("A1:A3").Select
Selection.Copy
Range("C15").Select
ActiveSheet.Paste
End Sub
'Viêt gon:'
Sub CopyRange2()
Range("A1:A3").Copy Range("C15")
End Sub
ClearContents: Chỉ xóa nội dung
ClearFormats: Chỉ xóa định dạng
PHP:
Sub Clear()
Dim Rng As Range
Set Rng = Sheet1.Range("A1:C30")
Rng.Clear 'Xoa nôi dung va dinh dang'
Rng.ClearContents 'Chi xóa nôi dung'
Rng.ClearFormats 'Chi xoa dinh dang'
End Sub
PHP:
Sub Delete()
Sheet1.Rows("25:30").Delete
Sheet1.Columns("H:K").Delete
End Sub
http://www.giaiphapexcel.com/dienda...-phương-thức-tìm-kiếm-find-find-method.15116/
http://www.giaiphapexcel.com/diendan/threads/dùng-phương-thức-find.92686/page-2
http://www.giaiphapexcel.com/dienda...ng-thức-find-findnext-trong-hàm-tự-tạo.37436/