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
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ớ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(?)
Thử codeXin 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 ạ.
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,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,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
Con chào Thầy ạ,Dữ liệu gốc thế nào mà "không dùng mảng"?
Dòng kẻ thì có thể chấp nhận (Merge Cells thì không nên).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.