Nhờ viết dùm code lọc báo cáo theo ngày, đồng thời tham chiếu dữ liệu đến sheet khác (1 người xem)

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

littlecat1987

Thành viên mới
Tham gia
12/12/10
Bài viết
48
Được thích
0
- Nhờ các bạn viết dùm mình code VBA lọc dữ liệu báo cáo theo ngày, đồng thời dữ liệu có tham chiếu (vlookup) đến sheet khác, mình làm được bằng công thức rồi nhưng dữ liệu của mình rất nhiều và nặng

Thanks
 

File đính kèm

Bạn xem file

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Có gì chưa ưng thì bảo nha.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Thanks bạn, bây giờ mình muốn lọc dữ liệu báo cáo theo sale thì nên sửa code như thế nào? bạn giúp mình thêm nha! Thanks!
 
Upvote 0
Thấy cần thiết hỏi lại bạn trước khi tiếp

. . . , bây giờ mình muốn lọc dữ liệu báo cáo theo sale thì nên sửa code như thế nào? bạn giúp mình thêm nha!

Báo cáo theo "SALE", nhưng trong 2 trang CSDL chả có trường nào là [SALE] cả thì lọc làm sao;
Trong khi đó ở trang "DM" 1 mã khách hàng có đến 2 "SALE" thì làm thế nào mà lần cho được?

Chờ tin từ bạn.
 
Upvote 0
Dữ liệu đó mình copy để tham khảo thôi, 1 khách hàng chỉ thuộc 1 sale thôi
Ý mình dựa vào mã khách hàng để lọc theo sale.
Thanks
 
Upvote 0
Cái í này giờ mới cho biết, thiệt tình!

[Thongbao]Dữ liệu đó mình copy để tham khảo thôi,
1 khách hàng chỉ thuộc 1 sale thôi

Ý mình dựa vào mã khách hàng để lọc theo sale.
Thanks[/Thongbao]
 

File đính kèm

Upvote 0
Thanks bạn nhưng ý mình muốn là trong sheet báo cáo chỉ cần đánh mã sale là có thể lọc ra được những khách hàng của sale đó.
 
Upvote 0
Nên đưa file giả lập khác không tùy tiện như thế được!

Thanks bạn nhưng ý mình muốn là trong sheet báo cáo chỉ cần đánh mã sale là có thể lọc ra được những khách hàng của sale đó.

Với số liệu về Sale & khách hàng như trong file bạn đưa lên thì sẽ lấy làm tiếc là không mần gì tiếp được!
 
Upvote 0
Lọc Theo Ngày

với đề tài tương tự. mình đang sử dụng code sau để lọc theo ngày nhưng tốc độ chậm quá .nhờ các bạn xem có cách nào khác lọc cho tốc độ nhanh hơn không trợ giúp mình với và nếu lọc được từ ngày đến ngày càng tốt (file kèm)
Xin cảm ơn
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("I2").Address Then
lOC_NGAY
End If
End Sub
'*************
Sub lOC_NGAY()
Application.ScreenUpdating = False
startTime = Time
Dim cell
For Each cell In Range("I5:I5000") 'neu sua thanh("I5:I1048570")thi loc cham qua cham
cell.EntireRow.Hidden = True
If cell Like Range("I2") Then
cell.EntireRow.Hidden = False
End If
Next cell
Application.ScreenUpdating = True
MsgBox "Total Time: " & Format((Time - startTime), "hh:mm:ss"), , "Test Toc Do"
End Sub
 

File đính kèm

Upvote 0
Với đề tài tương tự. mình đang sử dụng code sau để lọc theo ngày nhưng tốc độ chậm quá .nhờ các bạn xem có cách nào khác lọc cho tốc độ nhanh hơn không trợ giúp mình với và nếu lọc được từ ngày đến ngày càng tốt (file kèm)
Xin cảm ơn

Bạn đến đây tham khảo đi:
http://www.giaiphapexcel.com/forum/...NXT-với-tốc-độ-nhanh-nhất-dữ-liệu-65-532-dòng
Theo mình bạn có chí ít 2 lưa chọn:

AdvancedFilter
Làm theo cách của VODOI2X

Chúc thành công!
 
Upvote 0
Bạn đến đây tham khảo đi:
http://www.giaiphapexcel.com/forum/...NXT-với-tốc-độ-nhanh-nhất-dữ-liệu-65-532-dòng
Theo mình bạn có chí ít 2 lưa chọn:

AdvancedFilter
Làm theo cách của VODOI2X

Chúc thành công!
Tham khảo theo link trên em đọc một ngày rồi cả một rừng Code em hiểu được chắc khoãng 5 năm nữa quá.code Dic hay Collection...em cũng mê lắm đọc riết trên GPE và tải File về vọc chơi những vẫn thấy nó còn đang nằm trên chín tầng mây ấy Anh ạ
còn Làm theo cách của VODOI2X thì em phải nghiên cứu cũng vài năm nũa quá
có lẻ chỉ còn cách giắng làm theo anh chỉ thôi (AdvancedFilter)
 
Upvote 0
[thongbao]có lẻ chỉ còn cách giắng làm theo anh chỉ thôi (AdvancedFilter)[/thongbao]

Trong đó có luôn 1 vài bài (ở nữa đầu) có xài AdvancedFilter mà; Kể ra với bạn ngay thì hiện tại mà 65500 dòng dữ liệu làm trong 1 gy cũng là OK rồi, fải hông?!
Chịu khó tiếp đi bạn!
 
Upvote 0
với đề tài tương tự. mình đang sử dụng code sau để lọc theo ngày nhưng tốc độ chậm quá .nhờ các bạn xem có cách nào khác lọc cho tốc độ nhanh hơn không trợ giúp mình với và nếu lọc được từ ngày đến ngày càng tốt (file kèm)
Xin cảm ơn
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Range("I2").Address Then
lOC_NGAY
End If
End Sub
'*************
Sub lOC_NGAY()
Application.ScreenUpdating = False
startTime = Time
Dim cell
For Each cell In Range("I5:I5000") 'neu sua thanh("I5:I1048570")thi loc cham qua cham
cell.EntireRow.Hidden = True
If cell Like Range("I2") Then
cell.EntireRow.Hidden = False
End If
Next cell
Application.ScreenUpdating = True
MsgBox "Total Time: " & Format((Time - startTime), "hh:mm:ss"), , "Test Toc Do"
End Sub
Sheet1, cột I, từ I5:I184 là Text chứ không phải Date, bạn phải sửa lại cho thống nhất kiểu dữ liệu.
Tôi đã xoá bớt dòng trong sheet DATA cho nhẹ file, bạn copy lại dữ liệu thật đến khoảng 1 triệu dòng thử xem.
Lọc sang 1 sheet khác, thay đổi ô I2 hoặc I3 để lọc.
 

File đính kèm

Upvote 0
Sheet1, cột I, từ I5:I184 là Text chứ không phải Date, bạn phải sửa lại cho thống nhất kiểu dữ liệu.
Tôi đã xoá bớt dòng trong sheet DATA cho nhẹ file, bạn copy lại dữ liệu thật đến khoảng 1 triệu dòng thử xem.
Lọc sang 1 sheet khác, thay đổi ô I2 hoặc I3 để lọc.
text là do minh dùng ADO ghi vào đó đấy khi mình lấy dữ liệu lên lọc mới chuyển sang date...
Vậy là Bạn đã giúp mình tiễn đoạn code cụ rùa hồ gươm kia vào bảo tàng rồi.mỗi khi minh lọc nhiều thấy nó cứ quay vòng tròn riết mình phải dùng tổ hợp phín Ctrl+Pause để thắng(Phanh) nó lại...hic hic bực mình ghê
cảm ơn Bạn rất nhiều code tốc độ tuyệt vời
 
Upvote 0
Lọc Dữ liệu theo ngày Bằng dictionary

trước đây một thời gian mình cũng đã úp bài tại đây với đề tài lọc Dữ Liệu theo ngày đã được Anh Bate trợ giúp viết code cho lọc bằng mảng.
sau một thời gian mình tập làm quen với Dictionary hôm nay mình viết code lọc theo ngày bằng dic không hiểu code sai hay thiếu gì mà không lọc ra được ngày mong muốn. suy nghĩ riết hai hôm nay mà không ra được kết quả . vì vậy mình xin úp lên đây nhờ các bạn kiểm tra và trợ giúp cho mình hoàn thiện code lọc theo ngày Bằng Dic
xin cảm ơn
 

File đính kèm

Upvote 0
trước đây một thời gian mình cũng đã úp bài tại đây với đề tài lọc Dữ Liệu theo ngày đã được Anh Bate trợ giúp viết code cho lọc bằng mảng.
sau một thời gian mình tập làm quen với Dictionary hôm nay mình viết code lọc theo ngày bằng dic không hiểu code sai hay thiếu gì mà không lọc ra được ngày mong muốn. suy nghĩ riết hai hôm nay mà không ra được kết quả . vì vậy mình xin úp lên đây nhờ các bạn kiểm tra và trợ giúp cho mình hoàn thiện code lọc theo ngày Bằng Dic
xin cảm ơn
Cả 2 Sub đều đâu có ra kết quả đúng đâu. Vì cột ngày tháng loạn 12 sứ quân rồi

Còn riêng cái Dic thì sai từ căn bản luôn. Biến i, j loạn cào cào rồi. Vả lại lọc theo ngày thì không sử dụng Dic, không phù hợp đâu
 
Lần chỉnh sửa cuối:
Upvote 0
Cả 2 Sub đều đâu có ra kết quả đúng đâu. Vì cột ngày tháng loạn 12 sứ quân rồi

Còn riêng cái Dic thì sai từ căn bản luôn. Biến i, j loạn cào cào rồi. Vả lại lọc theo ngày thì không sử dụng Dic, không phù hợp đâu
em đang hoc mà anh.ngay loan la do em copy tu file ADO ghi vào đó nên nó loạn đấy. vậy phải bỏ dic thiệt sao anh
 
Upvote 0
em đang hoc mà anh.ngay loan la do em copy tu file ADO ghi vào đó nên nó loạn đấy. vậy phải bỏ dic thiệt sao anh

đụng tới mấy định dạng ngày oải lắm, mỗi máy set một kiểu hichic...........
bạn thử dùng hàm Dateserial xem

ah, như anh Qhai nói, ở sub
Mã:
Sub Loc_Ngay_Dic()
Dim nguon(), KQ(1 To 65536, 1 To 10), i As Long, j As Long, fDate, eDate, NGAY As String
.............................

    For[COLOR=#ff0000] j = 1 [/COLOR]To 10
        If nguon(i, 9) <> "" Then
            If nguon(i, 9) >= fDate And nguon(i, 9) <= eDate Then
                NGAY = (nguon(i, 9))
                If .Exists(NGAY) Then
                  [COLOR=#ff0000]  j = j + 1[/COLOR]
                
  ....................................
End Sub

ban sử dụng trùng biến ở đây
 
Lần chỉnh sửa cuối:
Upvote 0
em đang hoc mà anh.ngay loan la do em copy tu file ADO ghi vào đó nên nó loạn đấy. vậy phải bỏ dic thiệt sao anh
1) Ngày tháng trong file của bạn có một ít ở trái đất, một ít ở.......hành tinh khác nên ông Bill hông nhận biết được
2) Dạng bài này dùng Dic hình như không hợp, mình đề nghị bạn sử dụng bộ lọc cho nó nhẹ nhàng ( nếu chưa biết làm thì réo Ba Tê hoặc Quang Hải nhé)
Thân
 
Upvote 0
em đang hoc mà anh.ngay loan la do em copy tu file ADO ghi vào đó nên nó loạn đấy. vậy phải bỏ dic thiệt sao anh
Thật ra để xử lý thì cũng chẳng khó khăn gì, thêm 1 dòng lệnh vào nữa thôi là bình định được 12 sứ quân đó thôi.
Trong cột này có dòng là text, có dòng là ngày. Cho 1 dòng kiểm tra nếu là text thì chuyển qua ngày rồi mần nó thôi.
Mấy cái quỷ này sao làm khó được ai chứ
 
Upvote 0
text là do minh dùng ADO ghi vào đó đấy khi mình lấy dữ liệu lên lọc mới chuyển sang date...
Đã dùng ADO để ghi dữ liệu sao không dùng luôn ADO để trích xuất dữ liệu? Mà ghi dữ liệu bằng ADO có thể bạn có dữ liệu nguồn là file Access hay CSDL tại sao không xử lý trên đó mà quay ra Excel làm gì?

Mặt khác bạn nói vô lý quá: Dùng ADO để ghi dữ liệu mà kiểu định dạng Text, Date có thể cùng ghi vào một trường được hay sao?
 
Upvote 0
1) Ngày tháng trong file của bạn có một ít ở trái đất, một ít ở.......hành tinh khác nên ông Bill hông nhận biết được
2) Dạng bài này dùng Dic hình như không hợp, mình đề nghị bạn sử dụng bộ lọc cho nó nhẹ nhàng ( nếu chưa biết làm thì réo Ba Tê hoặc Quang Hải nhé)
Thân

anh Bate thi làm cho em lọc bằng mảng rồi còn anh cò va anh hải làm dùm em mỗi người một kiểu đi để em học với. năm tới nếu đi sinh nhật GPE nữa em chúc anh tự quay số rồi chúng thưởng như anh bate nhé hôm đó em sẽ mời anh nhậu vài tăng nữa .không xỉn ko về... mà xỉn rồi thì về sao anh
 
Lần chỉnh sửa cuối:
Upvote 0
Đã dùng ADO để ghi dữ liệu sao không dùng luôn ADO để trích xuất dữ liệu? Mà ghi dữ liệu bằng ADO có thể bạn có dữ liệu nguồn là file Access hay CSDL tại sao không xử lý trên đó mà quay ra Excel làm gì?

Mặt khác bạn nói vô lý quá: Dùng ADO để ghi dữ liệu mà kiểu định dạng Text, Date có thể cùng ghi vào một trường được hay sao?
mình sử dung hai file . file a ghi vào file b khi cần dữ liệu thì lấy lên sau đó lọc theo ngày. ngày loạn la do mình copy lại từ file b do ADO ghi vào đó nên ngày nó sai đi.
mình cũng định lấy ngày bằng ADO nhưng kiến thức Ado cửa mình còn kém quá không làm được
 
Lần chỉnh sửa cuối:
Upvote 0
mình sử dung hai file . file a ghi vào file b khi cần dữ liệu thì lấy lên sau đó lọc theo ngày. ngày loạn la do mình copy lại từ file b do ADO ghhi vào đó nên ngày nó sai đi.
mình cũng định lấy ngày bằng ADO nhưng kiến thức Ado cửa mình còn kém quá không làm được
Nếu bạn đã biết về ADO thì bạn chỉ cần dùng truy vấn dạng
Mã:
Select * From [Table] Where [Field1]>= Fromdate and [Field2]<= Todate

Mà bạn cũng nên xem xét lại cách ghi dữ liệu bằng ADO sao lại để tồn tại những trường hợp ngày tháng, Text lẫn lộn trên 1 trường được. Đó không phải kiểu cơ sở dữ liệu chuẩn. Sẽ khó khăn cho việc quản lý.
 
Upvote 0
anh Bate thi làm cho em lọc bằng mảng rồi còn anh cò va anh hải làm dùm em mỗi người một kiểu đi để em học với. năm tới nếu đi sinh nhật GPE nữa em chúc anh tự quay số rồi chúng thưởng như anh bate nhé hôm đó em sẽ mời anh nhậu vài tăng nữa .không xỉn ko về... mà xỉn rồi thì về sao anh
Loc kiểu này, không cần lọc duy nhất cho một "cái gì đó" thì Dictionary làm gì nhỉ?
Thằng nào đúng điều kiện thì lấy, hổng đúng thì bỏ qua, như code dùng mảng là được rồi.
Chỉ khi lọc duy nhất theo "ẻm" nào đó, tính tổng (hay gì đó) cho cái "ẻm" này thì mới nhờ đến "Dic".
Túm lại, bài này không cần "Dic".
Nếu muốn kiểu khác thì nhờ anh Hải làm kiểu Advanced Filter chắc "trúng".
Anh Cò thì "mần" kiểu "đốc lon". Ẹc...
-------------------------------------
Ủa? SN GPE TPHCM vừa rồi có bạn tham dự sao? Cho xin một ảnh nào đó có bạn xem, đáng tiếc là tôi không làm quen hết được tất cả các bạn có mặt trong buổi SN.
 
Lần chỉnh sửa cuối:
Upvote 0

Loc kiểu này, không cần lọc duy nhất cho một "cái gì đó" thì Dictionary làm gì nhỉ?
Thằng nào đúng điều kiện thì lấy, hổng đúng thì bỏ qua, như code dùng mảng là được rồi.
Chỉ khi lọc duy nhất theo "ẻm" nào đó, tính tổng (hay gì đó) cho cái "ẻm" này thì mới nhờ đến "Dic".
Túm lại, bài này không cần "Dic".
-------------------------------------

Ủa? SN GPE TPHCM vừa rồi có bạn tham dự sao? Cho xin một ảnh nào đó có bạn xem, đáng tiếc là tôi không làm quen hết được tất cả các bạn có mặt trong buổi SN.
em ngồi cạnh anh hải đó. em đoán anh khoãng U40 thôi đó
 
Upvote 0
Loc kiểu này, không cần lọc duy nhất cho một "cái gì đó" thì Dictionary làm gì nhỉ?
Thằng nào đúng điều kiện thì lấy, hổng đúng thì bỏ qua, như code dùng mảng là được rồi.
Chỉ khi lọc duy nhất theo "ẻm" nào đó, tính tổng (hay gì đó) cho cái "ẻm" này thì mới nhờ đến "Dic".
Túm lại, bài này không cần "Dic".
Nếu muốn kiểu khác thì nhờ anh Hải làm kiểu Advanced Filter chắc "trúng".
Anh Cò thì "mần" kiểu "đốc lon". Ẹc...
-------------------------------------
Ủa? SN GPE TPHCM vừa rồi có bạn tham dự sao? Cho xin một ảnh nào đó có bạn xem, đáng tiếc là tôi không làm quen hết được tất cả các bạn có mặt trong buổi SN.
Với dữ liệu này phải dùng code này đinh dạnh lại ngày tháng, nếu không thì cái code mảng cũng đi hoang luôn
PHP:
Sub ChangeDateFormat()
Dim data(), i As Long
data = Range([I5], [I65536].End(3)).Value
For i = 1 To UBound(data)
    data(i, 1) = DateValue(data(i, 1))
Next
[I5].Resize(i - 1) = data
End Sub
Sau khi định dạng ngày tháng rồi thì mọi chuyện đã đơn giản
Dùng AD filter là nhẹ nhàng. Tại W5 nhập công thức này =AND($I5>=$P$1,$I5<=$P$2)
Sau đó xài code này để lọc >>> Xong
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [P1:P2]) Is Nothing Then
    [A4:J10000].AdvancedFilter 2, [W4:W5], [L4:U4]
End If
End Sub
Xíu nữa quên, phải tạo dòng tiêu đề cho 10 cột đó nha
****
Còn nếu nhất định phải xài mảng vì lý do abc nào đó thì xử lý bằng code này, dữ liệu gốc không thay đổi gì cả

PHP:
Sub LOC_MANG()
Dim sArr(), dArr(), i As Long, j As Long, k As Long
Dim fDate As Long, eDate As Long, chk As Variant
With Sheet1
    sArr = .Range(.[A5], .[B65536].End(3)).Resize(, 10).Value
    ReDim dArr(1 To UBound(sArr, 1), 1 To 10)
    fDate = .[P1].Value: eDate = .[P2].Value
    For i = 1 To UBound(sArr, 1)
        chk = sArr(i, 9)
        If Not IsNumeric(chk) Then sArr(i, 9) = DateValue(chk)
        If DateValue(chk) >= fDate Then
            If DateValue(chk) <= eDate Then
                k = k + 1
                For j = 1 To 10
                    dArr(k, j) = sArr(i, j)
                Next j
            End If
        End If
    Next i
    If k Then .[L5].Resize(k, 10) = dArr
End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Nếu bạn đã biết về ADO thì bạn chỉ cần dùng truy vấn dạng
Mã:
Select * From [Table] Where [Field1]>= Fromdate and [Field2]<= Todate

Mà bạn cũng nên xem xét lại cách ghi dữ liệu bằng ADO sao lại để tồn tại những trường hợp ngày tháng, Text lẫn lộn trên 1 trường được. Đó không phải kiểu cơ sở dữ liệu chuẩn. Sẽ khó khăn cho việc quản lý.
mình ghi vào bằng code này do HLMT viết cho
Sub PhieuI_DataBan()
With Sheet2
.[G4].Value = [G4].Value + 1
.[C5:C82].AutoFilter 1, "<>"
Dim Cnn As Object
Set Cnn = CreateObject("ADODB.Connection")
With Cnn
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & ThisWorkbook.Path & _
"\data.xlsb;Extended Properties=""Excel 12.0;HDR=No;"""
.Open
.Execute "INSERT INTO [Data_Ban$] SELECT F1,F2,F3,F4,F5,F6,F7,F8,F9,F10 FROM [Excel 12.0;Database=" & _
ThisWorkbook.FullName & ";HDR=No].[PXBI$A6:J82]"
End With
Cnn.Close: Set Cnn = Nothing
End With
End Sub
sau khi minh copy lại và gõ lại một số ngày ở trên để test thôi cho nên ngày nó loạn lên đấy
 
Upvote 0
Với dữ liệu này phải dùng code này đinh dạnh lại ngày tháng, nếu không thì cái code mảng cũng đi hoang luôn
PHP:
Sub ChangeDateFormat()
Dim data(), i As Long
data = Range([I5], [I65536].End(3)).Value
For i = 1 To UBound(data)
    data(i, 1) = DateValue(data(i, 1))
Next
[I5].Resize(i - 1) = data
End Sub
Sau khi định dạng ngày tháng rồi thì mọi chuyện đã đơn giản
Dùng AD filter là nhẹ nhàng. Tại W5 nhập công thức này =AND($I5>=$P$1,$I5<=$P$2)
Sau đó xài code này để lọc >>> Xong
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [P1:P2]) Is Nothing Then
    [A4:J10000].AdvancedFilter 2, [W4:W5], [L4:U4]
End If
End Sub
Xíu nữa quên, phải tạo dòng tiêu đề cho 10 cột đó nha
****
Còn nếu nhất định phải xài mảng vì lý do abc nào đó thì xử lý bằng code này, dữ liệu gốc không thay đổi gì cả

PHP:
Sub LOC_MANG()
Dim sArr(), dArr(), i As Long, j As Long, k As Long
Dim fDate As Long, eDate As Long, chk As Variant
With Sheet1
    sArr = .Range(.[A5], .[B65536].End(3)).Resize(, 10).Value
    ReDim dArr(1 To UBound(sArr, 1), 1 To 10)
    fDate = .[P1].Value: eDate = .[P2].Value
    For i = 1 To UBound(sArr, 1)
        chk = sArr(i, 9)
        If Not IsNumeric(chk) Then sArr(i, 9) = DateValue(chk)
        If DateValue(chk) >= fDate Then
            If DateValue(chk) <= eDate Then
                k = k + 1
                For j = 1 To 10
                    dArr(k, j) = sArr(i, j)
                Next j
            End If
        End If
    Next i
    If k Then .[L5].Resize(k, 10) = dArr
End With
End Sub
cái vụ ChangeDateFormat này em tự làm được mà.còn vụ lọc AdvancedFilter thì anh chỉ em hôm rồi . em cũng sử được luôn mà. và vụ mãng thì Anh bate làm cho rồi hiện đang sử dụng rất tốt. vấn đề là em đang muốn hoc dic hay dung ADO lọc ngày trực tiếp lên thôi anh...
 
Lần chỉnh sửa cuối:
Upvote 0
cái vụ ChangeDateFormat này em tự làm được mà.còn vụ lọc AdvancedFilter thì anh chỉ em hôm rồi . em cũng sử được luôn mà. và vụ mãng thì Anh bate làm cho rồi hiện đang sử dụng rất tốt. vấn đề là em đang muốn hoc dic hay dung ADO lọc ngày trực tiếp lên thôi anh...
Nếu muốn nghiên cứu, học hỏi về Dictionary trên GPE thì cứ gõ "Dictionary" vào ô tìm kiếm, ít nhất cũng tìm được cái này, và còn nhiều nhiều nữa.
http://www.giaiphapexcel.com/forum/...y-qua-các-ví-dụ-đơn-giản!&p=583252#post583252
 
Upvote 0
Nếu bạn thích ADO thì xài tạm cái này
Mã:
Sub LocDuLieu()
    Dim Cnn As Object, Rs As Object, Fdate As Date, Tdate As Date
    Fdate = Sheet1.[I2].Value2
    Tdate = Sheet1.[I3].Value2
    Set Cnn = CreateObject("ADODB.Connection")
    With Cnn
        .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                            "Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=No;"""
        .Open
        Set Rs = .Execute("Select F1,F2,F3,F4,F5,F6,F7,F8 From [Sheet1$B5:I65536] Where F8 Between #" & Format(DateSerial(Year(Fdate), Month(Fdate), Day(Fdate)), "mm/dd/yyyy") _
                        & "# And #" & Format(DateSerial(Year(Tdate), Month(Tdate), Day(Tdate)), "mm/dd/yyyy") & "#")
        Sheet2.Range("B2:B65536").ClearContents
        Sheet2.Range("B2").CopyFromRecordset Rs
        Cnn.Close: Set Cnn = Nothing
    End With
End Sub
 
Upvote 0
Nếu bạn thích ADO thì xài tạm cái này
Mã:
Sub LocDuLieu()
    Dim Cnn As Object, Rs As Object, Fdate As Date, Tdate As Date
    Fdate = Sheet1.[I2].Value2
    Tdate = Sheet1.[I3].Value2
    Set Cnn = CreateObject("ADODB.Connection")
    With Cnn
        .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                            "Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=No;"""
        .Open
        Set Rs = .Execute("Select F1,F2,F3,F4,F5,F6,F7,F8 From [Sheet1$B5:I65536] Where F8 Between #" & Format(DateSerial(Year(Fdate), Month(Fdate), Day(Fdate)), "mm/dd/yyyy") _
                        & "# And #" & Format(DateSerial(Year(Tdate), Month(Tdate), Day(Tdate)), "mm/dd/yyyy") & "#")
        Sheet2.Range("B2:B65536").ClearContents
        Sheet2.Range("B2").CopyFromRecordset Rs
        Cnn.Close: Set Cnn = Nothing
    End With
End Sub
Nếu bạn dành về ADO thì bạn giúp mình lọc ngày bằng ADO lấy từ file data lên nhé.còn code trên chạy rất tốt nhưng chỉ trên cùng một file thôi thì phải
chi tiết mình ghi kèm trên file
xin cảm ơn
 

File đính kèm

Upvote 0
Bạn dùng Code sau:
Mã:
Sub LocDuLieu()
    Dim Cnn As Object, Rs As Object, Fdate As Date, Tdate As Date
    Fdate = Sheet2.[I2].Value2
    Tdate = Sheet2.[I3].Value2
    Set Cnn = CreateObject("ADODB.Connection")
    With Cnn
        .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                            "Data Source=" & ThisWorkbook.Path & "\data.xlsb" & ";Extended Properties=""Excel 12.0;HDR=No;"""
        .Open
        Set Rs = .Execute("Select F1,F2,F3,F4,F5,F6,F7,F8,F9,F10 From [DataBan$A2:J65536] Where F9 Between #" & Format(DateSerial(Year(Fdate), Month(Fdate), Day(Fdate)), "mm/dd/yyyy") _
                        & "# And #" & Format(DateSerial(Year(Tdate), Month(Tdate), Day(Tdate)), "mm/dd/yyyy") & "#")
        Sheet1.Range("A3:B65536").ClearContents
        Sheet1.Range("A3").CopyFromRecordset Rs
        Cnn.Close: Set Cnn = Nothing
    End With
End Sub

Code anh HLMT là chuẩn rồi bạn ah. nhưng dữ liệu của bạn có vẫn đề. Như tôi đã nói ở trên 1 trường chỉ tương ứng với 1 loại dữ liệu thôi. dữ liệu Date không thể gõ Text vào được. Bạn đã nói rằng do giả lập nên gõ lung tung nhưng nếu file bài #32 thì rõ ràng dữ liệu nhập của bạn không chuẩn. Bạn nên xem xét để có kết quả chính xác.
 
Upvote 0

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

Back
Top Bottom