Em chào thầy ạ !
Thầy cho em hỏi Code để Select một vùng ô ngẫu nhiên có chứa dữ liệu của một sheet bất kỳ với ạ.
Em đã có xem qua Bài giảng về Code tìm Dòng cuối, cũng như có tham khảo thêm về Code tìm Cột cuối (như bên dưới) ạ, thầy hướng dẫn giúp em cách viết với ạ.
----------------------------------------------------------------------------------
Sub LastColumnInOneRow()
'Find the last used column in a Row: row 1 in this example
Dim LastCol As Long
With ActiveSheet
LastCol = .Cells(1, .Columns.Count).End(xlToLeft).Column
End With
End Sub
------------------------------------------------------------------------------------
Chào bạn,
Thường trong lập trình chỉ kiểm soát những yếu tố:
- Dòng cuối, cột cuối của bảng dữ liệu
- Ô đang được chọn, đang được kích hoạt => Số dòng, số cột của ô này
Chứ không theo dõi "một vùng ô ngẫu nhiên có chứa dữ liệu" bạn nhé.
Vì VBA là lập trình hướng đối tượng nên cần có đối tượng cụ thể: Workbook nào, Sheet nào, vùng ô nào. Không thể xét tính ngẫu nhiên được.
Có thể ý bạn là :Nơi đang được chọn bằng con trỏ chuột? vì bạn nghĩ nó thay đổi ngẫu nhiên khi bạn thao tác? Đây là đối tượng:
- Với workbook thì nó là ActiveWorkbook
- Với Worksheet thì nó là ActiveSheet
- Với vị trí ô thì nó là ActiveCell
- Với 1 vùng ô thì nó là Selection
Em cám ơn Thầy đã giải thích ạ.
Em có xem lại Bài giảng về cách gọi tên địa chỉ với thuộc tính của code Cells và viết ra code như bên dưới. Mục đích của việc viết code này là để chọn những vùng Data mà vị trí trỏ chuột đang trỏ đến (ActiveCell) => chọn vùng có chứa dữ liệu tương ứng. Code này em thấy có thể copy và áp dụng tổng quát đối với bất kỳ Sheet hoặc Workbook có chứa Data ạ. => Thầy xem giúp em nó đã thực sự Tổng quát chưa với nhé ạ ?
Tuy nhiên, với điều kiện là các vùng dữ liệu không được trùng hàng/trùng cột với ActiveCell đang chọn. Nếu các vùng dữ liệu có trùng nhau ở Hàng/Cột thì theo như thao tác phím tắt [Ctrl + Shift + Mũi tên Right/Down] sẽ chọn được các vùng dữ liệu ngăn cách bởi Khoảng trắng => Có thể điều chỉnh Cách viết code LastRow hoặc LastCol nếu có dữ liệu trùng hàng/cột ngăn cách bởi Khoảng trắng không ạ?
---------------------------------------------------------------------------------------------------------
Sub RandomSelect()
'Choose Random Cells containing Data
'Find the last used column in a Row: row 1 in this example
Dim LastCol As Long
Dim CurrentCell_Row As Long
CurrentCell_Row = ActiveCell.Row
With ActiveSheet
LastCol = .Cells(CurrentCell_Row, .Columns.Count).End(xlToLeft).Column
End With
'Find the last used column in a Col: Col A in this example
Dim LastRow As Long
Dim CurrentCell_Col As Long
CurrentCell_Col = ActiveCell.Column
With ActiveSheet
LastRow = .Cells(Rows.Count, CurrentCell_Col).End(xlUp).Row
End With
Range(ActiveCell, Cells(LastRow, LastCol)).Select
End Sub
-------------------------------------------------------------------------------------------------------
Thầy ơi, em đã tìm ra cách mình mong muốn rồi ạ, không phụ thuộc vào LastRow hay LastCol gì cả ạ (Code bên dưới). Em cám ơn Thầy.
Sub Macro1 ()
ActiveCell.Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
End Sub
ok bạn. Khi làm theo đối tượng ngẫu nhiên đang được chọn thì dùng theo selection thôi.