lọc theo điều kiện ngày tháng.!

Liên hệ QC

shnhatha221108

Thành viên chính thức
Tham gia
2/10/18
Bài viết
57
Được thích
11
Chào anh chị trong diễn đàm GPX .
Nhờ anh chị chỉ bảo giúp..Tôi muốn thêm điều kiên để lọc một khoảng ngày tháng bất khì khi lấy dữ liệu từ sheet DLNguon sang sheet TH thì cần chỉnh sửa câu lệnh dưới thế nào?
Mong được chỉ bảo...
..................
lsSQL = "SELECT * FROM [" & shNameNguon(i) & "$B4:D10000] "
 

File đính kèm

  • DL.rar
    36.1 KB · Đọc: 8
Chào anh chị trong diễn đàm GPX .
Nhờ anh chị chỉ bảo giúp..Tôi muốn thêm điều kiên để lọc một khoảng ngày tháng bất khì khi lấy dữ liệu từ sheet DLNguon sang sheet TH thì cần chỉnh sửa câu lệnh dưới thế nào?
Mong được chỉ bảo...
..................
lsSQL = "SELECT * FROM [" & shNameNguon(i) & "$B4:D10000] "

Bạn thử:
lsSQL = "SELECT * FROM [" & shNameNguon(i) & "$B4:D10000] " & "WHERE Ngay>= ' ngày tháng bất khì ' AND Ngay<= ' ngày tháng bất khì'"
 
Bạn thử:
lsSQL = "SELECT * FROM [" & shNameNguon(i) & "$B4:D10000] " & "WHERE Ngay>= ' ngày tháng bất khì ' AND Ngay<= ' ngày tháng bất khì'"
Cảm ơn bạn mình đã thử nhưng báo lỗi..
Nhờ bạn và anh chị kiểm tra giúp câu lệnh dưới.Mình muốn tham chiếu dữ liệu lọc ngày đến ô D2 nhưng báo lỗi (Xin xem file đính kèm giúp)
lsSQL = "SELECT f1,f2,f3 FROM [" & shNameNguon(i) & "$B4:D65536] where f1>=Sheets(shNameDich(i)).[D2] group by f1,f2,f3"
 

File đính kèm

  • Desktop.rar
    33.9 KB · Đọc: 7
Cảm ơn bạn mình đã thử nhưng báo lỗi..
Nhờ bạn và anh chị kiểm tra giúp câu lệnh dưới.Mình muốn tham chiếu dữ liệu lọc ngày đến ô D2 nhưng báo lỗi (Xin xem file đính kèm giúp)
lsSQL = "SELECT f1,f2,f3 FROM [" & shNameNguon(i) & "$B4:D65536] where f1>=Sheets(shNameDich(i)).[D2] group by f1,f2,f3"
Thử với code sau nhé:

Mã:
Sub LocNgay_HLMT()
    With CreateObject("ADODB.Connection")
        .Open ("Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.Path & "\DLNguon.xlsx")
        Sheet4.Range("A6:E1000").ClearContents
        Sheet4.Range("A6").CopyFromRecordset .Execute("SELECT * FROM [DL$] WHERE NGAY >=#" & Format(Sheet4.Range("D2"), "yyyy-MMM-dd") & "#")
    End With
 
End Sub
 
Thử với code sau nhé:

Mã:
Sub LocNgay_HLMT()
    With CreateObject("ADODB.Connection")
        .Open ("Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.Path & "\DLNguon.xlsx")
        Sheet4.Range("A6:E1000").ClearContents
        Sheet4.Range("A6").CopyFromRecordset .Execute("SELECT * FROM [DL$] WHERE NGAY >=#" & Format(Sheet4.Range("D2"), "yyyy-MMM-dd") & "#")
    End With

End Sub
Code rất hay nhưng khi mình muốn thay đổi Input Oupput thì rất khó. nhờ bác viết lại code dạng Mãng để cho thay đổi vị trí cho dễ. cảm ơn bác
Bài đã được tự động gộp:

Bạn thử:
lsSQL = "SELECT * FROM [" & shNameNguon(i) & "$B4:D10000] " & "WHERE Ngay>= ' ngày tháng bất khì ' AND Ngay<= ' ngày tháng bất khì'"
Bạn ơi giúp mình với. Mình lọc tới ô D2 nhưng vẩn báo lỗi
 
Input, output là sao bạn?
Thí dụ như Vùng Sheets("abc").Range("a6:e1000") kiểu như code bình thường đó. Chứ code của bác Em đọc không biết gì hết. muốn sửa điều kiện không biết sửa ở đâu. Tại file đó là file mẫu. Em còn biết để em áp dụng nhiều file khác nữa. Em cần 1 thuật toán để em hiểu Input, ouput và Điều kiện. để em chỉ cần thay Điều kiện là em sẽ áp dụng cho khác file khác
 
Thí dụ như Vùng Sheets("abc").Range("a6:e1000") kiểu như code bình thường đó. Chứ code của bác Em đọc không biết gì hết. muốn sửa điều kiện không biết sửa ở đâu. Tại file đó là file mẫu. Em còn biết để em áp dụng nhiều file khác nữa. Em cần 1 thuật toán để em hiểu Input, ouput và Điều kiện. để em chỉ cần thay Điều kiện là em sẽ áp dụng cho khác file khác
Nó tự nhận vùng mà bạn, không cần phải đưa địa chỉ vào dữ liệu nguồn trong trường hợp này.
Vùng điều kiện thì tôi đã chọn D2 rồi đó bạn.
Mã:
Format(Sheet4.Range("D2"), "yyyy-MMM-dd")
 
Thử với code sau nhé:

Mã:
Sub LocNgay_HLMT()
    With CreateObject("ADODB.Connection")
        .Open ("Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.Path & "\DLNguon.xlsx")
        Sheet4.Range("A6:E1000").ClearContents
        Sheet4.Range("A6").CopyFromRecordset .Execute("SELECT * FROM [DL$] WHERE NGAY >=#" & Format(Sheet4.Range("D2"), "yyyy-MMM-dd") & "#")
    End With

End Sub
Thực sự cảm ơn bác Hai lúa rất nhiều .Đây cũng không phải là lần đầu bác giúp em trả lời những thắc mắc.Do mới bập bẹ học lên ngay cả những điều nhỏ nhất em vẫn chưa hiểu hết .Mỗi một sự giải đáp của mọi người đều là một bài học cho em..Qua đây cũng cảm ơn GPX cảm ơn tất cả anh chị em trên diễn đàn đã cùng nhau trao đổi góp ý..!
Bài đã được tự động gộp:

Nó tự nhận vùng mà bạn, không cần phải đưa địa chỉ vào dữ liệu nguồn trong trường hợp này.
Vùng điều kiện thì tôi đã chọn D2 rồi đó bạn.
Mã:
Format(Sheet4.Range("D2"), "yyyy-MMM-dd")
Bác cho em hỏi..Đối với đoạn code trên vùng dữ liệu nguồn luôn phải để cùng với vùng dữ liệu dịch phải không ạ..?Trong trường hợp vùng dữ liệu nguồn luôn thay đổi vậy đoạn code phải thay đổi đường dẫn ra sao ạ?
 
Lần chỉnh sửa cuối:
Thí dụ như Vùng Sheets("abc").Range("a6:e1000") kiểu như code bình thường đó. Chứ code của bác Em đọc không biết gì hết. muốn sửa điều kiện không biết sửa ở đâu. Tại file đó là file mẫu. Em còn biết để em áp dụng nhiều file khác nữa. Em cần 1 thuật toán để em hiểu Input, ouput và Điều kiện. để em chỉ cần thay Điều kiện là em sẽ áp dụng cho khác file khác
Chào bạn nhờ sự giúp đỡ của mọi người mình đã hiểu vấn đề trong đoạn code của mình..Đối với câu truy vấn tham chiếu ngày tháng sử dụng dấu(#).Bạn thử sử dụng đoạn code của mình xem có áp dụng được cho công việc của bạn không..
Mã:
Sub TongHoploc()
'On Error GoTo PROC_ERR
    Dim cnn As Object, lsSQL As String, lrs As Object, Fname
    Dim Fso As Object, Link As String, shNameNguon, shNameDich, i As Long
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set cnn = CreateObject("ADODB.Connection")
    Set lrs = CreateObject("ADODB.Recordset")
    shNameNguon = Array("DL")
    shNameDich = Array("DLD")
    Application.ScreenUpdating = False

    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = True
        .Filters.Add "Microsoft Excel Files", "*.xls; *.xlsx; *.xlsb; *.xlsm", 1
        If .Show = -1 Then
            Link = .InitialFileName
        Else
            MsgBox "Ban da khong chon tong hop", vbInformation, "Thông Báo"
            Exit Sub
        End If
    
        For Each Fname In .SelectedItems
      
            With cnn
                If Val(Application.Version) < 12 Then
                    .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
                                      & "Data Source=" & Fname & ";Extended Properties=""Excel 8.0;HDR=No"";"
                Else
                    .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" _
                                      & "Data Source=" & Fname & ";Extended Properties=""Excel 12.0;HDR=No"";"
                End If
                .Open
        
            For i = 0 To UBound(shNameNguon)
      
                lsSQL = "SELECT f1,f2,f3,f4 FROM [" & shNameNguon(i) & "$B4:E65536] where f1>=#" & Sheets(shNameDich(i)).[D2] & "# and f1<=#" & Sheets(shNameDich(i)).[D3] & "# group by f1,f2,f3,f4"
                '
                lrs.Open lsSQL, cnn, 3, 1
                Sheets(shNameDich(i)).Range("A6:D12000").ClearContents
                Sheets(shNameDich(i)).Range("A60000").End(3).Offset(1, 0).CopyFromRecordset lrs
                lrs.Close
                 Next
            End With
        Next
    End With
              
                
'PROC_EXIT:
   ' On Error Resume Next
        
      
  
    Application.ScreenUpdating = True
    cnn.Close
    Set lrs = Nothing
    Set cnn = Nothing
   Exit Sub

    
PROC_ERR:
    MsgBox "Ket noi co loi xay ra:", vbCritical
   ' GoTo PROC_EXIT



End Sub
 

File đính kèm

  • SH.rar
    39.9 KB · Đọc: 8
Web KT
Back
Top Bottom