Trích lọc dữ liệu theo điều kiện (1 người xem)

Liên hệ QC

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

Thaiduc

Thành viên hoạt động
Tham gia
13/3/07
Bài viết
118
Được thích
6
Xin các Anh, Chị trên diễn đàn hỗ trợ,giúp mình tạo nút lệnh (Cmd) và Code trích lọc dữ liệu từ Sheet "Data" sang sheet "Loc" những người là Nam 17 tuổi (tính từ ngày, tháng, năm sinh đến ngày, tháng, năm trích lọc) và chỉ trích lọc: Họ và tên, ngày tháng năm sinh, dân tộc, nơi thường trú, họ và tên cha, họ và tên mẹ và điền thêm số thứ tự. Rất cảm ơn và mong được giúp.
Có gửi file kèm theo.
 

File đính kèm

Bạn gửi file mà bạn đặt Pass VBA thế? Thôi thì Copy ra file khác để thử xem sao.
Bạn Copy code sau ra module rồi gán sub AgeFilter vào nút lệnh
Mã:
Function Age(startdate As Date, EndDate As Date) As Long
    Dim PTime As Integer
    PTime = Int(DateDiff("m", startdate, EndDate)) + _
            (EndDate < DateSerial(Year(EndDate), Month(EndDate), Day(startdate)))
    Age = Int(PTime / 12)
End Function
Sub AgeFilter()
    Dim Arr, Res
    Dim i As Long, k As Long
    Arr = Sheets("data").Range("A2:L" & Sheets("Data").Range("A65536").End(3).Row).Value2
    ReDim Res(1 To UBound(Arr, 1), 1 To 8)
    For i = 1 To UBound(Arr, 1)
        If UCase(Arr(i, 4)) = "NAM" And Age(DateSerial(Year(Arr(i, 5)), Month(Arr(i, 5)), Day(Arr(i, 5))), Now()) = 17 Then
            k = k + 1
            Res(k, 1) = k
            Res(k, 2) = Arr(i, 3)
            Res(k, 3) = Arr(i, 4)
            Res(k, 4) = Arr(i, 5)
            Res(k, 5) = Arr(i, 6)
            Res(k, 6) = Arr(i, 8)
            Res(k, 7) = Arr(i, 9)
            Res(k, 8) = Arr(i, 11)
        End If
    Next
Sheets("Loc").Range("A2:L65536").ClearContents
Sheets("Loc").Range("A2").Resize(k, 8) = Res
End Sub
 
Upvote 0
Rất cám ơn dhn46 nhiều và xin lỗi sơ ý vì cái Pass (huuduc). Nhờ anh chỉ giúp: vẫn giữ nguyên như cách anh đã làm nhưng sẽ lọc theo ngày (ví dụ lọc từ ngày 05/01/1996 đến ngày 05/01/2013). Chỉ những người "Nam" 17 tuổi được nhập trong khoản thời gian từ 05/01/1996 đến ngày 05/01/2013.
Cám ơn nhiều, chúc sức khỏe, mong lắm lắm.
 
Upvote 0
Bạn thêm một chút điều kiện vào là được, bạn thay thế toàn bộ Code bên trên bằng Code sau
Mã:
Function Age(startdate As Date, EndDate As Date) As Long
    Dim PTime As Integer
    PTime = Int(DateDiff("m", startdate, EndDate)) + _
            (EndDate < DateSerial(Year(EndDate), Month(EndDate), Day(startdate)))
    Age = Int(PTime / 12)
End Function


Sub AgeFilter()
    Dim Arr, Res
    Dim i As Long, k As Long
    Arr = Sheets("data").Range("A2:L" & Sheets("Data").Range("A65536").End(3).Row).Value2
    ReDim Res(1 To UBound(Arr, 1), 1 To 8)
    For i = 1 To UBound(Arr, 1)
        If UCase(Arr(i, 4)) = "NAM" And Age(DateSerial(Year(Arr(i, 5)), Month(Arr(i, 5)), Day(Arr(i, 5))), Now()) = 17 Then
            If DateSerial(Year(Arr(i, 5)), Month(Arr(i, 5)), Day(Arr(i, 5))) >= #5/1/1996# And _
               DateSerial(Year(Arr(i, 5)), Month(Arr(i, 5)), Day(Arr(i, 5))) <= #5/1/2013# Then
                k = k + 1
                Res(k, 1) = k
                Res(k, 2) = Arr(i, 3)
                Res(k, 3) = Arr(i, 4)
                Res(k, 4) = Arr(i, 5)
                Res(k, 5) = Arr(i, 6)
                Res(k, 6) = Arr(i, 8)
                Res(k, 7) = Arr(i, 9)
                Res(k, 8) = Arr(i, 11)
            End If
        End If
    Next
    Sheets("Loc").Range("A2:L65536").ClearContents
    Sheets("Loc").Range("A2").Resize(k, 8) = Res
End Sub
 
Upvote 0
Rất cám ơn dhn46 nhiều và xin lỗi sơ ý vì cái Pass (huuduc). Nhờ anh chỉ giúp: vẫn giữ nguyên như cách anh đã làm nhưng sẽ lọc theo ngày (ví dụ lọc từ ngày 05/01/1996 đến ngày 05/01/2013). Chỉ những người "Nam" 17 tuổi được nhập trong khoản thời gian từ 05/01/1996 đến ngày 05/01/2013.
Cám ơn nhiều, chúc sức khỏe, mong lắm lắm.
Đọc mà cái đầu quay quay, chả hiểu muốn cái gì.
 
Upvote 0
dhn46 cũng "liều" đoán là bạn ấy muốn lọc những Nam thanh niên đủ 17 tuổi mà ngày sinh >=05/01/1996,
vì có những trường hợp năm 1995 nữa.

Thôi thì đành liều thôi bác ah.
5/1/2013 nếu đủ 17 tuổi thì sinh ngày 5/1/1996, còn những người được nhập từ ... là sao? từ 5/1/1996 đến 5/1/2013 đều lấy hết hay sao? 17 tuổi là sao, năm 2013-1996 là 17 thì tất cả những người sinh năm 1996 là 17 tuổi hay sao?
Tui thấy ngu quá nên thôi vậy.
nhưng sẽ lọc theo ngày (ví dụ lọc từ ngày 05/01/1996 đến ngày 05/01/2013). Chỉ những người "Nam" 17 tuổi được nhập trong khoản thời gian từ 05/01/1996 đến ngày 05/01/2013.
Mà đọc xong, xem lại, mình ngu thiệt!
 
Lần chỉnh sửa cuối:
Upvote 0
Tất cả lỗi là do ở mình không nói rõ ý. Ở đây mình cần giúp đở vấn đề là: Data là danh sách nhập tất cả trong đó có cả người lớn tuổi và trẻ em, cả nam và nữ, nhưng mình muốn lọc ra những người là nam 17 tuổi (tuổi 16 bước qua tuổi 17 là Ok), theo thời gian bất kỳ mà minh nhập để lọc ra (ví dụ: mình muốn lọc ở tháng 02 năm 2013 từ ngày 01 đến ngày 28 chẳng hạn, thì sẽ cho danh sách mà mình đã nhập trong tháng đó có người 17 tuổi là nam), tại sheet "Loc" có thêm 02 cells, 01 cells "từ ngày, tháng, năm" và 01 cells "đến từ ngày, tháng, năm" để nhập thời gian mà mình yêu cầu và cũng tại thời gian đó sẽ lọc ra đối tượng mình muốn lọc (tuổi 17 kể từ ngày sinh đến tháng 02/2013). Sau khi nhập thì sẽ trích dữ liệu theo yêu cầu (mình không muốn sử dụng hàm Vlookup).
Một lần nữa xin các sư huynh cho mình xin lỗi và rất mong giúp (mục đích là mình muốn lọc: để có danh sách thanh niên nam chuẩn bị cho công tác gọi công dân nhập ngũ đó mà). Trân trọng kính chào cả nhà.
 
Upvote 0
5/1/2013 nếu đủ 17 tuổi thì sinh ngày 5/1/1996, còn những người được nhập từ ... là sao? từ 5/1/1996 đến 5/1/2013 đều lấy hết hay sao? 17 tuổi là sao, năm 2013-1996 là 17 thì tất cả những người sinh năm 1996 là 17 tuổi hay sao?
Tui thấy ngu quá nên thôi vậy.

Mà đọc xong, xem lại, mình ngu thiệt!

Ôi thầy giáo Ba Tê cho em ngu cùng với, híc đoán già đoán non hóa ra "trật lất"

Gửi bạn chủ Topic: Tôi không biết 02 Cell trong sheet lọc của bạn nó nằm ở đâu cả. Mà nếu ban đọc kỹ Code 1 chút bạn có thấy cái chỗ có ngày tháng năm, lớn hơn, nhỏ hơn, bằng đấy, cứ thế mà "phang" vào thôi.
 
Upvote 0
Không, mình mới ngu, không phải các sư huynh. Vâng, 02 cells đó có thể đặt phía trên cùng của bảng tính ở sheets "Loc" (vì thời gian do mình chọn, nếu để trong code thì nó cố định về thời gian cần lọc. Còn tuổi cần lọc mình Ok lắm lắm (không théc mét gì cả). dhn46 có thể giúp mình tạo hoàn chỉnh trong sheet "Loc" nhé (cái Pass là: huuduc). Rất cám ơn các sư huynh.
 
Upvote 0
Không, mình mới ngu, không phải các sư huynh. Vâng, 02 cells đó có thể đặt phía trên cùng của bảng tính ở sheets "Loc" (vì thời gian do mình chọn, nếu để trong code thì nó cố định về thời gian cần lọc. Còn tuổi cần lọc mình Ok lắm lắm (không théc mét gì cả). dhn46 có thể giúp mình tạo hoàn chỉnh trong sheet "Loc" nhé (cái Pass là: huuduc). Rất cám ơn các sư huynh.
Thử code sau, trật trúng gì tính tiếp.

[GPECODE=sql]Sub Loc_HLMT()
Dim adoConn As Object, adoRS As Object
Set adoConn = CreateObject("ADODB.Connection")
Set adoRS = CreateObject("ADODB.Recordset")
With adoConn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.FullName & _
";Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
.Open
End With
With adoRS
.ActiveConnection = adoConn
.Open "SELECT F3,F4,F5,F6,F8,F9,F11 " & _
"FROM [Data$A2:L500] " & _
"WHERE F5 BETWEEN #" & Format(Sheet3.[G1].Value, "dd-MMM-yyyy") & "# AND #" & _
Format(Sheet3.[H1].Value, "dd-MMM-yyyy") & "# and Year(F5)-" & Year(Sheet3.[G1]) & "=17"
End With
With Sheet3
.[B3:H500].ClearContents
.[B3].CopyFromRecordset adoRS
End With
adoRS.Close: Set adoRS = Nothing
adoConn.Close: Set adoConn = Nothing

End Sub
[/GPECODE]
 

File đính kèm

Upvote 0
Xin cảm ơn. Nhưng khi lọc lại ra tất cả danh sách có tên trong thời điểm nhập mà không phải nam 17 tuổi.
 
Upvote 0
Chào các sư huynh, mình gửi lại File, mong các sư huynh giúp.
Rất mong và một lần nữa xin lỗi các sư huynh về việc đưa yêu cầu mà không đưa file có nội dung yêu cầu (xấu hỗ quá).
 

File đính kèm

Upvote 0
Bạn thay Code cũ bằng Code này, nhập ngày bắt đầu và kết thúc khi có hộp thông báo
Mã:
Function Age(startdate As Date, EndDate As Date) As Long
    Dim PTime As Integer
    PTime = Int(DateDiff("m", startdate, EndDate)) + _
            (EndDate < DateSerial(Year(EndDate), Month(EndDate), Day(startdate)))
    Age = Int(PTime / 12)
End Function
Sub AgeFilter()
    On Error GoTo Cont
    Dim Arr, Res
    Dim i As Long, k As Long
    Dim sDate As Date, eDate As Date
    sDate = CDate(InputBox("Please input Start Date", "Notification"))
    eDate = CDate(InputBox("Please input End Date", "Notification"))
    Arr = Sheets("data").Range("A2:L" & Sheets("Data").Range("A65536").End(3).Row).Value2
    ReDim Res(1 To UBound(Arr, 1), 1 To 8)
    For i = 1 To UBound(Arr, 1)
        If UCase(Arr(i, 4)) = "NAM" And Age(DateSerial(Year(Arr(i, 5)), Month(Arr(i, 5)), Day(Arr(i, 5))), Now()) = 17 Then
            If DateSerial(Year(Arr(i, 5)), Month(Arr(i, 5)), Day(Arr(i, 5))) >= sDate And _
               DateSerial(Year(Arr(i, 5)), Month(Arr(i, 5)), Day(Arr(i, 5))) <= eDate Then
                k = k + 1
                Res(k, 1) = k
                Res(k, 2) = Arr(i, 3)
                Res(k, 3) = Arr(i, 4)
                Res(k, 4) = Arr(i, 5)
                Res(k, 5) = Arr(i, 6)
                Res(k, 6) = Arr(i, 8)
                Res(k, 7) = Arr(i, 9)
                Res(k, 8) = Arr(i, 11)
            End If
        End If
    Next
    Sheets("Loc").Range("A2:L65536").ClearContents
    If k = 0 Then Exit Sub
    Sheets("Loc").Range("A2").Resize(k, 8) = Res
    Exit Sub
Cont:
    Sheets("Loc").Range("A2:L65536").ClearContents
    MsgBox "Please check your condition", vbInformation, "Notification"
End Sub
 
Upvote 0
Cám ơn dhn46 nhiều (không biết kêu bằng anh hay chị nhỉ), anh có thể làm trong file mình mới gửi được không vậy, ráng giúp mình nhé. Cám ơn nhiều. Thân ái.
 
Upvote 0
File này chưa có ngày, tháng, năm nhập vào từng trường hợp. File mình gửi sau # 13 (TRICH LOC THEO DIEU KIEN [1].Zip) ở sheet "Data" có thông tin đó (cột L) và sheet "Loc" có thêm 02 cells: E1 (từ dd/MM/yyyy) và E2 (đến dd/MM/yyyy) dùng để lọc theo thời gian đã nhập dữ liệu. Rất cám ơn anh. Xin anh giúp.
 
Upvote 0
File này chưa có ngày, tháng, năm nhập vào từng trường hợp. File mình gửi sau # 13 (TRICH LOC THEO DIEU KIEN [1].Zip) ở sheet "Data" có thông tin đó (cột L) và sheet "Loc" có thêm 02 cells: E1 (từ dd/MM/yyyy) và E2 (đến dd/MM/yyyy) dùng để lọc theo thời gian đã nhập dữ liệu. Rất cám ơn anh. Xin anh giúp.
Bạn xem file đính kèm nha
 

File đính kèm

Upvote 0
Xin cảm ơn. Nhưng khi lọc lại ra tất cả danh sách có tên trong thời điểm nhập mà không phải nam 17 tuổi.
Thì thêm 1 điều kiện là Nam nữa là được.

[GPECODE=sql]Sub Loc_HLMT()
Dim adoConn As Object, adoRS As Object
Set adoConn = CreateObject("ADODB.Connection")
Set adoRS = CreateObject("ADODB.Recordset")
With adoConn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.FullName & _
";Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
.Open
End With
With adoRS
.ActiveConnection = adoConn
.Open "SELECT F3,F4,F5,F6,F8,F9,F11 " & _
"FROM [Data$A2:M500] " & _
"WHERE F5 BETWEEN #" & Format(Sheet3.[E1].Value, "dd-MMM-yyyy") & "# AND #" & _
Format(Sheet3.[E2].Value, "dd-MMM-yyyy") & "# and Year(F5)-" & Year(Sheet3.[E1]) & "=17 and F4 like 'Nam'"
End With
With Sheet3
.[B5:H500].ClearContents
.[B5].CopyFromRecordset adoRS
End With
adoRS.Close: Set adoRS = Nothing
adoConn.Close: Set adoConn = Nothing

End Sub

[/GPECODE]
 

File đính kèm

Upvote 0
Anh dhn46, Code của anh rất Ok, đúng yêu cầu của mình. Rất cám ơn. Nhưng nó không có đường kẻ ô, nhờ anh giúp tiếp cho trọn với.
 
Upvote 0
Anh dhn46, Code của anh rất Ok, đúng yêu cầu của mình. Rất cám ơn. Nhưng nó không có đường kẻ ô, nhờ anh giúp tiếp cho trọn với.
Bạn chọn từ ô A5:H1000 rồi vào Data > Condition Formatting với điều kiện là
Mã:
$A5<>""0
và chọn bonder kẻ khung là xong. Cứ dữ liệu bao nhiêu thì nó

Cách dùng Conditon formatting bạn có thể tìm trên diễn đàn (có cả ebook cho bạn tham khảo)
 
Upvote 0
Có thể dùng lọc dữ liệu mà!!

Tất cả lỗi là do ở mình không nói rõ ý. Ở đây mình cần giúp đở vấn đề là: Data là danh sách nhập tất cả trong đó có cả người lớn tuổi và trẻ em, cả nam và nữ, nhưng mình muốn lọc ra những người là nam 17 tuổi (tuổi 16 bước qua tuổi 17 là Ok), theo thời gian bất kỳ mà minh nhập để lọc ra (ví dụ: mình muốn lọc ở tháng 02 năm 2013 từ ngày 01 đến ngày 28 chẳng hạn, thì sẽ cho danh sách mà mình đã nhập trong tháng đó có người 17 tuổi là nam), tại sheet "Loc" có thêm 02 cells, 01 cells "từ ngày, tháng, năm" và 01 cells "đến từ ngày, tháng, năm" để nhập thời gian mà mình yêu cầu và cũng tại thời gian đó sẽ lọc ra đối tượng mình muốn lọc (tuổi 17 kể từ ngày sinh đến tháng 02/2013). Sau khi nhập thì sẽ trích dữ liệu theo yêu cầu (mình không muốn sử dụng hàm Vlookup).
Một lần nữa xin các sư huynh cho mình xin lỗi và rất mong giúp (mục đích là mình muốn lọc: để có danh sách thanh niên nam chuẩn bị cho công tác gọi công dân nhập ngũ đó mà). Trân trọng kính chào cả nhà.

Bạn có thể dùng Filter Advanced với điều kiện bạn muốn. Khỏi cần lập trình...
 
Lần chỉnh sửa cuối:
Upvote 0
Thì thêm 1 điều kiện là Nam nữa là được.

[GPECODE=sql]Sub Loc_HLMT()
Dim adoConn As Object, adoRS As Object
Set adoConn = CreateObject("ADODB.Connection")
Set adoRS = CreateObject("ADODB.Recordset")
With adoConn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.FullName & _
";Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
.Open
End With
With adoRS
.ActiveConnection = adoConn
.Open "SELECT F3,F4,F5,F6,F8,F9,F11 " & _
"FROM [Data$A2:M500] " & _
"WHERE F5 BETWEEN #" & Format(Sheet3.[E1].Value, "dd-MMM-yyyy") & "# AND #" & _
Format(Sheet3.[E2].Value, "dd-MMM-yyyy") & "# and Year(F5)-" & Year(Sheet3.[E1]) & "=17 and F4 like 'Nam'"
End With
With Sheet3
.[B5:H500].ClearContents
.[B5].CopyFromRecordset adoRS
End With
adoRS.Close: Set adoRS = Nothing
adoConn.Close: Set adoConn = Nothing

End Sub

[/GPECODE]

Mã:
& "# and Year(F5)-"[COLOR=#000000][FONT=Consolas] [/FONT][/COLOR]& Year(Sheet3.[E1]) & "=17 and F4 like 'Nam'"
Cho em hỏi nếu bây giờ em muốn sử dụng code của anh như ở trên để lọc dữ liệu với điều kiện từ ngày - tới ngày và thêm 1 điều kiện nữa ở ô E3 là Nam hoặc nữ (trong code của anh thì like Nam, ý của em là muốn điều kiện ở ô E3 thay đổi theo nhu cầu lọc
Trân trọng cảm ơn!
 
Upvote 0
Mã:
& "# and Year(F5)-"& Year(Sheet3.[E1]) & "=17 and F4 like 'Nam'"
Cho em hỏi nếu bây giờ em muốn sử dụng code của anh như ở trên để lọc dữ liệu với điều kiện từ ngày - tới ngày và thêm 1 điều kiện nữa ở ô E3 là Nam hoặc nữ (trong code của anh thì like Nam, ý của em là muốn điều kiện ở ô E3 thay đổi theo nhu cầu lọc
Trân trọng cảm ơn!
Thì bạn thay cái 'Nam' đó đi thành tham chiếu đến cell E3 là được.

& "# and Year(F5)-"& Year(Sheet3.[E1]) & "=17 and F4 like '" & Sheet3.[E3] & "'"

Xin lỗi tôi chưa test, bạn tự test nhé.
 
Upvote 0
Thì bạn thay cái 'Nam' đó đi thành tham chiếu đến cell E3 là được.



Xin lỗi tôi chưa test, bạn tự test nhé.

Cảm ơn anh nhiều.
Cho em hỏi nếu em muốn thêm từ F1, F2, F3, ..... f40 vô đoạn
Mã:
.Open"SELECT F3,F4,F5,F6,F8,F9,F11 "& _
thì có được không anh, hình như em chỉ có thêm được có được 10 cột (từ F1, .. F10). Nếu em muốn chọn khoản 40 cột thì làm như thế nào, nhờ anh hướng dẫn.
Trân trọng cảm ơn anh
PS: Trường hợp em có 40 cột, em chon hết 40 cột là select *, nhưng em không muốn cột F3 xuất hiện trong báo cáo thì mình phgải làm như thế nào hả anh
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn anh nhiều.
Cho em hỏi nếu em muốn thêm từ F1, F2, F3, ..... f40 vô đoạn
Mã:
.Open"SELECT F3,F4,F5,F6,F8,F9,F11 "& _
thì có được không anh, hình như em chỉ có thêm được có được 10 cột (từ F1, .. F10). Nếu em muốn chọn khoản 40 cột thì làm như thế nào, nhờ anh hướng dẫn.
Trân trọng cảm ơn anh
Hoàn toàn có thể được với điều kiện bạn chọn vùng dữ liệu tương ứng với số cột. Chỉnh cái tôi tô màu đỏ tương ứng nhé.

 
Upvote 0
Hoàn toàn có thể được với điều kiện bạn chọn vùng dữ liệu tương ứng với số cột. Chỉnh cái tôi tô màu đỏ tương ứng nhé.
Còn cái này thì làm sao hả anh
PS: Trường hợp em có 40 cột, em chon hết 40 cột là select *, nhưng em không muốn cột F3 xuất hiện trong báo cáo thì mình phgải làm như thế nào hả anh
 
Upvote 0
Còn cái này thì làm sao hả anh
PS: Trường hợp em có 40 cột, em chon hết 40 cột là select *, nhưng em không muốn cột F3 xuất hiện trong báo cáo thì mình phgải làm như thế nào hả anh

Chịu cực select từng cột, còn nếu "lười" không muốn gõ thì dùng vòng lặp nối chuổi F1,F2 & F(i) vào là được.
 
Upvote 0
Anh có thể giúp em làm giúp em cái vòng lặp nối chuổi F1,F2 & F(i) được không anh
Trân trọng

Bạn thử như sau:
[GPECODE=sql]

With adoRS

.ActiveConnection = adoConn
Dim strSQL As String
For i = 4 To 40
strSQL = strSQL & "F" & i & ","
Next
strSQL = "SELECT F1,F2," & Left(strSQL, Len(strSQL) - 1) & " FROM [Data$A2:AX500]"

MsgBox strSQL

.Open strSQL

End With[/GPECODE]
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thử như sau:
[GPECODE=sql]

Sub Loc_HLMT()
Dim adoConn As Object, adoRS As Object
Set adoConn = CreateObject("ADODB.Connection")
Set adoRS = CreateObject("ADODB.Recordset")
With adoConn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.FullName & _
";Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
.Open
End With
With adoRS
.ActiveConnection = adoConn
If Sheet3.Range("E4") = "" Then
.Open "SELECT F1,F2,F5,F6,F7,F8,F9,F10,F11,F12,F13,F14,F15,F16,F17,F18,F19,F20,F21,F22,F23,F24,F25,F26,F27,F28,F29,F30,F31,F32,F33,F34,F35,F36,F37,F38 " & _
"FROM [TN2014$A2:AL5000] " & _
"WHERE F7 BETWEEN #" & Format(Sheet3.[E5].Value, "dd-MMM-yyyy") & "# AND #" & _
Format(Sheet3.[E6].Value, "dd-MMM-yyyy") & "# "
Else
.Open "SELECT F1,F2,F5,F6,F7,F8,F9,F10,F11,F12,F13,F14,F15,F16,F17,F18,F19,F20,F21,F22,F23,F24,F25,F26,F27,F28,F29,F30,F31,F32,F33,F34,F35,F36,F37,F38 " & _
"FROM [TN2014$A2:AL5000] " & _
"WHERE F7 BETWEEN #" & Format(Sheet3.[E5].Value, "dd-MMM-yyyy") & "# AND #" & _
Format(Sheet3.[E6].Value, "dd-MMM-yyyy") & "# and F6 like '" & Sheet3.[E4] & "'"
End If
End With
With Sheet3
.[B8:AM500].ClearContents
.[B8].CopyFromRecordset adoRS
End With
adoRS.Close: Set adoRS = Nothing
adoConn.Close: Set adoConn = Nothing
End Sub[/GPECODE]


Em đã điều chỉnh lại được rồi!
 
Lần chỉnh sửa cuối:
Upvote 0
Thì thêm 1 điều kiện là Nam nữa là được.

[GPECODE=sql]Sub Loc_HLMT()
Dim adoConn As Object, adoRS As Object
Set adoConn = CreateObject("ADODB.Connection")
Set adoRS = CreateObject("ADODB.Recordset")
With adoConn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.FullName & _
";Extended Properties=""Excel 8.0;HDR=No;IMEX=1"";"
.Open
End With
With adoRS
.ActiveConnection = adoConn
.Open "SELECT F3,F4,F5,F6,F8,F9,F11 " & _
"FROM [Data$A2:M500] " & _
"WHERE F5 BETWEEN #" & Format(Sheet3.[E1].Value, "dd-MMM-yyyy") & "# AND #" & _
Format(Sheet3.[E2].Value, "dd-MMM-yyyy") & "# and Year(F5)-" & Year(Sheet3.[E1]) & "=17 and F4 like 'Nam'"
End With
With Sheet3
.[B5:H500].ClearContents
.[B5].CopyFromRecordset adoRS
End With
adoRS.Close: Set adoRS = Nothing
adoConn.Close: Set adoConn = Nothing

End Sub

[/GPECODE]
Cho em hoi khi mở bằng office 2007 thì bình thường nhưng khi mở bằng office 2010 thì bị lỗi như hình.
lỗi này là lỗi gì, nhờ anh hướng dẫn khắc phục
Capture.PNG
 
Upvote 0
Upvote 0

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

Back
Top Bottom