[Help] Dùng Macro để chọn vùng dữ liệu.

Liên hệ QC

Heracles1976

Thành viên mới
Tham gia
10/6/15
Bài viết
35
Được thích
7
E chào các Bác, xin được hỏi nhờ các các xíu ạ.

E có 1 file dữ liệu, dữ liệu được bổ sung thêm dòng liên tục..

Khi cần lấy dữ liệu thì E tạo 1 macro ghi là:
.....
Range("A2:E5000").Select
Selection.Copy
Sheets("BaoCao").Select
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
.....

Do dữ liệu biến thiên nên E phải cho copy đến tận dòng 5.000 dù dữ liệu có khi mới nhập được 50-100 dòng.
Vì thế nên chạy macro rất chậm nhiều vùng được chọn và copy.

Cho E xin hỏi phải làm lệnh thế nào để cái "Range("A2:E5000").Select" nó chỉ CHỌN ĐẾN DÒNG CÓ DỮ LIỆU thôi.

VD: Có 250 dòng dữ liệu thì nó chọn A2:E250,
hoặc có 500 dòng dữ liệu thì nó chọn A2:E500

Em nhờ các Bác chút với, em cảm ơn ạ.

P/s: Nếu chỉ thêm cho E được cách đặt tên cũng theo độ lớn của dữ liệu nữa thì tuyệt quá..! hi hi
 
E chào các Bác, xin được hỏi nhờ các các xíu ạ.

E có 1 file dữ liệu, dữ liệu được bổ sung thêm dòng liên tục..

Khi cần lấy dữ liệu thì E tạo 1 macro ghi là:
.....
Range("A2:E5000").Select
Selection.Copy
Sheets("BaoCao").Select
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
.....

Do dữ liệu biến thiên nên E phải cho copy đến tận dòng 5.000 dù dữ liệu có khi mới nhập được 50-100 dòng.
Vì thế nên chạy macro rất chậm nhiều vùng được chọn và copy.

Cho E xin hỏi phải làm lệnh thế nào để cái "Range("A2:E5000").Select" nó chỉ CHỌN ĐẾN DÒNG CÓ DỮ LIỆU thôi.

VD: Có 250 dòng dữ liệu thì nó chọn A2:E250,
hoặc có 500 dòng dữ liệu thì nó chọn A2:E500

Em nhờ các Bác chút với, em cảm ơn ạ.

P/s: Nếu chỉ thêm cho E được cách đặt tên cũng theo độ lớn của dữ liệu nữa thì tuyệt quá..! hi hi
Cái này thì bạn chỉ cần search: Tìm dòng cuối có dữ liệu là được.
1 cách đó là:
Mã:
Dim dongcuoi as integer
dongcuoi = range("A65000").end(3).row ' xac dinh dong cuoi cot A
Đưa vào vùng thì như sau: Range("A2:E" & dongcuoi).copy
 
E chào các Bác, xin được hỏi nhờ các các xíu ạ.

E có 1 file dữ liệu, dữ liệu được bổ sung thêm dòng liên tục..

Khi cần lấy dữ liệu thì E tạo 1 macro ghi là:
.....
Range("A2:E5000").Select
Selection.Copy
Sheets("BaoCao").Select
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
.....

Do dữ liệu biến thiên nên E phải cho copy đến tận dòng 5.000 dù dữ liệu có khi mới nhập được 50-100 dòng.
Vì thế nên chạy macro rất chậm nhiều vùng được chọn và copy.

Cho E xin hỏi phải làm lệnh thế nào để cái "Range("A2:E5000").Select" nó chỉ CHỌN ĐẾN DÒNG CÓ DỮ LIỆU thôi.

VD: Có 250 dòng dữ liệu thì nó chọn A2:E250,
hoặc có 500 dòng dữ liệu thì nó chọn A2:E500

Em nhờ các Bác chút với, em cảm ơn ạ.

P/s: Nếu chỉ thêm cho E được cách đặt tên cũng theo độ lớn của dữ liệu nữa thì tuyệt quá..! hi hi
Bạn thử:
PHP:
Sub Copy_abc()
    Dim LR As Long
    LR = Range("A" & Rows.Count).End(xlUp).Row
    Range("A2:E" & LR).Copy
    Sheets("BaoCao").Range("A2").PasteSpecial (xlPasteValues)
End Sub
 
E chào các Bác, xin được hỏi nhờ các các xíu ạ.

E có 1 file dữ liệu, dữ liệu được bổ sung thêm dòng liên tục..

Khi cần lấy dữ liệu thì E tạo 1 macro ghi là:
.....
Range("A2:E5000").Select
Selection.Copy
Sheets("BaoCao").Select
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
.....

Do dữ liệu biến thiên nên E phải cho copy đến tận dòng 5.000 dù dữ liệu có khi mới nhập được 50-100 dòng.
Vì thế nên chạy macro rất chậm nhiều vùng được chọn và copy.

Cho E xin hỏi phải làm lệnh thế nào để cái "Range("A2:E5000").Select" nó chỉ CHỌN ĐẾN DÒNG CÓ DỮ LIỆU thôi.

VD: Có 250 dòng dữ liệu thì nó chọn A2:E250,
hoặc có 500 dòng dữ liệu thì nó chọn A2:E500

Em nhờ các Bác chút với, em cảm ơn ạ.

P/s: Nếu chỉ thêm cho E được cách đặt tên cũng theo độ lớn của dữ liệu nữa thì tuyệt quá..! hi hi
thử lệnh
Mã:
Dim Arr()
.....
Arr=Range("A2:E" & Range("A" & Rows.Count).End(xlUp).Row).Value
Sheets("BaoCao").Range("A2").Resize(Ubound(Arr),5)=Arr
.....
 
Nói chung có nhiều cách để làm, cũng có thể dùng Advanced Filter để lấy dữ liệu bất kỳ.
 
Em cảm ơn các Bác. Cho E hỏi tên nếu E muốn đặt tên (name) cũng rộng dần theo số dữ liệu thì phải làm thế nào ạ.
 
Em cảm ơn các Bác. Cho E hỏi tên nếu E muốn đặt tên (name) cũng rộng dần theo số dữ liệu thì phải làm thế nào ạ.
Chỉ cần xác định dòng cuối, cột cuối của dữ liệu là được.
Giả sử dữ liệu của bạn bắt đầu có từ Cell A2( Sheet1), chưa xác định được bao nhiêu dòng hay cột, bây giờ cần Copy sang Sheets("BaoCao").
Bạn thử với:
PHP:
Sub Copy_abc2()
    Dim LR As Long, LC As Integer
    LR = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
    LC = Sheet1.Cells(2, Columns.Count).End(xlToLeft).Column
    Sheet1.Range(Cells(2, 1), Cells(LR, LC)).Copy
    Sheets("BaoCao").Range("A2").PasteSpecial (xlPasteValues)
    Application.CutCopyMode = False
End Sub
 
Chỉ cần xác định dòng cuối, cột cuối của dữ liệu là được.
Giả sử dữ liệu của bạn bắt đầu có từ Cell A2( Sheet1), chưa xác định được bao nhiêu dòng hay cột, bây giờ cần Copy sang Sheets("BaoCao").
Bạn thử với:
PHP:
Sub Copy_abc2()
    Dim LR As Long, LC As Integer
    LR = Sheet1.Range("A" & Rows.Count).End(xlUp).Row
    LC = Sheet1.Cells(2, Columns.Count).End(xlToLeft).Column
    Sheet1.Range(Cells(2, 1), Cells(LR, LC)).Copy
    Sheets("BaoCao").Range("A2").PasteSpecial (xlPasteValues)
    Application.CutCopyMode = False
End Sub

Không ạ, vấn đề của em là ĐẶT TÊN (name range) cho VÙNG DỮ LIỆU cơ ạ
 
Không ạ, vấn đề của em là ĐẶT TÊN (name range) cho VÙNG DỮ LIỆU cơ ạ
Bạn có thể làm vầy:
Ví dụ tại cell A1 của Sheet3 là tiêu đề, bạn muốn từ A2 trở xuống để gán dữ liệu cho Name range. Bạn click vào A2 rồi đặt Name là gì đó tùy ý, xong dùng công thức này gán cho khung Refers to.
=OFFSET(Sheet3!$A$2,,,COUNTA(Sheet3!$A$2:$A$200))

Bây giờ bạn có thể thêm hoặc bớt dữ liệu trong cột A thì Validation nó tự thay đổi theo. Bạn có thể tham khảo File với Validation tại C3.
 

File đính kèm

  • Dat Name Range.rar
    20.5 KB · Đọc: 24
Bạn có thể làm vầy:
Ví dụ tại cell A1 của Sheet3 là tiêu đề, bạn muốn từ A2 trở xuống để gán dữ liệu cho Name range. Bạn click vào A2 rồi đặt Name là gì đó tùy ý, xong dùng công thức này gán cho khung Refers to.
=OFFSET(Sheet3!$A$2,,,COUNTA(Sheet3!$A$2:$A$200))

Bây giờ bạn có thể thêm hoặc bớt dữ liệu trong cột A thì Validation nó tự thay đổi theo. Bạn có thể tham khảo File với Validation tại C3.

Hay quá, E cảm ơn Bác nhiều. Đúng ý E hỏi ạ.

Nhưng Name thế này với name cứng A2;A200 thì nó có nhẹ hoặc nặng hơn nhiều không Bác?
 
Hay quá, E cảm ơn Bác nhiều. Đúng ý E hỏi ạ.

Nhưng Name thế này với name cứng A2;A200 thì nó có nhẹ hoặc nặng hơn nhiều không Bác?
Cách trên là Validation nó chỉ thay đổi dữ liệu theo vùng A2;A200, nếu bạn thêm dữ liệu đến A201 thì Validation sẽ không lấy phần thêm của Cell A201.
Sao bạn không dùng File trên và Fill xuống đến Cell A201 (để thử), trong Validation nó chỉ hiện đến Be 199, Cell A201 là Be 200 sẽ không có trong Validation.
 
Web KT
Back
Top Bottom