Lê Thanh Tùng
Lê Thanh Tùng
Thảo luận 4 thảo luận
Vỗ tay 0 vỗ tay
Lượt xem 380 lượt xem

Code để Select một vùng ô ngẫu nhiên có chứa dữ liệu của một sheet bất

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

------------------------------------------------------------------------------------


Thảo luận 4 câu trả lời
Lượt xem 380 lượt xem
Vỗ tay vỗ tay
Lê Thanh Tùng 09:09 - Sep 10, 2020

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

Vỗ tay vỗ tay
Lê Thanh Tùng 00:09 - Sep 11, 2020

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


-------------------------------------------------------------------------------------------------------

Vỗ tay vỗ tay
Lê Thanh Tùng 00:09 - Sep 11, 2020

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

Vỗ tay vỗ tay
Lê Thanh Tùng 09:09 - Sep 11, 2020

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.

Vỗ tay vỗ tay
Câu hỏi liên quan
© 2020 - Bản quyền của Công Ty Cổ Phần Công Nghệ Giáo Dục Gitiho Việt Nam
Giấy chứng nhận Đăng ký doanh nghiệp số: 0109077145, cấp bởi Sở Kế hoạch và Đầu tư TP. Hà Nội
Giấy phép mạng xã hội số: 588, cấp bởi Bộ Thông tin và Truyền thông