Tìm ngày thiếu theo danh sách cho trước và thêm dòng

Liên hệ QC

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
Xin chào các bạn,
Như tiêu đề tôi đã nêu nhờ các bạn giúp cho đoạn code làm việc với range(không dùng mảng) để xử lý trường hợp trong file gửi kèm với ạ.
(đính kèm lại file)
 

File đính kèm

Lần chỉnh sửa cuối:
Mới làm được bước I: Tìm những ngày còn thiếu:
PHP:
 Sub CacNgayThieu()
 Dim Rng As Range, sRng As Range, Cls As Range, WF As Object
 Dim Dat As Date
 Dim MyFormat As String
 
 With Sheet2
    Set Rng = .Range(.[A1], .[A1].End(xlDown))
    MyFormat = Rng.NumberFormat
    Rng.NumberFormat = "MM/DD/yyyy"
 End With
 Sheet1.Select
 For Each Cls In Range([A1], [A65500].End(xlUp))
    If Cls.Value <> "" Then
        Dat = Format(Cls.Value, "MM/DD/yyyy")
        Set sRng = Rng.Find(Dat, , xlValues, xlWhole)
        If sRng Is Nothing Then Cls.Interior.ColorIndex = 38
    End If
 Next Cls
 Rng.NumberFormat = MyFormat
End Sub

Mà kết quả là tất tần tật ngày là thiếu(?)
 
Upvote 0
Mới làm được bước I: Tìm những ngày còn thiếu:
PHP:
Sub CacNgayThieu()
Dim Rng As Range, sRng As Range, Cls As Range, WF As Object
Dim Dat As Date
Dim MyFormat As String

With Sheet2
    Set Rng = .Range(.[A1], .[A1].End(xlDown))
    MyFormat = Rng.NumberFormat
    Rng.NumberFormat = "MM/DD/yyyy"
End With
Sheet1.Select
For Each Cls In Range([A1], [A65500].End(xlUp))
    If Cls.Value <> "" Then
        Dat = Format(Cls.Value, "MM/DD/yyyy")
        Set sRng = Rng.Find(Dat, , xlValues, xlWhole)
        If sRng Is Nothing Then Cls.Interior.ColorIndex = 38
    End If
Next Cls
Rng.NumberFormat = MyFormat
End Sub

Mà kết quả là tất tần tật ngày là thiếu(?)

Con chào Bác SA
Cảm ơn đã quan tâm & giúp đỡ con ạ. Dạ vâng kết quả là tìm những ngày thiếu trong danh sách tại cột A1:A35 của sheet2 sau đó điền theo tứ tự từ ngày bé đến ngày lớn vào cột A và thêm mỗi ngày 2 dòng trống+1 dòng ngày vừa tìm được (tổng cộng tất cả 3 dòng được thêm vào cho các ngày thiếu tìm được để ra kết quả như Sheet3 đó ạ.
Chúc Bác ngày mới vui khỏe ạ.
OT
 
Upvote 0
Xin chào các bạn,
Như tiêu đề tôi đã nêu nhờ các bạn giúp cho đoạn code làm việc với range(không dùng mảng) để xử lý trường hợp trong file gửi kèm với ạ.
Thử code
Mã:
Sub LinhTinh()
  Dim sArr(), Ngay, Ngay0
  Dim i&, n&, eRow&, fR&, sR&
 
  Ngay0 = DateValue("2100/1/31")
  With Sheets("Sheet2")
    sArr = .Range("A1", .Range("A1000000").End(xlUp)).Value
    fR = LBound(sArr): sR = UBound(sArr)
  End With
  Application.ScreenUpdating = False
  With Sheets("Sheet1")
    eRow = .Range("A1000000").End(xlUp).Row
    Do
      i = i + 1
      Ngay = .Range("A" & i).Value
      If Len(Ngay) > 0 Then
        ik = i
        For n = fR To sR
          If sArr(n, 1) < Ngay Then
            .Range("A" & i).Resize(3).EntireRow.Insert
            .Range("A" & i) = sArr(n, 1)
            i = i + 3
          ElseIf sArr(n, 1) = Ngay Then
            fR = n + 1
            Exit For
          End If
        Next n
        If n > sR Then Exit Do
        eRow = .Range("A1000000").End(xlUp).Row
        If i = eRow Then
          eRow = eRow + 1
          .Range("A" & eRow) = Ngay0
        End If
      End If
    Loop Until i = eRow
    eRow = .Range("A1000000").End(xlUp).Row
    If .Range("A" & eRow) = Ngay0 Then Range("A" & eRow).ClearContents
  End With
  Application.ScreenUpdating = True
End Sub
 
Upvote 0
Thử code
Mã:
Sub LinhTinh()
  Dim sArr(), Ngay, Ngay0
  Dim i&, n&, eRow&, fR&, sR&

  Ngay0 = DateValue("2100/1/31")
  With Sheets("Sheet2")
    sArr = .Range("A1", .Range("A1000000").End(xlUp)).Value
    fR = LBound(sArr): sR = UBound(sArr)
  End With
  Application.ScreenUpdating = False
  With Sheets("Sheet1")
    eRow = .Range("A1000000").End(xlUp).Row
    Do
      i = i + 1
      Ngay = .Range("A" & i).Value
      If Len(Ngay) > 0 Then
        ik = i
        For n = fR To sR
          If sArr(n, 1) < Ngay Then
            .Range("A" & i).Resize(3).EntireRow.Insert
            .Range("A" & i) = sArr(n, 1)
            i = i + 3
          ElseIf sArr(n, 1) = Ngay Then
            fR = n + 1
            Exit For
          End If
        Next n
        If n > sR Then Exit Do
        eRow = .Range("A1000000").End(xlUp).Row
        If i = eRow Then
          eRow = eRow + 1
          .Range("A" & eRow) = Ngay0
        End If
      End If
    Loop Until i = eRow
    eRow = .Range("A1000000").End(xlUp).Row
    If .Range("A" & eRow) = Ngay0 Then Range("A" & eRow).ClearContents
  End With
  Application.ScreenUpdating = True
End Sub
Xin chào Bác Hiếu,
Cảm ơn Bác Hiếu đã giúp con, code chạy kết quả đúng ý
Thử code
Mã:
Sub LinhTinh()
  Dim sArr(), Ngay, Ngay0
  Dim i&, n&, eRow&, fR&, sR&

  Ngay0 = DateValue("2100/1/31")
  With Sheets("Sheet2")
    sArr = .Range("A1", .Range("A1000000").End(xlUp)).Value
    fR = LBound(sArr): sR = UBound(sArr)
  End With
  Application.ScreenUpdating = False
  With Sheets("Sheet1")
    eRow = .Range("A1000000").End(xlUp).Row
    Do
      i = i + 1
      Ngay = .Range("A" & i).Value
      If Len(Ngay) > 0 Then
        ik = i
        For n = fR To sR
          If sArr(n, 1) < Ngay Then
            .Range("A" & i).Resize(3).EntireRow.Insert
            .Range("A" & i) = sArr(n, 1)
            i = i + 3
          ElseIf sArr(n, 1) = Ngay Then
            fR = n + 1
            Exit For
          End If
        Next n
        If n > sR Then Exit Do
        eRow = .Range("A1000000").End(xlUp).Row
        If i = eRow Then
          eRow = eRow + 1
          .Range("A" & eRow) = Ngay0
        End If
      End If
    Loop Until i = eRow
    eRow = .Range("A1000000").End(xlUp).Row
    If .Range("A" & eRow) = Ngay0 Then Range("A" & eRow).ClearContents
  End With
  Application.ScreenUpdating = True
End Sub
Xin chào Bác Hiếu,
Cảm ơn Bác đã quan tâm và giúp đỡ con ạ.Code trên chạy kết quả đúng mong muốn của con rồi.
 
Upvote 0
Dữ liệu gốc thế nào mà "không dùng mảng"?
Con chào Thầy ạ,
Cảm ơn Thầy đã quan tâm, dữ liệu gốc nó như thế này Thầy ạ.
Nó có định dạng màu sắc và dòng kẻ nên con nghĩ không thể dùng mảng được.
 

File đính kèm

Upvote 0
Con chào Thầy ạ,
Cảm ơn Thầy đã quan tâm, dữ liệu gốc nó như thế này Thầy ạ.
Nó có định dạng màu sắc và dòng kẻ nên con nghĩ không thể dùng mảng được.
Dòng kẻ thì có thể chấp nhận (Merge Cells thì không nên).
Còn màu sắc giữ nguyên thì xem code bài #4, kết quả 1 sheet Excel của bạn màu mè giống 1 tiệc cưới, và không ai hiểu màu gì thể hiện chuỵện gì, khi in báo cáo thì cần máy in màu.
 
Upvote 0
Dòng kẻ thì có thể chấp nhận (Merge Cells thì không nên).
Còn màu sắc giữ nguyên thì xem code bài #4, kết quả 1 sheet Excel của bạn màu mè giống 1 tiệc cưới, và không ai hiểu màu gì thể hiện chuỵện gì, khi in báo cáo thì cần máy in màu.

Con chào Thầy,
Dạ màu ở đây là đánh dấu cho dễ nhìn Thầy ạ, khi in ra thì đen trắng ạ.
Merge theo form mẫu khách hàng gửi Thầy ạ, nhưng hiện tại file con gửi lên thì con chưa xử lý được mục này.
Cảm ơn Thầy đã góp ý cho con.
 
Upvote 0
Web KT

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

Back
Top Bottom