Tìm kiếm và lấy dữ liệu ở file không mở? (3 người xem)

Liên hệ QC

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

Hoàng Nhật Phương

Thành viên gắn bó
Tham gia
5/11/15
Bài viết
1,895
Được thích
1,219
Dear all,
Tôi đang muốn lấy dữ liệu vào các vùng có dấu hỏi chấm vào trong file có tên : LayDuLieu
Câu hỏi cụ thể cũng đã nằm trong file kèm này.
và nguồn dữ liệu để lấy nằm trong file có tên: Data
đk:2 file này cùng nằm chung trong 1 thư mục

Rất mong nhận được sự giúp đỡ của các bạn,
Thanks you very much
 

File đính kèm

Dear all,
Tôi đang muốn lấy dữ liệu vào các vùng có dấu hỏi chấm vào trong file có tên : LayDuLieu
Câu hỏi cụ thể cũng đã nằm trong file kèm này.
và nguồn dữ liệu để lấy nằm trong file có tên: Data
đk:2 file này cùng nằm chung trong 1 thư mục

Rất mong nhận được sự giúp đỡ của các bạn,
Thanks you very much
ở trên có bạn viết code còn nhanh hơn tôi đọc đề bài nữa , sợ quá đi
ở file laydulieu bạn dùng hàm Vlookup không được sao bạn ? có khó khăn gì chăng ?
bạn làm ơn đừng có pha mấy cái tiếng Tây vào nữa , nhiều lần tôi muốn nói rồi mà nghĩ bạn bỏ rồi ai dè giờ lại tiếp tục ....
 
Upvote 0
Mã:
Option Explicit
Sub GPE()
Dim I&, Kq(), DL(), Nguon(), Itm, Dic As Object
Dim fName As String, Wb As Workbook, Sh As Worksheet
Application.ScreenUpdating = False
fName = ThisWorkbook.Path & "\" & "Data.xls"
Set Wb = Application.Workbooks.Open(fName)
Set Sh = Wb.Worksheets("Sheet1")
    DL = Range(Sh.[C3], Sh.[C65000].End(3)).Resize(, 4)
Wb.Close False
With Sheet1
    Nguon = Range(.[F9], .[F65000].End(3))
    ReDim Kq(1 To UBound(Nguon), 1 To 2)
    Set Dic = CreateObject("Scripting.dictionary")
    For I = 1 To UBound(DL)
    Itm = CStr(DL(I, 1))
        If Not Dic.exists(Itm) Then
            Dic.Add CStr(DL(I, 1)), I
        End If
    Next I
    For I = 1 To UBound(Nguon)
    Itm = CStr(Nguon(I, 1))
        If Dic.exists(Itm) Then
            Kq(I, 1) = DL(Dic.Item(Itm), 3)
            Kq(I, 2) = DL(Dic.Item(Itm), 4)
        End If
    Next I
    .[G9:H65000].ClearContents
    .[G9].Resize(I - 1, 2) = Kq
Set Dic = Nothing
End With
Application.ScreenUpdating = True
End Sub

Xin cảm ơn bạn rất nhiều, kết quả rất đúng ý tôi.
Tuy nhiên tôi có chút thắc không được hiểu lắm mong bạn và mọi người giải thích giúp cho ạ:
Tôi có xem qua chủ đề này:
http://www.giaiphapexcel.com/forum/...-dữ-liệu-từ-file-không-mở&p=281338#post281338

Chào các bạn!

Tôi viết code sau để lấy dữ liệu từ một file không mở (File đang đóng thực sự):
......
Thanks !
Xin hỏi file đang đóng thực sự và file không mở có gì khác nhau không ạ? Hay câu nói trên của bạn đó chỉ giải thích cụ thể hơn thôi ạ.
 
Upvote 0
ở trên có bạn viết code còn nhanh hơn tôi đọc đề bài nữa , sợ quá đi
ở file laydulieu bạn dùng hàm Vlookup không được sao bạn ? có khó khăn gì chăng ?
bạn làm ơn đừng có pha mấy cái tiếng Tây vào nữa , nhiều lần tôi muốn nói rồi mà nghĩ bạn bỏ rồi ai dè giờ lại tiếp tục ....

Hì, cảm ơn bạn đã quan tâm sở dĩ file Data của tôi có rất nhiều ảnh nên dung lượng rất nặng vì vậy mỗi lần mở file nên rất nặng và phải đợi lâu. Tôi nhớ lại trước đây đã xem qua ở đâu đó có nói về vấn đề lấy dữ liệu mà không cần mở file lên. Vì thế tôi cũng thử tìm hiểu áp dụng xem có khả thi hơn không, nếu kết quả vẫn không thay đổi thì cũng hi vọng là cũng biết và nhận thức được thêm một chút gì đó về kiến thức.
Ah, tôi hay có thói quen gửi email như vậy mong bạn đừng cười. Nếu bạn và mọi người thấy lạ tôi sẽ rút kinh nghiệm.
Xin cảm ơn bạn nhiều.
 
Upvote 0
Code đã giải quyết được vấn đề của bạn rồi mà. Còn muốn thêm gì nữa.

Tôi nói như này bạn hiểu: file đang đóng nó khác hoàn toàn với file không mở
1. File đang đóng...có nghĩa hiện tại nó không mở (hay nói cách khác nó chưa mở)...nó có thể mở trong tương lại
2. Code với File không mở (mệnh đề này khẳng định rồi) nên nó luôn là file không bao giờ mở (trừ phi ta có mệnh đề khác áp đặt lại cho nó).

Và quay trở lại với đoạn code của tôi...Bạn cứ hiểu nó như là bạn đang cầm khẩu súng bắn ra 1 viên đan, dĩ nhiên với mắt thường của bạn, bạn không thể thấy được viên đạn bay... Code tôi viết ở trên tương tự như vậy... (có nghĩa là file đang đóng, chạy code...nó mở file và làm việc trong nháy mắt và đóng lại ngay lập tức...mắt chúng ta không thể nhìn thấy được.)
Còn việc code ở Link gì đó bạn dẫn có thể là file đó hoàn toàn có thể không cần mở mà có thể lấy được dữ liệu...

Cảm ơn bạn đã giải thích và lấy ví dụ rõ ràng nên tôi đã hiểu được vấn đề, sở dĩ tôi hỏi vậy vì mới đầu tôi nghĩ chúng không khác gì nhau.
Và nếu có khác nhau thì liệu có gì đặc biệt không ?
Cái dòng màu xanh khiến tôi rất thích thú và muốn hỏi thêm có thể trường hợp này sẽ giải quyết được vấn đề file Data ì ạch được cũng nên.
Bạn có thể cho tôi xin một đoạn code cho file đính kèm về trường hợp màu xanh như bạn giải thích được không?
Thật sự hiện tôi đang ở nhà nên không có file thật để đưa vào áp dụng nên không biết nhanh chậm ra sao, vì vậy muốn tìm hiểu thêm để có nhiều sự tham khảo trường hợp nào tốt tôi sẽ áp dụng.
Nếu không phiền mong bạn chỉ thêm cho.
Một lần nữa xin cảm ơn bạn rất nhiều.
 
Upvote 0
Cảm ơn bạn đã giải thích và lấy ví dụ rõ ràng nên tôi đã hiểu được vấn đề, sở dĩ tôi hỏi vậy vì mới đầu tôi nghĩ chúng không khác gì nhau.
Và nếu có khác nhau thì liệu có gì đặc biệt không ?
Cái dòng màu xanh khiến tôi rất thích thú và muốn hỏi thêm có thể trường hợp này sẽ giải quyết được vấn đề file Data ì ạch được cũng nên.
Bạn có thể cho tôi xin một đoạn code cho file đính kèm về trường hợp màu xanh như bạn giải thích được không?
Thật sự hiện tôi đang ở nhà nên không có file thật để đưa vào áp dụng nên không biết nhanh chậm ra sao, vì vậy muốn tìm hiểu thêm để có nhiều sự tham khảo trường hợp nào tốt tôi sẽ áp dụng.
Nếu không phiền mong bạn chỉ thêm cho.
Một lần nữa xin cảm ơn bạn rất nhiều.
nếu bạn có hứng thú thì tìm hiểu ADO, nó sẽ giúp bạn nhiều đấy, tôi thì không bao giờ làm việc theo kiểu mở file lên lấy rồi đóng lại, nó sẽ làm chậm nếu các file con nặng
 
Upvote 0
Nếu dùng cách không cần mở file như bạn nói thì tôi chỉ có thể copy tất tần tật qua cho bạn được... Chứ còn kiểu vlookup như vầy thì thua....

Bạn muốn thì thỉnh cầu nhờ cái bạn DoveandRose ở #2 ấy, bạn ấy chuyên về cái vụ đó đó...--=0--=0--=0

Tôi biết các bạn đều là những người tài giỏi và vui tính hay đùa vì tôi đã được các bạn nhiệt tình giúp đỡ nên tôi rất trân trọng.
Có thể bạn làm được nhưng không phải là sở trường hay chuyên môn lên mới khiêm tốn như vậy. Nếu vậy thì rất mong nhận được sự giúp đỡ từ bạn DoveandRose từ nhiều bạn khác trong diễn đàn.
Tôi xin cảm ơn các bạn nhiều.
 
Upvote 0
Tôi biết các bạn đều là những người tài giỏi và vui tính hay đùa vì tôi đã được các bạn nhiệt tình giúp đỡ nên tôi rất trân trọng.
Có thể bạn làm được nhưng không phải là sở trường hay chuyên môn lên mới khiêm tốn như vậy. Nếu vậy thì rất mong nhận được sự giúp đỡ từ bạn DoveandRose từ nhiều bạn khác trong diễn đàn.
Tôi xin cảm ơn các bạn nhiều.

mình viết code dỡ lắm bạn ơi , bạn cứ kêu tên mình thì mình ráng sức vậy
Mã:
Public Sub hello()
Dim filename As String, lr As Long
filename = "'" & ThisWorkbook.Path & "\[Data.xls]Sheet1'!$C$3:$F$11"
With Sheet1
    lr = WorksheetFunction.Max(9, .[F65000].End(xlUp).Row)
    .Range("G9:G" & lr).Formula = "=VLOOKUP(F9," & filename & ",3,0)"
    .Range("H9:H" & lr).Formula = "=VLOOKUP(F9," & filename & ",4,0)"
    .Range("G9:H" & lr).Value = .Range("G9:H" & lr).Value
End With
End Sub
 
Upvote 0
nếu bạn có hứng thú thì tìm hiểu ADO, nó sẽ giúp bạn nhiều đấy, tôi thì không bao giờ làm việc theo kiểu mở file lên lấy rồi đóng lại, nó sẽ làm chậm nếu các file con nặng

Trời ơi ADO như bạn nói là cái sao hay sao, @@!:
http://www.giaiphapexcel.com/forum/...ệu-Vào-File-Đóng-Bằng-ADO&p=672793#post672793

Mọi người vui tính thật, tôi hiểu được cái này chắc tôi ...không phải là tôi nữa rồi...hix bạn doveandrose lợi hại thật..-+*/ nếu không phiền mong bạn giúp cho về bài này.

Xin cảm ơn các bạn rất nhiều.
 
Upvote 0
mình viết code dỡ lắm bạn ơi , bạn cứ kêu tên mình thì mình ráng sức vậy
Mã:
Public Sub hello()
Dim filename As String, lr As Long
filename = "'" & ThisWorkbook.Path & "\[Data.xls]Sheet1'!$C$3:$F$11"
With Sheet1
    lr = WorksheetFunction.Max(9, .[F65000].End(xlUp).Row)
    .Range("G9:G" & lr).Formula = "=VLOOKUP(F9," & filename & ",3,0)"
    .Range("H9:H" & lr).Formula = "=VLOOKUP(F9," & filename & ",4,0)"
    .Range("G9:H" & lr).Value = .Range("G9:H" & lr).Value
End With
End Sub

Oh, bạn viết còn nhanh hơn là tôi hỏi... đúng là người giỏi luôn phát hiện thấy được những người tài,,sự giới thiệu chuẩn men. ^^
Trên đó là ADO ah bạn sao trông nó khác hẳn và có phần dễ hiểu hơn cái links mà bạn viết vậy..
Đây là trường hợp file đó hoàn toàn có thể không cần mở mà có thể lấy được dữ liệu phải không ạ?
Cảm ơn bạn rất nhiều,kêu tên bạn mà vui vẻ và mang lại kết quả tốt cho tôi nữa thì đi ngủ tôi cũng kêu tên bạn.. hihi
 
Upvote 0
Oh, bạn viết còn nhanh hơn là tôi hỏi... đúng là người giỏi luôn phát hiện thấy được những người tài,,sự giới thiệu chuẩn men. ^^
Trên đó là ADO ah bạn sao trông nó khác hẳn và có phần dễ hiểu hơn cái links mà bạn viết vậy..
Đây là trường hợp file đó hoàn toàn có thể không cần mở mà có thể lấy được dữ liệu phải không ạ?
Cảm ơn bạn rất nhiều,kêu tên bạn mà vui vẻ và mang lại kết quả tốt cho tôi nữa thì đi ngủ tôi cũng kêu tên bạn.. hihi

đó hoàn toàn không phải ADO , mà chính là thực hiện thao tác Vlookup bằng code , và tôi cũng không hi vọng bạn có thể hiểu được ý nghĩa cái Link mà bạn trích dẫn , nó không thích hợp với các bạn nữ .... Chắc đêm nay tôi khó ngủ rùi , nãy giờ hắt hơi miết ....
 
Upvote 0
Thôi tôi làm như vậy, tốc độ có lẽ cũng sẽ nhanh hơn #2. Còn muốn nhanh + hay hơn nữa thì chờ bạn í vậy
Mã:
Option Explicit
Sub GPE_()
Dim I&, Kq(), DL(), Nguon(), Itm, Dic As Object
Dim CoN As Object, Data As Object, fName As String
fName = ThisWorkbook.Path & "\" & "Data.xls"
Application.ScreenUpdating = False
Set CoN = CreateObject("adodb.connection")
        CoN.Open ("provider=Microsoft.ACE.OLEDB.12.0;data source=" & _
        fName & ";mode=Read;extended properties=""Excel 12.0;hdr=no"";")
        Set Data = CoN.Execute("select * from [Sheet1$C2:F] where f1 is not null")
            If Not Data.EOF Then Worksheets("Sheet1").Range("M9").CopyFromRecordset Data
        Data.Close
        CoN.Close
With Sheet1
    DL = Range(.[M8], .[M65000].End(3)).Resize(, 4)
    Nguon = Range(.[F9], .[F65000].End(3))
    ReDim Kq(1 To UBound(Nguon), 1 To 2)
    Set Dic = CreateObject("Scripting.dictionary")
    For I = 1 To UBound(DL)
    Itm = CStr(DL(I, 1))
        If Not Dic.exists(Itm) Then
            Dic.Add CStr(DL(I, 1)), I
        End If
    Next I
    For I = 1 To UBound(Nguon)
    Itm = CStr(Nguon(I, 1))
        If Dic.exists(Itm) Then
            Kq(I, 1) = DL(Dic.Item(Itm), 3)
            Kq(I, 2) = DL(Dic.Item(Itm), 4)
        End If
    Next I
    .[G9:H65000,M9:P65000].ClearContents
    .[G9].Resize(I - 1, 2) = Kq
Set Dic = Nothing
End With
Application.ScreenUpdating = True
End Sub

Tôi không biết nói gì hơn, thật sự rất xúc động chỉ biết cảm ơn các bạn rất nhiều, các bạn thật giỏi và nhiệt tình ...
Bạn đã nói là chịu thua nhưng tôi không nghĩ như vậy và kết quả tôi đã thấy.. bạn khiêm tốn thật ^^ ,
tôi rất mog muốn được một phần như các bạn để được làm người trả lời mà không phải là người hỏi nữa.
Xin cảm ơn
 
Upvote 0
đó hoàn toàn không phải ADO , mà chính là thực hiện thao tác Vlookup bằng code , và tôi cũng không hi vọng bạn có thể hiểu được ý nghĩa cái Link mà bạn trích dẫn , nó không thích hợp với các bạn nữ .... Chắc đêm nay tôi khó ngủ rùi , nãy giờ hắt hơi miết ....

Hihi,Cảm ơn bạn!
Tôi thấy bạn cũng là nữ mờ, một nữ cao thủ vô cùng hấp dẫn và đầy sự cuốn hút trong mắt tôi và còn có thể với rất nhiều bạn khác nữa ...nếu không phải chẳng có lẽ đó là người bạn y ^^!
 
Upvote 0
Món đó coi bộ hợp hơn là món DAO ...í chứ...coi bộ đêm nay chàng ấy khó ngủ chứ lị!!!--=0--=0--=0
P/s: mà chàng làm bài này = ADO đi, tôi học hỏi cái... (tui hok biết làm nên mới chơi cách cũ chuối ở #14, thật là ngại quá đi...ah)

Bạn ơi vẫn còn tuyệt kỹ nào nữa ADO nào nữa sao... nghe có vẻ tuyệt kỹ rất lợi hại thì phải..
Nếu không ngủ được và không phiền mong bạn tiếp tục.
Ngay mai đến nơi làm việc tôi sẽ test tất cả các trường hợp, trường hợp nào nhanh tôi sẽ áp dụng bạn ah.
Còn các trường hợp khác có thể sẽ không dùng đến nhưng tôi vẫn sẽ lưu lại biết đâu sau này còn cần đến.
Chàng sao ? }}}}}}}}}}}}}}}}}}}}
 
Upvote 0
cụ Nguyễn viết "nhân tài như lá mùa thu"
tôi cứ ngơ ngác, vậy ý cụ là nhiều hay ít???
 
Upvote 0
Nhân không tài còn nhiều hơn ve sầu mùa hạ
Nhưng ở đây họ kỵ giao thiệp bằng tiếng ngoại nên im hơi.
 
Upvote 0
Xin chào các bạn
Tôi xin cảm ơn các bạn rất nhiều vì đã tham gia giúp đỡ cho tôi trong chủ đề này,
Tôi đã hì hục cả buổi sáng mới chỉ đưa được 2 đoạn code ở bài #2 và bài #11 vào để dùng thử, kết quả đã cho ra kết quả theo ý muốn tyuy nhiên quá trình cập nhật dữ liệu vẫn còn hơi chậm.
còn bài #14 tôi đưa vào file thật sau khi chạy thì code báo lỗi có thể do file Data tôi đã đặt password Open file nên mới như vậy. Tôi định gỡ thử password open ra để chạy thử nhưng thấy code ở bài #14 còn một số số chưa hiểu (ví dụ như dòng...Worksheets("Sheet1").Range("M9")...tôi không thấy nó có liên quan gì đến dữ liệu trong file kèm mà tôi đã gửi) nên tôi chưa vận dụng vào được mong các bạn thông cảm cho sự yếu kém này, tôi vẫn đang cố tìm hiểu thêm để đưa vào vận dụng.
Qua quá trình test code tôi thấy bài #2 hiện hộp thoại mở pass open file 1 lần còn bài #11 hiện hộp thoại mở pass open file 2 lần.Có thể vì điều này lên code sẽ chậm lại.

Với tôi như thế này là đã rất đạt yêu cầu rồi, tuy nhiên nếu còn cách nào khác mong các bạn chỉ giúp thêm.
Tôi xin cảm ơn các bạn rất nhiều.
 
Upvote 0
Tôi nói với bạn vài điều thế này:

1. Nếu bạn không làm được thì post file thật lên đây để mọi người code vào file thực tế cho bạn và bạn sử dụng
2. Nếu không hiểu (hay chưa hiểu) vì lý do bạn chưa đươc học: vậy từ từ tìm cách mà học ....để có thể hiểu được.
Chứ bạn nói bla bla tôi không hiểu chỗ này, chỗ kia, cần phương án tối ưu hơn, nhanh hơn...cách nào khác nữa không? Xin thưa là có vô vàng cách.
Nhưng quan trọng mọi người nói rồi bạn có hiểu không, bạn có thực sự ứng dụng được cho mình không đó mới là điều quan trọng...Và điều này làm mất rất nhiều thời giờ của bạn & của cả những người tham gia giải đáp cho bạn.

3. Bạn chưa biết gì nhiều về VBA (code) thì ai giúp cái gì...cho dù nó có cập nhật chậm (tốc độ chậm như bạn nói) đi chăng nữa (tôi nghĩ có chậm lắm cũng chỉ vài giây...). Quan trọng là đáp ứng được công việc của bạn...Thì bạn cứ sử dụng (xin đừng thắc mắc)...Một lúc nào đó bạn vững vàng về kiến thức VBA thì mới tính qua chuyện....Tốc độ....c

4. Có những cái trong code không liên quan tới dữ liệu của bạn.... nhưng đó là thủ thuật của ngừoi viết..... (cái đó rất đơn giản mà bạn chưa hiểu, thì có thể nói bạn chưa có gì hiểu biết về Vba)

5. Nếu file ban có Pass thì chạy code không hoạt động là đúng rồi. Nếu trong code có cập nhật dòng Mở Pass / Khóa Pass khi chạy code thì được

6. Túm lại: đưa file thật lên để mọi người có thể code và bạn có thể ứng dụng

Bằng không, thì không nói gì thêm nữa. Tạm biệt bạn...

Ôi,Tôi xin lỗi,..


Tôi xin lỗi bạn rất nhiều , tôi không nghĩ đã khiến cho bạn giận như vậy. Nếu biết bạn giận thế này tôi cũng không dám đòi hỏi thêm gì cả,
Sở dĩ tôi thấy kết quả đã được như ý nhưng tôi nghĩ nếu mình bấm cảm ơn các bạn mà không nói một lời gì nữa thì thấy rất áy láy...
Các bạn đã cố gắng dành thời gian để giúp tôi vì vậy tôi cũng nên thông tin đầy đủ đến cho các bạn biết tình hình mục đích là: 1 phần để các các bạn biết tôi có quan tâm đến vấn đề đó hay không? và tôi quan tâm nó đến mức nào. Mặt khác tôi thông tin lại hi vọng là để có thêm những góp ý khác,, không những cho tôi mà có thể nhiều bạn khác cũng quan tâm đến.


Thật sự tôi rất muốn đưa những cái thực tế nhất lên để được mọi người hỗ trợ đỡ mất thời gian cho tôi nhưng vì tài liệu nội bộ của cơ quan đã có qui định dù quan trọng hay không quan trọng cũng không được mang ra ngoài, thậm chí tôi muốn copy về nhà để làm việc cũng không được chứ không nói là đưa lên mạng.. rất mong bạn và mọi người thổng cảm về điều này.


Vi không hiểu gì về lập trình và để trả giá cho việc tôi không đưa file thật lên được tôi đã phải loay hoay cả buổi sáng như vậy.
Tôi xin lỗi đã khiến cho bạn buồn,tôi cảm ơn bạn rất nhiều, thật sự sau khi tham gia diễn đàn này tôi cảm thấy có phần may mắn vì đã biết đến diễn đàn và thấy có rất nhiều điều muốn hỏi và có những vấn đề không biết hỏi từ đâu hỏi như thế nào nữa ...quan trọng nhất đối với tôi lúc này là tôi rất cần những người có kiến thức như các bạn trợ giúp !
...
Xin lỗi bạn nhiều nhé,
 
Upvote 0
Lấy dữ liệu theo điều kiện từ file không mở ?

Cảm ơn các bạn rất nhiều đã trợ giúp tôi hoàn thành câu hỏi bài #1 và tôi đã áp dụng thành công,
Giờ tôi có thêm một trường hợp nữa về lấy dữ liệu từ file Data vào file LayDuLieu mà không cần mở file Data và điều kiện cũng khác so với bài 1 dường như bài này sẽ khó khăn hơn. Câu hỏi tôi cũng đã nêu trong file kèm.
Tôi rất mong lại nhận được thêm những sự giúp đỡ từ các bạn.
Xin cảm ơn các bạn rất nhiều.Hix hỏi nhiều thấy ngại mà không hỏi thì sẽ rất khó khăn...-\\/.
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom