Lệnh select ? (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Hoàng Nhật Phương

Thành viên gắn bó
Tham gia
5/11/15
Bài viết
1,895
Được thích
1,219
Xin chào các bạn,

Tôi đang vướng một trường hợp như sau:
Với file đính kèm,

Khi tôi muốn lựa chọn ô B16, tôi dùng câu lệnh:
Mã:
Range("B" & Range("B1048576").End(xlUp).Row+1).Select 'B16

Khi tôi muốn lựa chọn ô B23, tôi dùng câu lệnh:
Mã:
Range("B" & Range("E1048576").End(xlUp).Row).Select 'B23

Vậy khi tôi muốn lựa chọn vùng B16:B23, thì câu lệnh phải viết như thế nào?
Các bạn giúp tôi trường hợp này với ạ.
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn dùng như thế này
Mã:
Range([B65536].End(3).Offset(1, 0), [E65536].End(3).Offset(0, -3)).Select
 
Upvote 0
PHP:
Sub SelectRange()
 
 Range([B1].End(xlDown).Offset(1), [e1000000].End(xlUp).Offset(, -3)).Select
 MsgBox Selection.Address

End Sub
Mã:
Sub RangeSelect()
 Dim Rw As Long

 Rw = [e1000000].End(xlUp).Row
 Range([B1000000].End(xlUp).Offset(1), Cells(Rw, "B")).Select
 MsgBox Selection.Address
End Sub
 
Upvote 0
Khi tôi muốn lựa chọn ô B16, tôi dùng câu lệnh:
Mã:
Range("B" & Range("B1048576").End(xlUp).Row+1).Select 'B16

Khi tôi muốn lựa chọn ô B23, tôi dùng câu lệnh:
Mã:
Range("B" & Range("E1048576").End(xlUp).Row).Select 'B23

Vậy khi tôi muốn lựa chọn vùng B16:B23, thì câu lệnh phải viết như thế nào?

Tôi viết đúng như của bạn, chỉ thay Select bằng row
Mã:
Dim dongA&, dongB&

dongA = Range("B" & Range("B58576").End(xlUp).Row + 1).Row
dongB = Range("B" & Range("E58576").End(xlUp).Row).Row
Range("B" & dongA, "B" & dongB).Select
 
Upvote 0
Xin cảm ơn các bạn: dhn46 ,Hoang2013 ,haonlh rất nhiều
Tôi đã chạy thử các code trên tất cả đều chạy OK ạ.

Có một trường hợp sau, các bạn xem giúp ạ:
nếu B1:B23 và E1:E23 đều có dữ liệu thì các code trên đều di chuyển đến B23:B24
trong trường hợp này tôi muốn không di chuyển đến đâu cả, có được không ạ? :-=
 
Upvote 0
Xin cảm ơn các bạn: dhn46 ,Hoang2013 ,haonlh rất nhiều
Tôi đã chạy thử các code trên tất cả đều chạy OK ạ.

Có một trường hợp sau, các bạn xem giúp ạ:
nếu B1:B23 và E1:E23 đều có dữ liệu thì các code trên đều di chuyển đến B23:B24
trong trường hợp này tôi muốn không di chuyển đến đâu cả, có được không ạ? :-=
Thử thế này xem sao:
Mã:
If [B65536].End(3).Row <> [E65536].End(3).Row Then Range([B65536].End(3).Offset(1, 0), [E65536].End(3).Offset(0, -3)).Select
 
Upvote 0
Bạn đang tìm hiểu VBA?

Nếu bạn muốn tìm hiểu để áp dụng công việc thì bạn phải "thử".

Trong các code cung cấp cho bạn đều sử dụng Range và Offset. Range thì bạn biết rồi, Offset bạn đã biết chưa?

Vậy bạn hãy tìm hiểu cấu trúc của Offset đi đã, thử nghiệm sau đó rút ra kết luận, đó là cách tiếp cận VBA dễ dàng hơn.

Thân,
 
Upvote 0
Xin cảm ơn các bạn: dhn46 ,Hoang2013 ,haonlh rất nhiều
Tôi đã chạy thử các code trên tất cả đều chạy OK ạ.

Có một trường hợp sau, các bạn xem giúp ạ:
nếu B1:B23 và E1:E23 đều có dữ liệu thì các code trên đều di chuyển đến B23:B24
trong trường hợp này tôi muốn không di chuyển đến đâu cả, có được không ạ? :-=

Bạn muốn có "nếu" thì bạn cho thêm "nếu" vào thôi.
PHP:
Public Sub GPE()
Dim x As Long, y As Long
x = Range("B65536").End(xlUp).Row
y = Range("E65536").End(xlUp).Row
If y > x Then Range("B" & x + 1).Resize(y - x).Select
End Sub
 
Upvote 0
Bạn đang tìm hiểu VBA?

Nếu bạn muốn tìm hiểu để áp dụng công việc thì bạn phải "thử".

Trong các code cung cấp cho bạn đều sử dụng Range và Offset. Range thì bạn biết rồi, Offset bạn đã biết chưa?

Vậy bạn hãy tìm hiểu cấu trúc của Offset đi đã, thử nghiệm sau đó rút ra kết luận, đó là cách tiếp cận VBA dễ dàng hơn.

Thân,

Cảm ơn giaiphap & cảm dhn46 nhiều vì đã đã hỗ trợ cho tôi ạ.
với Range và Offset thì tôi mới tìm hiểu và chỉ biết chút chút về 2 cái này thôi ạ, nếu bạn có các ví dụ minh họa hoặc các tài liệu liên quan thì xin hãy chỉ dẫn thêm cho tôi với ạ.


Bạn muốn có "nếu" thì bạn cho thêm "nếu" vào thôi.
PHP:
Public Sub GPE()
Dim x As Long, y As Long
x = Range("B65536").End(xlUp).Row
y = Range("E65536").End(xlUp).Row
If y > x Then Range("B" & x + 1).Resize(y - x).Select
End Sub
Cảm ơn Ba Tê ,Code của bạn dễ hiểu và hình như là rất sáng tạo :-=
Giúp tôi biết thêm một cái nữa (cái Resize ).
 
Upvote 0
Các bạn cho hỏi thêm:
Trong trường hợp dữ liệu như ảnh kèm bên dưới thì dùng code gì để có thể di chuyển đến được các ô màu vàng ạ.

Untitled.jpg
 
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
Di chuyển đến các ô là sao, đến lần lượt từng ô hay select tất cả các ô trống (màu vàng)?

Xin chào Ba Tê; cảm ơn bạn đã đã giúp đỡ.
Di chuyển đến tất cả các ô màu vàng cùng một lúc được không bạn,
nghĩa là thế này ạ:
Mã:
Range("B4,B7,B12:B14,B16,B21").Select

Câu hỏi của bạn khiến cho tôi liên tưởng đến nhiều vấn đề liên quan đến các tập tin khác của tôi, nếu có thể mong bạn viết giúp thêm 1 code di chuyển lần lượt từng ô theo chiều từ trên xuống dưới được không ạ?
 
Lần chỉnh sửa cuối:
Upvote 0
Xin chào Ba Tê; cảm ơn bạn đã đã giúp đỡ.
Tất cả cùng một lúc được không bạn?

Câu hỏi của bạn khiến cho tôi liên tưởng đến nhiều vấn đề liên quan đến các tập tin khác của tôi, nếu có thể mong bạn viết giúp thêm 1 code di chuyển lần lượt từng ô theo chiều từ trên xuống dưới được không ạ?

Có 2 Sub cho 2 trường hợp, bạn thử xem:
PHP:
Sub GPE1()
    Range("B1", Range("B6000").End(xlUp)).SpecialCells(xlCellTypeBlanks).Select
End Sub
'------------------------------------------------------------'
Public Sub GPE2()
Dim Cll As Range
For Each Cll In Range("B1", Range("B6000").End(xlUp))
    If Cll = Empty Then MsgBox Cll.Address, , "GPE"
Next Cll
End Sub
 
Upvote 0
Có 2 Sub cho 2 trường hợp, bạn thử xem:
PHP:
Sub GPE1()
    Range("B1", Range("B6000").End(xlUp)).SpecialCells(xlCellTypeBlanks).Select
End Sub
'------------------------------------------------------------'
Public Sub GPE2()
Dim Cll As Range
For Each Cll In Range("B1", Range("B6000").End(xlUp))
    If Cll = Empty Then MsgBox Cll.Address, , "GPE"
Next Cll
End Sub

Xin chào Ba Tê; cảm ơn bạn đã giúp đỡ.


Bạn code còn nhanh hơn cả tôi viết câu hỏi nữa . :)
Xin lỗi bạn vì tôi chưa giải thích rõ ràng, điều kiện di chuyển đến cột B thì phụ thuộc vào cột E,
khi các dòng trong cột E có dữ liệu mà tương ứng với dòng đó tại cột B không có dữ liệu thì lựa chọn các ô không có dữ liệu này tại cột B mà cột E có.


Hic, các bạn hiểu không vậy. Hình như tôi giải thích mà tôi đọc còn thấy khó hiểu.**~**
 
Upvote 0
Xin chào Ba Tê; cảm ơn bạn đã giúp đỡ.


Bạn code còn nhanh hơn cả tôi viết câu hỏi nữa . :)
Xin lỗi bạn vì tôi chưa giải thích rõ ràng, điều kiện di chuyển đến cột B thì phụ thuộc vào cột E,
khi các dòng trong cột E có dữ liệu mà tương ứng với dòng đó tại cột B không có dữ liệu thì lựa chọn các ô không có dữ liệu này tại cột B mà cột E có.


Hic, các bạn hiểu không vậy. Hình như tôi giải thích mà tôi đọc còn thấy khó hiểu.**~**

Là do bạn không giải thích trong file cụ thể, nhìn hình sao biết được "nguyên tắc" của bạn là có "dính liếu" đến cột E?
PHP:
Public Sub GPE2()
Dim Cll As Range
For Each Cll In Range("B1", Range("B6000").End(xlUp))
    If Cll = Empty And Cll.Offset(, 3) <> Empty Then MsgBox Cll.Address, , "GPE"
Next Cll
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Hình như không fải vậy thầy BT ơi!

Nếu bạn biết fương thức UNION() không?

Nếu chưa thì vầy

Khai báo 1 biến kiểu Range, như Dim rRng As Range

Sau đó ta Set rRng = [A65500] nào đó tít khơi xa
Sau đó tạo vòng lặp duyệt các dòng trong cột
Nếu gặp ô đang duyệt & bên cột [E] là rỗng thì ta xài lệnh

Set rRng=UNION(rRng,Cells(j,"B")) 'Cell(J,"B") là ô đang duyệt thuộc cột đang rỗng'

Cuối macro sẽ là câu lệnh

rRng.Select

Chúc thành công mĩ mãn!
 
Upvote 0
Hình như không fải vậy thầy BT ơi!

Nếu bạn biết fương thức UNION() không?

Nếu chưa thì vầy

Khai báo 1 biến kiểu Range, như Dim rRng As Range

Sau đó ta Set rRng = [A65500] nào đó tít khơi xa
Sau đó tạo vòng lặp duyệt các dòng trong cột
Nếu gặp ô đang duyệt & bên cột [E] là rỗng thì ta xài lệnh

Set rRng=UNION(rRng,Cells(j,"B")) 'Cell(J,"B") là ô đang duyệt thuộc cột đang rỗng'

Cuối macro sẽ là câu lệnh

rRng.Select

Chúc thành công mĩ mãn!


Xin chào SA_DQ; cảm ơn bạn đã chỉ dẫn.

Lần đâu tôi biết đến fương thức UNION()
Qua gợi ý của bạn với các từ ngữ bôi đỏ trên, với tôi tuy đã nghe nhưng vẫn còn cảm thấy rất xa lạ.
Tôi biết: khả năng hiện giờ của tôi là chưa thể viết được một đoạn code hoàn chỉnh theo gợi ý của bạn.

Nhờ bạn giúp đỡ thêm ạ.
 
Upvote 0
Xin chào Ba Tê; cảm ơn bạn đã giúp đỡ.


Bạn code còn nhanh hơn cả tôi viết câu hỏi nữa . :)
Xin lỗi bạn vì tôi chưa giải thích rõ ràng, điều kiện di chuyển đến cột B thì phụ thuộc vào cột E,
khi các dòng trong cột E có dữ liệu mà tương ứng với dòng đó tại cột B không có dữ liệu thì lựa chọn các ô không có dữ liệu này tại cột B mà cột E có.


Hic, các bạn hiểu không vậy. Hình như tôi giải thích mà tôi đọc còn thấy khó hiểu.**~**

Chắc là vầy:
Mã:
Range("E1:E23").SpecialCells(xlCellTypeConstants).Offset(,-3).SpecialCells(xlCellTypeBlanks).Select
 
Upvote 0
Hình như không fải vậy thầy BT ơi!

Nếu bạn biết fương thức UNION() không?

Nếu chưa thì vầy

Khai báo 1 biến kiểu Range, như Dim rRng As Range

Sau đó ta Set rRng = [A65500] nào đó tít khơi xa
Sau đó tạo vòng lặp duyệt các dòng trong cột
Nếu gặp ô đang duyệt & bên cột [E] là rỗng thì ta xài lệnh

Set rRng=UNION(rRng,Cells(j,"B")) 'Cell(J,"B") là ô đang duyệt thuộc cột đang rỗng'

Cuối macro sẽ là câu lệnh

rRng.Select

Chúc thành công mĩ mãn!


Anh nói cái GPE1()? Làm thí nó như vầy xem sao.
PHP:
Sub GPE1()
Dim Cll As Range, Tem As String
For Each Cll In Range("B1", Range("B6000").End(xlUp))
    If Cll = Empty And Cll.Offset(, 3) <> Empty Then Tem = Tem & Cll.Address & ","
Next Cll
Range(Left(Tem, Len(Tem) - 1)).Select
End Sub

-------------------------------
"Đụng hàng" ndu......................."gồi". Híc!
 
Upvote 0
Là do bạn không giải thích trong file cụ thể, nhìn hình sao biết được "nguyên tắc" của bạn là có "dính liếu" đến cột E?
PHP:
Public Sub GPE2()
Dim Cll As Range
For Each Cll In Range("B1", Range("B6000").End(xlUp))
    If Cll = Empty And Cll.Offset(, 3) <> Empty Then MsgBox Cll.Address, , "GPE"
Next Cll
End Sub

Cảm ơn Ba Tê;

Code trên của bạn trong trường hợp duyệt lần lượt từ trên xuống.
Đúng ý tôi rồi, bạn có thể thay giúp tôi câu lệnh:
Mã:
 MsgBox Cll.Address, , "GPE"
bằng 1 câu lệnh điền tất cả các ô trống được tìm thấy là 1 giá trị "OK" được không?

Nếu có thể nhờ bạn giúp tôi thêm trường hợp lựa chọn đồng loạt tất cả cùng 1 lúc ạ.
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom