Tìm ngày làm việc không có trong dẫy ngày (2 người xem)

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

Cá ngừ F1

( ͡° ͜ʖ ͡°)
Thành viên BQT
Moderator
Tham gia
1/1/08
Bài viết
2,580
Được thích
3,723
Donate (Momo)
Donate
Giới tính
Nam
Nghề nghiệp
Quan hệ.. và quan hệ..
Em chào các anh/chị trong diễn đàn.
Em có 1 dãy gồm nhiều ngày (có cả ngày trùng nhau).
Em có câu hỏi như sau (chắc phải dùng đến VBA): Em muốn tìm ra những ngày làm việc mà không có trong dẫy ngày này (tính đến cả ngày hiện tại - nếu trong dữ liệu chưa có).
Mong anh/chị giúp đỡ.
Em cảm ơn!
 

File đính kèm

muốn tìm ra những ngày làm việc mà không có trong dẫy ngày này (tính đến cả ngày hiện tại - nếu trong dữ liệu chưa có).
Bạn nói thêm ngày "chốt đầu, chốt cuối" là như thế nào? chứ còn tìm ngày không có trong dãy ngày thì nhiều vô kể.
 
Upvote 0
Bạn nói thêm ngày "chốt đầu, chốt cuối" là như thế nào? chứ còn tìm ngày không có trong dãy ngày thì nhiều vô kể.
Chốt đầu (Min của dẫy), chốt cuối (Max của dẫy) đó bạn. Trường hợp Max trong dẫy ngày < ngày hiện tại thì lấy ngày hiện tại.
 
Upvote 0

File đính kèm

Upvote 0
Em chào các anh/chị trong diễn đàn.
Em có 1 dãy gồm nhiều ngày (có cả ngày trùng nhau).
Em có câu hỏi như sau (chắc phải dùng đến VBA): Em muốn tìm ra những ngày làm việc mà không có trong dẫy ngày này (tính đến cả ngày hiện tại - nếu trong dữ liệu chưa có).
Mong anh/chị giúp đỡ.
Em cảm ơn!
Ngày làm việc từ thứ Hai đến thứ Sáu phải không?
Sao GV thứ Bảy vẫn dạy bình thường ta?
Chạy cái này coi sao nhé:
PHP:
Public Sub GPE()
Dim Dic As Object, sArr(), dArr(), I As Long, K As Long, eDate As Long, fDate As Long
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Range([A2], [A2].End(xlDown)).Value2
ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
fDate = sArr(1, 1)
eDate = Date
For I = 1 To UBound(sArr, 1)
    If Not Dic.Exists(sArr(I, 1)) Then Dic.Add sArr(I, 1), Empty
Next I
For I = fDate To eDate
    If Weekday(I, 2) < 6 Then
        If Not Dic.Exists(I) Then
            Dic.Add I, Empty
            K = K + 1
            dArr(K, 1) = I
        End If
    End If
Next I
If K Then
    [C:C].NumberFormat = "dd/mm/yyyy"
    [C5].Resize(K) = dArr
End If
Set Dic = Nothing
End Sub
 
Upvote 0
Ngày làm việc từ thứ Hai đến thứ Sáu phải không?
Sao GV thứ Bảy vẫn dạy bình thường ta?
Chạy cái này coi sao nhé:
PHP:
Public Sub GPE()
Dim Dic As Object, sArr(), dArr(), I As Long, K As Long, eDate As Long, fDate As Long
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Range([A2], [A2].End(xlDown)).Value2
ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
fDate = sArr(1, 1)
eDate = Date
For I = 1 To UBound(sArr, 1)
    If Not Dic.Exists(sArr(I, 1)) Then Dic.Add sArr(I, 1), Empty
Next I
For I = fDate To eDate
    If Weekday(I, 2) < 6 Then
        If Not Dic.Exists(I) Then
            Dic.Add I, Empty
            K = K + 1
            dArr(K, 1) = I
        End If
    End If
Next I
If K Then
    [C:C].NumberFormat = "dd/mm/yyyy"
    [C5].Resize(K) = dArr
End If
Set Dic = Nothing
End Sub
Uả Add vô chi vậy ta?
PHP:
If Weekday(I, 2) < 6 Then
        If Not Dic.Exists(I) Then
            Dic.Add I, Empty
            K = K + 1
            dArr(K, 1) = I
        End If
    End If
 
Upvote 0
Ngày làm việc từ thứ Hai đến thứ Sáu phải không?
Sao GV thứ Bảy vẫn dạy bình thường ta?
Chạy cái này coi sao nhé:
PHP:
Public Sub GPE()
Dim Dic As Object, sArr(), dArr(), I As Long, K As Long, eDate As Long, fDate As Long
Set Dic = CreateObject("Scripting.Dictionary")
sArr = Range([A2], [A2].End(xlDown)).Value2
ReDim dArr(1 To UBound(sArr, 1), 1 To 1)
fDate = sArr(1, 1)
eDate = Date
For I = 1 To UBound(sArr, 1)
    If Not Dic.Exists(sArr(I, 1)) Then Dic.Add sArr(I, 1), Empty
Next I
For I = fDate To eDate
    If Weekday(I, 2) < 6 Then
        If Not Dic.Exists(I) Then
            Dic.Add I, Empty
            K = K + 1
            dArr(K, 1) = I
        End If
    End If
Next I
If K Then
    [C:C].NumberFormat = "dd/mm/yyyy"
    [C5].Resize(K) = dArr
End If
Set Dic = Nothing
End Sub

có cái gì đó không ổn anh BaTe vì dữ liệu max tới 31/10/2014 nhưng code của anh chạy ra tới ngày 5/11/2014
 
Upvote 0
Em chào các anh/chị trong diễn đàn.
Em có 1 dãy gồm nhiều ngày (có cả ngày trùng nhau).
Em có câu hỏi như sau (chắc phải dùng đến VBA): Em muốn tìm ra những ngày làm việc mà không có trong dẫy ngày này (tính đến cả ngày hiện tại - nếu trong dữ liệu chưa có).
Mong anh/chị giúp đỡ.
Em cảm ơn!
PHP:
Sub TimNgay()
Dim data(), i&, NgayMin&, NgayMax&
NgayMin = Application.Min(Range([A2], [A65536].End(3)))
NgayMax = Date
data = Range([A2], [A65536].End(3)).Value
With CreateObject("scripting.dictionary")
   For i = 1 To UBound(data)
      .Item(data(i, 1)) = ""
   Next
   For i = NgayMin To NgayMax
      If Not .exists(i) Then
         If Weekday(i) < 7 Then
            If Weekday(i) > 1 Then
               MsgBox Format(i, "dd-mmm-yy")
            End If
         End If
      End If
   Next
End With
End Sub
 
Upvote 0
Code của bạn Phi đang thiếu một số ngày (chắc do không tính đến ngày hiện tại).
Code của thầy BaTê ngọt xớt ạ.
Tuy nhiên, nếu bỏ qua cả ngày nghỉ theo ÂM LỊCH trùng vào ngày đi làm theo DƯƠNG LỊCH nữa thì sao anh/chị nhỉ?
 
Upvote 0
Code của bạn Phi đang thiếu một số ngày (chắc do không tính đến ngày hiện tại).
Code của thầy BaTê ngọt xớt ạ.
Tuy nhiên, nếu bỏ qua cả ngày nghỉ theo ÂM LỊCH trùng vào ngày đi làm theo DƯƠNG LỊCH nữa thì sao anh/chị nhỉ?
Tạo thêm 1 bảng ngày nghỉ hàng năm: âm lịch, dương lịch. Khi nạp vào Dic thì nạp luôn cái đống đó vào là được rồi.
 
Upvote 0
PHP:
Sub TimNgay()
Dim data(), i&, NgayMin&, NgayMax&
NgayMin = Application.Min(Range([A2], [A65536].End(3)))
NgayMax = Date
data = Range([A2], [A65536].End(3)).Value
With CreateObject("scripting.dictionary")
   For i = 1 To UBound(data)
      .Item(data(i, 1)) = ""
   Next
   For i = NgayMin To NgayMax
      If Not .exists(i) Then
         If Weekday(i) < 7 Then
            If Weekday(i) > 1 Then
               MsgBox Format(i, "dd-mmm-yy")
            End If
         End If
      End If
   Next
End With
End Sub
Chỗ NgayMax của a Hải e xin sửa thế này:
Mã:
NgayMax = Application.Max(Range([A2], [A65536].End(3)), Date)
Vì có thể trong dẫy có ngày lớn hơn ngày hiện tại.
 
Upvote 0
Uả Add vô chi vậy ta?
PHP:
If Weekday(I, 2) < 6 Then
        If Not Dic.Exists(I) Then
            Dic.Add I, Empty
            K = K + 1
            dArr(K, 1) = I
        End If
    End If

Có Dic-To mà hổng "Ẹc" thì để làm gì.
Nếu hổng chịu "Ẹc" thì bỏ có sao đâu.
Thêm cái chuyện "chưa chắc ngày nhỏ nhất ở dòng đầu, Ngày lớn nhất là Today()".
Vấp "trẹo giò" thiệt ta.
Hic! Dữ liệu gì kỳ!
----------------
có cái gì đó không ổn anh BaTe vì dữ liệu max tới 31/10/2014 nhưng code của anh chạy ra tới ngày 5/11/2014
Tui đọc cái này:
Em muốn tìm ra những ngày làm việc mà không có trong dẫy ngày này (tính đến cả ngày hiện tại - nếu trong dữ liệu chưa có).
 
Lần chỉnh sửa cuối:
Upvote 0
PHP:
Sub TimNgay()
Dim data(), i&, NgayMin&, NgayMax&
NgayMin = Application.Min(Range([A2], [A65536].End(3)))
NgayMax = Date
data = Range([A2], [A65536].End(3)).Value
With CreateObject("scripting.dictionary")
   For i = 1 To UBound(data)
      .Item(data(i, 1)) = ""
   Next
   For i = NgayMin To NgayMax
      If Not .exists(i) Then
         If Weekday(i) < 7 Then
            If Weekday(i) > 1 Then
               MsgBox Format(i, "dd-mmm-yy")
            End If
         End If
      End If
   Next
End With
End Sub
Em dùng code của a Hải vào File thì bị báo lỗi này, Lỗi chỗ Format(i, "dd-mmm-yy") chưa biết nguyên nhân ạ? Bỏ Format thì chạy.
 

File đính kèm

  • Fail.jpg
    Fail.jpg
    33.7 KB · Đọc: 17
Upvote 0
PHP:
Sub TimNgay()
Dim data(), i&, NgayMin&, NgayMax&
NgayMin = Application.Min(Range([A2], [A65536].End(3)))
NgayMax = Date
data = Range([A2], [A65536].End(3)).Value
With CreateObject("scripting.dictionary")
   For i = 1 To UBound(data)
      .Item(data(i, 1)) = ""
   Next
   For i = NgayMin To NgayMax
      If Not .exists(i) Then
         If Weekday(i) < 7 Then
            If Weekday(i) > 1 Then
               MsgBox Format(i, "dd-mmm-yy")
            End If
         End If
      End If
   Next
End With
End Sub
Chỗ màu đỏ người ta hay viết vầy: If Weekday(i, 2) < 6 Then
Ẹc... Ẹc...
(cảm giác rằng bài này vẫn có thể dùng công thức được)
 
Upvote 0
Chỗ màu đỏ người ta hay viết vầy: If Weekday(i, 2) < 6 Then
Ẹc... Ẹc...
(cảm giác rằng bài này vẫn có thể dùng công thức được)
Dạ, e muốn hỏi thêm về lỗi của bài #13, hay nó xung đột với biến nào đó nhỉ? Khi em xóa hết dữ liệu chỉ để lại cột ngày thôi thì ko báo lỗi nữa +-+-+-+
ps. E đag online bằng đt nên ko up đc file
 
Lần chỉnh sửa cuối:
Upvote 0
Chỗ màu đỏ người ta hay viết vầy: If Weekday(i, 2) < 6 Then
Ẹc... Ẹc...
(cảm giác rằng bài này vẫn có thể dùng công thức được)
Dạ, e muốn hỏi thêm về lỗi của bài #13, hay nó xung đột với biến nào đó nhỉ? Khi em xóa hết dữ liệu chỉ để lại cột ngày thôi thì ko báo lỗi nữa +-+-+-+
 
Upvote 0

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

Back
Top Bottom