Giúp mình về dữ liệu lớn trong exel (7 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Ah, tôi chưa xóa bỏ cái hình chữ nhật của HieuCD cũ, bạn thực hiện xóa như sau

trong file Phieu
- bấm F5 -> chọn Special.. -> chọn Objetct -->OK
- giữ Shift bỏ chọn 2 ngôi sao xanh và vàng
- bấm Delete để xóa hình chữ nhật ẩn đó đi
cho nhẹ file
 
Bạn winvista ơi, mình vửa test lại, code của bạn cho ra kết quả thiếu nếu như cột A của sheet Phieu có 2 số trùng thì nó chỉ hiện ra cuối thôi. bạn xem lại giúp mình
 
Mình muốn lấy luôn bạn ah nếu file Phieu có gì thì cũng view đầy đủ dùng trùng dữ liệu. code của bạn hiếu hôm trước là trường hợp file dữ liệu trùng thì chọn 1 trong 2, còn file kết quả (phiếu) mình cần lấy hết bạn ah.
 
Mình muốn lấy luôn bạn ah nếu file Phieu có gì thì cũng view đầy đủ dùng trùng dữ liệu. code của bạn hiếu hôm trước là trường hợp file dữ liệu trùng thì chọn 1 trong 2, còn file kết quả (phiếu) mình cần lấy hết bạn ah.

xem file kèm, đã sửa,
hoặc cứ dùng cái của HieuCD vẫn có trong file đó,
tất cả đều có tiến trình %
 

File đính kèm

Lần chỉnh sửa cuối:
Mình vừa chạy nếu như file phiếu có nhiều dòng thì báo lỗi run time 9.. subscript out of range, bạn xem sửa giúp mình với ạ.
 
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

Để cải tiến tốc độ file excel lớn của bạn thì không nên dùng các hàm tìm kiếm, kể cả thay thế bằng VBA. Hãy dùng SQL và nhập liệu nâng cao thay thế.
 
Dùng sql như thế nào vậy bạn Nguyên Duy Tuấn? bạn giúp mình với.
 
Mình vừa chạy nếu như file phiếu có nhiều dòng thì báo lỗi run time 9.. subscript out of range, bạn xem sửa giúp mình với ạ.
uhm, đây file mới này thử còn sai không

SQL: thì bỏ lun excel đi nhé, dùng làm gì excel nữa, nhưng ... vấn đề là nhưng...
 

File đính kèm

File phieu trên 50 dòng là báo lỗi liền bạn ah. Bạn xen lại giúp mình
 
Dùng sql như thế nào vậy bạn Nguyên Duy Tuấn? bạn giúp mình với.

Sử dụng SQL trong Excel là một phương pháp rất mới với người làm Excel thuần tuý vì trong Excel không có công cụ và hàm mạnh để làm tốt việc này. Với người biết ít về Excel nhưng biết chút về IT với SQL thì thường không nhận ra điều tuyệt vời khi kết hợp gữa Excel và SQL. Tôi chia sẻ bạn bài học đầu tiên tôi dạy về sql trong Excel và báo cáo động. Trong video này tôi cũng phân tích vì sao Excel với công thức thông thường chạy chậm.

[video=youtube;OIECCAJP7UA]https://www.youtube.com/watch?v=OIECCAJP7UA&list=PLZi2tdQERHM09nzkoiavJO4pHcED1NmOQ&index=4[/video]
 
Lần chỉnh sửa cuối:
Xem nhanh ví dụ
[video=youtube;NlPP4jzkWOY]https://www.youtube.com/watch?v=NlPP4jzkWOY[/video]
 
err.jpg
có thể file dư liệu bạn nhỏ, còn file mình hơn 1tr dòng, mình chạy báo lỗi vậy, bạn xem giúp mình
 
uhm, khi phiếu có nhiều mã trùng thì dẫn đến bị lỗi vậy. Thay bằng cái này

Không hiểu bài toán gốc của bạn sao, tại sao phiếu lại có nhiều mã trùng vậy
 

File đính kèm

Bạn xem lại giúp mình, bị sai khi dữ liệu cần tìm có nằm trong 2 cột D và E. Bạn thêm code giúp mình vài cột nữa trong file dữ liệu: G:H ; J:K ; M:N . Cảm ơn bạn.
uhm, khi phiếu có nhiều mã trùng thì dẫn đến bị lỗi vậy. Thay bằng cái này

Không hiểu bài toán gốc của bạn sao, tại sao phiếu lại có nhiều mã trùng vậy
 
bạn chạy thử code nầy xem có nhanh hơn không
Mã:
Sub Vlookup()
Dim DRng As Range, SRng As Range, Rng As Range, Arr(), Dic As Object, i As Long, LastKQ As Long, LastR As Long, LastC As Integer, Tmp
'Sheets("Phieu").Shapes("Rounded Rectangle 1").Visible = True
Application.DisplayAlerts = False
Application.ScreenUpdating = False
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")
Set SRng = Range("A4:A" & LastKQ)
ReDim Arr(1 To SRng.Rows.Count, 1 To 1)
Workbooks.Open Filename:=ThisWorkbook.Path & "\DULIEU.XLSX", ReadOnly:=True
With ActiveWorkbook.Sheets("NNT")
  LastR = .Range("A3").CurrentRegion.Rows.Count + 2
  If LastR < 4 Then
    MsgBox ("Khong co du lieu nguon, thoat chuong trinh"): Exit Sub
  End If
  LastC = Range("XX4").End(xlToLeft).Column
  For j = 1 To LastC Step 3
    Set DRng = Range(Cells(1, j), Cells(LastR, j))
    If k > 0 Then
      n = 0
      For i = 1 To k
        Set Rng = DRng.Find(SRng(Dic.Item(i), 1), DRng(3, 1), xlValues, xlWhole)
        If Not Rng Is Nothing Then
          Arr(Dic.Item(i), 1) = DRng(Rng.Row, 2).Value
        Else
          n = n + 1
          Dic.Item(n) = Dic.Item(i)
        End If
      Next i
      If n = 0 Then Exit For
      k = n
    Else
      For i = 1 To UBound(Arr)
        Set Rng = DRng.Find(SRng(i, 1), DRng(3, 1), xlValues, xlWhole)
        If Not Rng Is Nothing Then
          Arr(i, 1) = DRng(Rng.Row, 2).Value
        Else
          k = k + 1
          Dic.Item(k) = i
          Arr(i, 1) = "Khong tim thay du lieu"
        End If
      Next i
      If k = 0 Then Exit For
    End If
  Next j
End With
ActiveWorkbook.Close False
Range("B4").Resize(UBound(Arr)) = Arr
'Sheets("Phieu").Shapes("Rounded Rectangle 1").Visible = False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
 
Code này chạy là treo cứng luôn bạn Hiếu ơi.
bạn chạy thử code nầy xem có nhanh hơn không
Mã:
Sub Vlookup()
Dim DRng As Range, SRng As Range, Rng As Range, Arr(), Dic As Object, i As Long, LastKQ As Long, LastR As Long, LastC As Integer, Tmp
'Sheets("Phieu").Shapes("Rounded Rectangle 1").Visible = True
Application.DisplayAlerts = False
Application.ScreenUpdating = False
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")
Set SRng = Range("A4:A" & LastKQ)
ReDim Arr(1 To SRng.Rows.Count, 1 To 1)
Workbooks.Open Filename:=ThisWorkbook.Path & "\DULIEU.XLSX", ReadOnly:=True
With ActiveWorkbook.Sheets("NNT")
  LastR = .Range("A3").CurrentRegion.Rows.Count + 2
  If LastR < 4 Then
    MsgBox ("Khong co du lieu nguon, thoat chuong trinh"): Exit Sub
  End If
  LastC = Range("XX4").End(xlToLeft).Column
  For j = 1 To LastC Step 3
    Set DRng = Range(Cells(1, j), Cells(LastR, j))
    If k > 0 Then
      n = 0
      For i = 1 To k
        Set Rng = DRng.Find(SRng(Dic.Item(i), 1), DRng(3, 1), xlValues, xlWhole)
        If Not Rng Is Nothing Then
          Arr(Dic.Item(i), 1) = DRng(Rng.Row, 2).Value
        Else
          n = n + 1
          Dic.Item(n) = Dic.Item(i)
        End If
      Next i
      If n = 0 Then Exit For
      k = n
    Else
      For i = 1 To UBound(Arr)
        Set Rng = DRng.Find(SRng(i, 1), DRng(3, 1), xlValues, xlWhole)
        If Not Rng Is Nothing Then
          Arr(i, 1) = DRng(Rng.Row, 2).Value
        Else
          k = k + 1
          Dic.Item(k) = i
          Arr(i, 1) = "Khong tim thay du lieu"
        End If
      Next i
      If k = 0 Then Exit For
    End If
  Next j
End With
ActiveWorkbook.Close False
Range("B4").Resize(UBound(Arr)) = Arr
'Sheets("Phieu").Shapes("Rounded Rectangle 1").Visible = False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
 
Code này chạy là treo cứng luôn bạn Hiếu ơi.
chạy code nầy xem sao? không được là bỏ của chạy lấy người
Mã:
Sub Vlookup()
Dim Darr(), Sarr(), Arr(), Dic As Object, i As Long, RKQ As Long, R As Long, C As Integer, Tmp As String
'Sheets("Phieu").Shapes("Rounded Rectangle 1").Visible = True
Application.DisplayAlerts = False
Application.ScreenUpdating = False
RKQ = Range("A3").CurrentRegion.Rows.Count - 1
If RKQ < 4 Then
    MsgBox ("Khong co du lieu Ma de lay ten, thoat chuong trinh"): Exit Sub
End If
Set Dic = CreateObject("scripting.dictionary")
Sarr = Range("A4").Resize(RKQ).Value
ReDim Arr(1 To RKQ, 1 To 1)
For i = 1 To RKQ
  Tmp = Sarr(i, 1)
  If Not Dic.exists(Tmp) Then
    Dic.Add Tmp, 1
    Dic.Add Tmp & "#" & 1, i
  Else
    k = Dic.Item(Tmp) + 1
    Dic.Item(Tmp) = k
    Dic.Add Tmp & "#" & k, i
  End If
Next i


Workbooks.Open Filename:=ThisWorkbook.Path & "\DULIEU.XLSX", ReadOnly:=True
With ActiveWorkbook.Sheets("NNT")
  C = .Range("XX4").End(xlToLeft).Column
  R = .Range("A3").CurrentRegion.Rows.Count - 1
  Darr = .Range("A4").Resize(R, C).Value
End With
ActiveWorkbook.Close False
For j = 1 To C Step 3
  For i = 1 To R
    Tmp = Darr(i, j)
    If Tmp = "" Then Exit For
    If Dic.exists(Tmp) Then
      For k = 1 To Dic.Item(Tmp)
        n = n + 1
        Arr(Dic.Item(Darr(i, j) & "#" & k), 1) = Darr(i, j + 1)
      Next k
      If n = RKQ Then GoTo Thoat
    End If
  Next i
Next j
Thoat:
Range("B4").Resize(RKQ) = Arr
'Sheets("Phieu").Shapes("Rounded Rectangle 1").Visible = False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
 
Bạn xem lại giúp mình, bị sai khi dữ liệu cần tìm có nằm trong 2 cột D và E. Bạn thêm code giúp mình vài cột nữa trong file dữ liệu: G:H ; J:K ; M:N . Cảm ơn bạn.

Chú lần sau: bạn yêu cầu mọi thứ rõ ràng từ đầu nhé, cứ thêm thế này thì mệt mọi người giúp, và hăng hái quan tâm đến vấn đề của mình lên (cứ chìm xuồng khi mọi người bàn và hỏi lại)

Xem file gửi kèm có đủ các thứ rồi đó, không hạn chế cặp cột số liệu ở file DULIEU sao cho đúng form A,B, D,E, G,H, J,K....
 

File đính kèm

Web KT

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

Back
Top Bottom