Trang 1/5 1 2 3 4 5 cuốicuối
Hiển thị kết quả tìm kiếm từ 1 đến 10 trên tổng số: 42

Ðề tài: Giúp mình về dữ liệu lớn trong exel

  1. Giúp mình về dữ liệu lớn trong exel

    Chào anh/chi, mình có dữ liệu lớn cần trích lọc nhưng vì file dữ liệu lớn quá có thể hơn 1.048.576 dòng nên mỗi lần mình dùng hàm vlookup để tra thì load rất là lâu, có cách nào dùng code tra và mở dữ liêu nhanh hơn không.
    Một file dữ liệu gồm 2 cột : Mã số và tên
    một file dùng để lọc mã số từ file dữ liệu đó
    Cảm ơn anh/chi rất nhiều
    Tập tin đính kèm Tập tin đính kèm
    thay đổi nội dung bởi: vnlife2000, 19-02-17 lúc 08:53 PM

  2. Trích Nguyên văn bởi vnlife2000 View Post
    Chào anh/chi, mình có dữ liệu lớn cần trích lọc nhưng vì file dữ liệu lớn quá có thể hơn 1.048.576 dòng nên mỗi lần mình dùng hàm vlookup để tra thì load rất là lâu, có cách nào dùng code tra và mở dữ liêu nhanh hơn không.
    Một file dữ liệu gồm 2 cột : Mã số và tên
    một file dùng để lọc mã số từ file dữ liệu đó
    Cảm ơn anh/chi rất nhiều
    đặt 2 file trong cùng 1 thư mục
    mở file PHIEU.XLSX Save As lại theo tên PHIEU.XLXB hoặc PHIEU.XLXM trong cùng thư mục
    chep code sau vào và chạy thử xem sao
    Code:
    Sub Vlookup()
    Dim Dic As Object, Darr(), Arr(), i As Long, LastR As Long
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    'On Error Resume Next
    Workbooks.Open Filename:=ThisWorkbook.Path & "\DULIEU.XLSX", ReadOnly:=True
    With ActiveWorkbook.Sheets("NNT")
      LastR = .Range("A1040000").End(xlUp).Row
      If LastR < 4 Then
        MsgBox ("Khong co du lieu, thoat chuong trinh"): Exit Sub
      End If
      Darr = .Range("A4:B" & LastR).Value
    End With
    Set Dic = CreateObject("scripting.dictionary")
    For i = 1 To UBound(Darr)
      Dic.Add Darr(i, 1), Darr(i, 2)
    Next i
    ActiveWorkbook.Close False
    LastR = Range("A1040000").End(xlUp).Row
    If LastR < 4 Then
        MsgBox ("Khong co du lieu, thoat chuong trinh"): Exit Sub
    End If
    Darr = Range("A4:A" & LastR).Value
    ReDim Arr(1 To UBound(Darr), 1 To 1)
    For i = 1 To UBound(Arr)
      Arr(i, 1) = Dic.Item(Darr(i, 1))
    Next i
    Range("B4").Resize(UBound(Arr)) = Arr
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    End Sub
    Tập tin đính kèm Tập tin đính kèm

  3. Cảm ơn bạn HiếuCD nhưng mình test dữ liệu lớn khoảng 1.040.000 dòng thì cũng rất lâu nhưng khi gặp lỗi kg tìm thấy là báo không có dữ liệu và thoát chương trình, có cách nào khắc phục không bạn? và mình có nhiều hơn số dòng 1.040.000 thì mình làm thêm cột thì mình phải tìm bằng cách nào bạn giúp mình với ạ.
    (mình up lại file ở #1 ạ)

  4. Trích Nguyên văn bởi vnlife2000 View Post
    Cảm ơn bạn HiếuCD nhưng mình test dữ liệu lớn khoảng 1.040.000 dòng thì cũng rất lâu nhưng khi gặp lỗi kg tìm thấy là báo không có dữ liệu và thoát chương trình, có cách nào khắc phục không bạn? và mình có nhiều hơn số dòng 1.040.000 thì mình làm thêm cột thì mình phải tìm bằng cách nào bạn giúp mình với ạ.
    (mình up lại file ở #1 ạ)
    bạn tìm trong code số 1040000 thay bằng số 1048576 xem sao
    nếu nhiều hơn thì gởi lại file với ví dụ các cột dữ liệu

  5. Trích Nguyên văn bởi HieuCD View Post
    bạn tìm trong code số 1040000 thay bằng số 1048576 xem sao
    nếu nhiều hơn thì gởi lại file với ví dụ các cột dữ liệu
    Viết vầy được không anh HieuCD

    Code:
    lastR = .Range("A" & .Rows.Count).End(xlUp).Row
        If .Range("A" & Rows.Count) <> "" Then lastR = lastR + 1 'Phòng trường hợp dòng cuối có dữ liệu

  6. Trích Nguyên văn bởi befaint View Post
    Viết vầy được không anh HieuCD

    Code:
    lastR = .Range("A" & .Rows.Count).End(xlUp).Row
        If .Range("A" & Rows.Count) <> "" Then lastR = lastR + 1 'Phòng trường hợp dòng cuối có dữ liệu
    mình thử rồi, với dữ liệu của file bắt đầu bằng ô A3, nếu tới dòng cuối của sheet có dữ liệu thì kết quả cũng không chính xác
    dùng code sau có vẽ ổn
    Code:
    lastR = Range("A3").CurrentRegion.RowS.Count + 2
    chúc bạn 1 tối vui

  7. Trích Nguyên văn bởi vnlife2000 View Post
    Chào anh/chi, mình có dữ liệu lớn cần trích lọc nhưng vì file dữ liệu lớn quá có thể hơn 1.048.576 dòng nên mỗi lần mình dùng hàm vlookup để tra thì load rất là lâu, có cách nào dùng code tra và mở dữ liêu nhanh hơn không.
    Một file dữ liệu gồm 2 cột : Mã số và tên
    một file dùng để lọc mã số từ file dữ liệu đó
    Cảm ơn anh/chi rất nhiều
    Code này viết trích lọc trên 1 file
    Bạn nạp dữ liệu 1tr dòng thử xem thế nào
    Code:
    Sub vnlife()
    Dim Phieu, NTT, KQ, r, i
    Phieu = Sheet1.Range("A4", Sheet1.Range("A4").End(xlDown))
    ReDim KQ(1 To UBound(Phieu), 1 To 1)
    NTT = Sheet2.Range("A4", Sheet2.Range("B4").End(xlDown))
    With CreateObject("scripting.Dictionary")
    For r = 1 To UBound(Phieu)
    .Item(Phieu(r, 1)) = ""
    Next r
    For r = 1 To UBound(NTT)
    If .exists(NTT(r, 1)) = True Then
    i = i + 1
    KQ(i, 1) = NTT(r, 2)
    End If
    Next r
    End With
    Sheet1.Range("A4", Sheet1.Range("A4").End(xlDown)).Offset(, 1).ClearContents
    Sheet1.Range("A4", Sheet1.Range("A4").End(xlDown)).Offset(, 1) = KQ
    End Sub
    Ngoài ra, nếu làm trên 1 file thì có thể dùng advanced filter cũng giải quyết được vấn đề tốc độ.
    Tập tin đính kèm Tập tin đính kèm

  8. Mình đã gửi lại file đính kèm vlookup ở #1 đó bạn hiếu. Bạn xem giúp mình.

  9. Mình đã gửi lại file đính kèm vlookup ở #1 đó bạn hiếu. Bạn xem giúp mình.

  10. Trích Nguyên văn bởi vnlife2000 View Post
    Mình đã gửi lại file đính kèm vlookup ở #1 đó bạn hiếu. Bạn xem giúp mình.
    bạn chạy thử code, trong đó nếu dữ liệu nguồn nếu nhiều thì nhập tiếp vào cột D và E, cùng hàng đầu cột A và B
    Code:
    Sub Vlookup()
    Dim Dic As Object, Darr(), Arr(), i As Long, LastKQ As Long, LastNg As Long
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    'On Error Resume Next
    LastKQ = Range("A3").CurrentRegion.Rows.Count + 2
    If LastKQ < 4 Then
        MsgBox ("Khong co du lieu Ma de lay ten, thoat chuong trinh"): Exit Sub
    End If
    Set Dic = CreateObject("scripting.dictionary")
    Workbooks.Open Filename:=ThisWorkbook.Path & "\DULIEU.XLSX", ReadOnly:=True
    With ActiveWorkbook.Sheets("NNT")
      LastNg = .Range("A3").CurrentRegion.Rows.Count + 2
      If LastNg < 4 Then
        MsgBox ("Khong co du lieu nguon, thoat chuong trinh"): Exit Sub
      End If
      Darr = .Range("A4:B" & LastNg).Value
      For i = 1 To UBound(Darr)
        Dic.Add Darr(i, 1), Darr(i, 2)
      Next i
    ' du lieu nhieu, nhap them vao cot D va E
      LastNg = .Range("D3").CurrentRegion.Rows.Count + 2
      If LastNg >= 4 Then
        Darr = .Range("A4:B" & LastNg).Value
        For i = 1 To UBound(Darr)
          Dic.Add Darr(i, 1), Darr(i, 2)
        Next i
      End If
    End With
    ActiveWorkbook.Close False
    
    
    Darr = Range("A4:A" & LastKQ).Value
    ReDim Arr(1 To UBound(Darr), 1 To 1)
    For i = 1 To UBound(Arr)
      Arr(i, 1) = Dic.Item(Darr(i, 1))
    Next i
    Range("B4").Resize(UBound(Arr)) = Arr
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    End Sub
    Tập tin đính kèm Tập tin đính kèm

Trang 1/5 1 2 3 4 5 cuốicuối

Thông tin về chủ đề này

Users Browsing this Thread

Hiện có 1 người đang xem đề tài này. (0 thành viên và 1 khách)

Bookmarks

Bookmarks

Quyền Sử Dụng Ở Diễn Ðàn

  • Bạn không thể đăng đề tài mới
  • Bạn không thể đăng trả lời
  • Bạn không thể đăng file đính kèm.
  • Bạn không thể sửa bài viết.
  •