Đăng ký học Excel chuyên đề công thức dò tìm và tham chiếu (tối 29 và 31/8) - TPHCM

Đăng ký học VBA và ADO - 3 chủ nhật 10, 17 và 24/9 - TPHCM

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

Thảo luận trong 'Macro4.0 và Dialog Sheet 5.0' bắt đầu bởi Heracles1976, 11 Tháng tám 2017.

  1. Heracles1976

    Heracles1976 Thành viên mới

    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
     
  2. quanluu1989

    quanluu1989 Thành viên gắn bó

    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
    
     
    Heracles1976, be09HieuCD thích bài viết này.
  3. phulien1902

    phulien1902 Thành viên gắn bó

    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
     
    Heracles1976, be09HieuCD thích bài viết này.
  4. HieuCD

    HieuCD Thành viên gắn bó

    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
    .....
     
    be09phulien1902 thích bài viết này.
  5. be09

    be09 Thành viên gạo cội

    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ỳ.
     
    HieuCD thích bài này.
  6. Heracles1976

    Heracles1976 Thành viên mới

    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 ạ.
     
  7. phulien1902

    phulien1902 Thành viên gắn bó

    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 LongLC As Integer
        LR 
    Sheet1.Range("A" Rows.Count).End(xlUp).Row
        LC 
    Sheet1.Cells(2Columns.Count).End(xlToLeft).Column
        Sheet1
    .Range(Cells(21), Cells(LRLC)).Copy
        Sheets
    ("BaoCao").Range("A2").PasteSpecial (xlPasteValues)
        
    Application.CutCopyMode False
    End Sub
     
    Heracles1976, PacificPR, befaint 1 người khác thích bài viết này.
  8. Heracles1976

    Heracles1976 Thành viên mới

    Không ạ, vấn đề của em là ĐẶT TÊN (name range) cho VÙNG DỮ LIỆU cơ ạ
     
  9. phulien1902

    phulien1902 Thành viên gắn bó

    Bạn nói rõ hơn được không, tôi chưa hiểu ý của bạn.
     
  10. be09

    be09 Thành viên gạo cội

    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.
     

    Các file đính kèm:

    Heracles1976quocgiacan thích bài viết này.
  11. HieuCD

    HieuCD Thành viên gắn bó

    ......
     
    quocgiacan thích bài này.
  12. Heracles1976

    Heracles1976 Thành viên mới

    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?
     
  13. be09

    be09 Thành viên gạo cội

    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.
     
    Heracles1976 thích bài này.

Chia sẻ trang này