Hỏi cách xác định chính xác vùng chứa dữ liệu

Liên hệ QC

hoa35ktxd

Thành viên thường trực
Tham gia
8/2/07
Bài viết
298
Được thích
269
Có thể vấn đề này đã được nêu ra rồi nhưng tôi tìm mãi không thấy nên mạn phép đưa lên đây.
Giả sử lúc đầu ta có 1 vùng dữ liệu B5:D10 chẳng hạn, sau đó nhập vài số liệu ngoài vùng đó, số liệu này có thể sẽ được lưu lại để tính toán cũng có thể không cần thiết và bị xóa đi.
Vậy trong trường hợp dữ liệu nằm ngoài vùng ban đầu kia đã bị xóa đi rồi (có thể chưa xóa hết) thì làm thế nào xác định được chính xác vùng dữ liệu thực như hình tôi gửi kèm theo sau đây.
Xin cảm ơn mọi người.
 

File đính kèm

  • untitled.JPG
    untitled.JPG
    18.6 KB · Đọc: 46
Có thể vấn đề này đã được nêu ra rồi nhưng tôi tìm mãi không thấy nên mạn phép đưa lên đây.
Giả sử lúc đầu ta có 1 vùng dữ liệu B5:D10 chẳng hạn, sau đó nhập vài số liệu ngoài vùng đó, số liệu này có thể sẽ được lưu lại để tính toán cũng có thể không cần thiết và bị xóa đi.
Vậy trong trường hợp dữ liệu nằm ngoài vùng ban đầu kia đã bị xóa đi rồi (có thể chưa xóa hết) thì làm thế nào xác định được chính xác vùng dữ liệu thực như hình tôi gửi kèm theo sau đây.
Xin cảm ơn mọi người.

Ý hoa35ktxd là dữ liệu thực là tất cả các ô đang có dữ liệu trên sheet ? Ví dụ dữ liệu ban đầu là B5:D10
- Nhập thêm A1, F15 > dữ liệu là A1, B5:D10, F15
- Xóa A1 > dữ liệu là B5:D10, F15
- Nhập thêm G2:G5 > dữ liệu là B5:D10, F15, G2:G5
Không biết có phải thế không ?
 
Upvote 0
Không cần cầu kỳ vậy đâu ạ, mà chỉ cần xác định vùng diện tích hình chữ nhật tối thiểu (hì, chẳng biết dùng từ nào) có thể chứa được hết các cell có dữ liệu.
Vì bình thường nếu dùng Ctrl+End thì nó nhảy đến những ô đã từng có dữ liệu cuối cùng mặc dù mình đã xóa dữ liệu trên ô đó rồi.
Ví dụ như trong hình. Lúc đầu chỉ có dữ liệu trong vùng nhỏ sau đó thêm bớt lung tung khắp nơi và cuối cùng chỉ còn lại theo vùng hình chữ nhật bên ngoài.
Thực chất là tôi muốn xác định vùng cần để in sao cho có thể in được hết các dữ liệu mà không phải in những trang trắng.
 
Upvote 0
hoa35ktxd có dùng CurrentRegion ?
1. Nếu dữ liệu tạm và dữ liệu gốc cách ly bời dòng trống hoặc cột trống (như hình hoa35ktxd minh họa) thì dùng CurrentRegion.
Ví dụ ô B5 là ô đầu tiên của dữ liệu gốc, xác định vùng dữ liệu:
Mã:
Dim rng As Range
Set rng = [B5].CurrentRegion
2. Nếu dữ liệu tạm liền kề dữ liệu gốc, khi mở tập tin (Sub Auto_Open) xác định vùng dữ liệu và lưu vào biến rng và sử dụng biến này suốt quá trình làm việc với tập tin.
Trước khi kết thúc tập tin, xóa các dữ liệu tạm trước khi lưu.
 
Upvote 0
Tôi thử cái CurrentRegion rồi nhưng nó chỉ xác định được vùng dữ liệu liên tục thôi bác ạ nên [B5].CurrentRegion chỉ cho ra B5:D10.
Vấn đề ở đây là làm sao lấy được B3:E12, tức là chọn được 1 vùng nhỏ nhất chứa được tất cả các cell có dữ liệu trong sheet.
 
Upvote 0
Có thể vấn đề này đã được nêu ra rồi nhưng tôi tìm mãi không thấy nên mạn phép đưa lên đây.
Giả sử lúc đầu ta có 1 vùng dữ liệu B5:D10 chẳng hạn, sau đó nhập vài số liệu ngoài vùng đó, số liệu này có thể sẽ được lưu lại để tính toán cũng có thể không cần thiết và bị xóa đi.
Vậy trong trường hợp dữ liệu nằm ngoài vùng ban đầu kia đã bị xóa đi rồi (có thể chưa xóa hết) thì làm thế nào xác định được chính xác vùng dữ liệu thực như hình tôi gửi kèm theo sau đây.
Xin cảm ơn mọi người.
Tôi nghĩ yêu cầu của bạn chỉ có thể nhờ đến sự trợ giúp của UsedRange Properties ---> Bạn thử xem!
 
Upvote 0
Tôi thử cái CurrentRegion rồi nhưng nó chỉ xác định được vùng dữ liệu liên tục thôi bác ạ nên [B5].CurrentRegion chỉ cho ra B5:D10.
Vấn đề ở đây là làm sao lấy được B3:E12, tức là chọn được 1 vùng nhỏ nhất chứa được tất cả các cell có dữ liệu trong sheet.
Vậy bạn làm theo cách ndu96081631 và viết trong Sub Auto_Open. Mở tập tin lên là nó gán vùng dữ liệu hiện có của sheet vào 1 biến và dùng biến đó suốt quá trình làm việc với tập tin.
Khai báo đầu module
Mã:
Public rng As Range
Mã:
Sub Auto_Open()
Sheets("DATA").Select
Set rng = ActiveSheet.UsedRange
End Sub
In riêng vùng dữ liệu:
Mã:
Sub PrintRng()
rng.Select
Selection.PrintOut
End Sub
 
Upvote 0
Cảm ơn mọi người đã quan tâm.
Khi dùng UsedRange thì mọi việc đã được giải quyết.
Thật sự vấn đề này tôi đã loay hoay mãi với các kểu For Next rồi xlUp, xlLast, xlDown nhưng đều thấy không ổn.
@ndu: Cái parent của UsedRange là những thằng nào, sao tôi chấm hết App, workbooks, workSheets, cells đều không thấy nó là sao nhỉ.
Có lẽ đây là 1 trong những tư duy bác học về sự phân tích và xử lý kết hợp sự mò mẫm... say mê. Bái phục, bái phục.
1 lần nữa mong rằng diễn đàn có thêm chức năng cảm ơn theo cảm xúc để cho ndu vỡ mũi luôn...
 
Upvote 0
Cảm ơn mọi người đã quan tâm.
Khi dùng UsedRange thì mọi việc đã được giải quyết.
Thật sự vấn đề này tôi đã loay hoay mãi với các kểu For Next rồi xlUp, xlLast, xlDown nhưng đều thấy không ổn.
@ndu: Cái parent của UsedRange là những thằng nào, sao tôi chấm hết App, workbooks, workSheets, cells đều không thấy nó là sao nhỉ.
.
Bạn thử cái này xem:
PHP:
MsgBox ActiveSheet.UsedRange.Parent.Name
 
Upvote 0
Web KT

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

Back
Top Bottom