Lấy địa chỉ ô đầu, ô cuối vùng dữ liệu ?

Liên hệ QC

TrungChinhs

Thành viên tích cực
Tham gia
18/2/08
Bài viết
1,475
Được thích
2,469
Nghề nghiệp
Công chức
Vùng dữ liệu nằm ở vị trí bất kỳ trong bảng tính (ví dụ B5:H15) tôi sử dụng câu lệnh [A1].SpecialCells(2).CurrentRegion.Select thì chọn được toàn bộ vùng dữ liệu, vậy tôi muốn lấy địa chỉ ô đầu, ô cuối của vùng dữ liệu (Vd B5 và H5) thì code viết như thế nào ? Thanks !

P/s Kết quả tìm được có thể ghi vào môt ô nào đó tuỳ ý ngoài vùng dữ liệu vd: A5 và I15
 
Lần chỉnh sửa cuối:


@
Ndu: cảm ơn bạn rất nhiều, từ bài của bạn, mình mới phát hiện ra mình sai do đã khai báo biến a và b là kiểu Range.
Xin phép bạn cho mình sửa code của bạn thành code của "mình" nha và mình rất muốn bạn sửa code của mình thành code của bạn để cho mình học hỏi thêm (ví dụ trong file đính kèm).
PHP:
Sub Sh_Sh_Ndu()
    Dim i As Long
    For i = 3 To Sheets.Count
      Sheets(i).Range("A1:G19").Value = Sheets(2).Range("A1:G19").Value
    Next
  End Sub
PHP:
Sub Sh_Sh_Chinh()
    Dim i As Long, a As String, b As String
    a = Sheets(2).[A1].SpecialCells(2).CurrentRegion.Cells(1, 1).Address
    b = Sheets(2).[A1].SpecialCells(xlCellTypeLastCell).Address
    For i = 3 To Sheets.Count
      Sheets(i).Range(a, b) = Sheets(2).[A1].SpecialCells(2).CurrentRegion.Value
    Next
  End Sub
Đoạn này
Sheets(i).Range(a, b) = Sheets(2).[A1].SpecialCells(2).CurrentRegion.Value
sao anh không dùng:
Sheets(i).Range(a, b).Value = Sheets(2).Range(a, b).Value
Như thế kích thước các vùng mới bằng nhau chứ
Thêm nữa:
- Như anh HYen17 đã nói ở trên, việc xác định cell cuối = SpecialCells(xlCellTypeLastCell) khá nguy hiểm... anh có thể thí nghiệm bằng cách:
- Gõ gì đó vào cell IV65536
- Tìm LastCell
- Xóa cell IV65536
- Lại tìm LastCell
???
- Anh sẽ thấy rằng SpecialCells(xlCellTypeLastCell) còn lưu dấu tích của cell cuối cùng, dù anh đã xóa đi rồi (nó vẫn xem IV65536 là cell cuối, dù cell này đã bị xóa)
Thế đấy!
- Việc xác định vùng có dử liệu không phải chuyện khó! Tuy nhiên theo em chúng ta nên thiết kế nhập liệu thật tốt, để khỏi tốn thời gian cho việc "xác định" này!
--------------
Với đề tài này, anh có thể tham khảo thêm bài: Mở rọng các vùng chọn không liên tục
đại khái là:
PHP:
Sub BigSelect()
 Dim BigRng As Range, i As Long
 On Error Resume Next
 With Range("A1").SpecialCells(2)
   Set BigRng = .Areas(1)
   For i = 1 To .Areas.Count
     Set BigRng = Range(BigRng, .Areas(i))
   Next i
 End With
 BigRng.Select
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi thì thích dùng cách này:
Mã:
Sub MyCurrentRegion()
rd = Selection.CurrentRegion.Cells(1).Row
cd = Selection.CurrentRegion.Cells(1).Column
rc = rd + Selection.CurrentRegion.Rows.Count - 1
cc = Selection.CurrentRegion.Columns.Count + cd - 1
Range(Cells(rd, cd), Cells(rc, cc)).Select
End Sub
Với :
Selection: ô, vùng đang chọn.
rd,cd: dòng, cột đầu của ô đầu vùng CurrentRegion
rc,cc
: dòng, cột của ô cuối vùng CurrentRegion
Xác định được rd, cd, rc, cc thì:
Cells(rd, cd).Select: chọn ô đầu tiên.
Cells(rc, cc).Select: chọn ô cuối cùng.
Range(Cells(rd, cd), Cells(rc, cc)).Select: chọn vùng CurrentRegion
bác cho em hỏi khi chọn vùng selection như trong vùng có các ô trống không có dữ liệu, thì mặc định rd, cd, rc, cc đều = 1 ! Nhờ bác hướng dẫn cách khắc phục
 
Upvote 0
dạ vâng, cảm ơn bác đã nhắc nhở ! sr em không để ý không biết ạ !
1/ Chọn dòng cuối, cột cuối có rất nhiều cách.
2/ Tốt nhất là muốn được giải pháp phù hợp, khi hỏi thì nên đính kèm File, muốn chọn Cell nào hay vùng nào thì cần tô màu chỗ muốn hỏi thì sẽ mau chóng nhận kết quả của nhiều người hơn là hỏi chung chung.
3/ Ví dụ câu lệnh bên dưới, cũng là xác định cell cuối, nhưng trước đó bạn có bất kỳ thao tác nào của 1 Cell trống bên dưới dữ liệu thì việc chọn cell cuối sẽ sai ngay.

Range("A1").SpecialCells(xlCellTypeLastCell).Select
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom