Bùi Thúy Thúy
Thành viên thường trực
- Tham gia
- 2/7/18
- Bài viết
- 289
- Được thích
- 38
Nhờ Anh sửa giúp Em để tô màu những ô đó ạ!Không!
Nếu chủ thớt hỏi thì có thể xem xét lại.
Option Explicit
Sub Kiemtra()
Dim Arr, J As Long, Dongcuoi As Long
Dim SRng As Range, eRng As Range, Cll As Range
Arr = Array(15, 16, 18, 19, 21, 22, 24, 25)
Dongcuoi = Range("A" & Rows.Count).End(xlUp).Row
For J = LBound(Arr) To UBound(Arr)
Set SRng = Range(Cells(9, Arr(J)), Cells(Dongcuoi, Arr(J)))
Select Case Arr(J)
Case 15, 18, 21, 24 To 25
Kiemtrangay SRng
Case 16, 19, 22
Kiemtragio SRng
End Select
Next J
End Sub
Sub Kiemtrangay(ByVal SRng As Range)
Dim Rng As Range, Cll As Range
Dim fYear As Long, eYear As Long
fYear = Year(Now()) - 4: eYear = Year(Now()) + 1
SRng.Interior.Pattern = xlNone
SRng.Font.Strikethrough = False
For Each Cll In SRng
If IsError(Cll) Then GoTo Tiep
If Cll <> Empty And Not IsDate(Cll) Then GoTo Tiep
If Cll <> Empty Then
If Year(Cll) <= fYear Then
If Year(Cll) <= eYear Then
Tiep:
If Rng Is Nothing Then
Set Rng = Cll
Else
Set Rng = Union(Rng, Cll)
End If
End If
End If
End If
Next
If Not Rng Is Nothing Then
Rng.Interior.Color = 7988676
Rng.Font.Strikethrough = True
End If
End Sub
Sub Kiemtragio(ByVal SRng As Range)
Dim Rng As Range, Cll As Range, DK As Boolean
Dim aTmp, TmpBD, TmpKT, J As Long
Dim GioBD As Double, GioKT As Double, FGio As Double, EGio As Double
Dim sTimeAm As Double, eTimeAM As Double, sTimePM As Double, eTimePM As Double
sTimeAm = 7 + 30 / 60: eTimeAM = 11 + 30 / 60
sTimePM = 13 + 30 / 60: eTimePM = 17
SRng.Interior.Pattern = xlNone
SRng.Font.Strikethrough = False
For Each Cll In SRng
DK = False
If IsError(Cll) Then
DK = True: GoTo Tiep
End If
If Cll <> Empty Then
aTmp = Split(Cll, "-")
If UBound(aTmp) < 1 Then
DK = True: GoTo Tiep
Else
TmpBD = Split(aTmp(0), "h")
TmpKT = Split(aTmp(1), "h")
'-----------------------------------------------
If UBound(TmpBD) >= 1 Then
GioBD = CLng(TmpBD(0)) + CLng(TmpBD(1)) / 60
'++++++++++++++++++++++++
If GioBD < eTimeAM Then
FGio = sTimeAm: EGio = eTimeAM
Else
FGio = sTimePM: EGio = eTimePM
End If
'+++++++++++++++++++++++++
If GioBD < FGio Then
DK = True: GoTo Tiep
End If
Else
DK = True: GoTo Tiep
End If
'---------------------------------------------------
If UBound(TmpKT) >= 1 Then
GioKT = CLng(TmpKT(0)) + CLng(TmpKT(1)) / 60
If GioKT > EGio Then
DK = True: GoTo Tiep
End If
Else
DK = True: GoTo Tiep
End If
'------------------------------------------
If GioKT - GioBD <= 0 Then
DK = True: GoTo Tiep
End If
End If
End If
Tiep:
If DK = True Then
If Rng Is Nothing Then
Set Rng = Cll
Else
Set Rng = Union(Rng, Cll)
End If
End If
Next
If Not Rng Is Nothing Then
Rng.Interior.Color = 13434879
Rng.Font.Strikethrough = True
End If
End Sub
hi dài nhưng mà vẫn ok, hi....là được bạn ạ!Anh @ befaint ới em đã viết được cái Code kinh khủng này. Nhìn thấy khiếp quá đi
PHP:Option Explicit Sub Kiemtra() Dim Arr, J As Long, Dongcuoi As Long Dim sRng As Range, eRng As Range, Cll As Range Arr = Array(15, 16, 18, 19, 21, 22, 24, 25) Dongcuoi = Range("A" & Rows.Count).End(xlUp).Row For J = LBound(Arr) To UBound(Arr) Set sRng = Range(Cells(9, Arr(J)), Cells(Dongcuoi, Arr(J))) Select Case Arr(J) Case 15, 18, 21, 24 To 25 Kiemtrangay sRng Case 16, 19, 22 Kiemtragio sRng End Select Next J End Sub Sub Kiemtrangay(ByVal sRng As Range) Dim Rng As Range, Cll As Range Dim fYear As Long, eYear As Long fYear = Year(Now()) - 4: eYear = Year(Now()) + 1 sRng.Interior.Pattern = xlNone sRng.Font.Strikethrough = False For Each Cll In sRng If IsError(Cll) Then GoTo Tiep If Cll <> Empty And Not IsDate(Cll) Then GoTo Tiep If Cll <> Empty Then If Year(Cll) <= fYear Then If Year(Cll) >= eYear Then Tiep: If Rng Is Nothing Then Set Rng = Cll Else Set Rng = Union(Rng, Cll) End If End If End If End If Next If Not Rng Is Nothing Then Rng.Interior.Color = 7988676 Rng.Font.Strikethrough = True End If End Sub Sub Kiemtragio(ByVal sRng As Range) Dim Rng As Range, Cll As Range, DK As Boolean Dim aTmp, TmpBD, TmpKT, J As Long Dim GioBD As Double, GioKT As Double, FGio As Double, EGio As Double Dim sTimeAm As Double, eTimeAM As Double, sTimePM As Double, eTimePM As Double sTimeAm = 7 + 30 / 60: eTimeAM = 11 + 30 / 60 sTimePM = 13 + 30 / 60: eTimePM = 17 Set sRng = Range("P9:P18") sRng.Interior.Pattern = xlNone sRng.Font.Strikethrough = False For Each Cll In sRng DK = False If IsError(Cll) Then DK = True: GoTo Tiep End If If Cll <> Empty Then aTmp = Split(Cll, "-") If UBound(aTmp) < 1 Then DK = True: GoTo Tiep Else TmpBD = Split(aTmp(0), "h") TmpKT = Split(aTmp(1), "h") '----------------------------------------------- If UBound(TmpBD) >= 1 Then GioBD = CLng(TmpBD(0)) + CLng(TmpBD(1)) / 60 '++++++++++++++++++++++++ If GioBD < eTimeAM Then FGio = sTimeAm: EGio = eTimeAM Else FGio = sTimePM: EGio = eTimePM End If '+++++++++++++++++++++++++ If GioBD < FGio Then DK = True: GoTo Tiep End If Else DK = True: GoTo Tiep End If '--------------------------------------------------- If UBound(TmpKT) >= 1 Then GioKT = CLng(TmpKT(0)) + CLng(TmpKT(1)) / 60 If GioKT > EGio Then DK = True: GoTo Tiep End If Else DK = True: GoTo Tiep End If '------------------------------------------ If GioKT - GioBD <= 0 Then DK = True: GoTo Tiep End If End If End If Tiep: If DK = True Then If Rng Is Nothing Then Set Rng = Cll Else Set Rng = Union(Rng, Cll) End If End If Next If Not Rng Is Nothing Then Rng.Interior.Color = 13434879 Rng.Font.Strikethrough = True End If End Sub
@Bùi Thúy Thúy Test thử xem có cái gì nó không ưng cái bụng không nha
E cám ơn ạ!hi chúc chị buổi tối vui vẻ!Bạn xóa hộ cái Set sRng = Range("P918") trong Code Kiemtragio. Test xong quên chứ xóa
Đây là code ngắn gọn (3 trong 1), nó xác định 3 kiểu định dạng (chọn vùng cần rồi nhấn nút).Trong vùng kẻ khung cho E xin code để kiểm tra vùng từ cột D đến cột I với điều kiện :
Nếu ô nào không có giá trị ngày tháng và không phải là ô trống thì tô màu
(Kết quả: Trên vùng là các ô tô màu sau khi đã kiểm tra)
View attachment 200518
Mong sự giúp đỡ của Anh Chị và các Bạn
Sub DanhDau()
Dim Vung As Range
Set Vung = Selection
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
'Só, ngày
Vung.SpecialCells(xlCellTypeConstants).Interior.ColorIndex = 33
'Hàm
Vung.SpecialCells(xlCellTypeFormulas).Interior.ColorIndex = 27
'Text
Vung.SpecialCells(xlCellTypeConstants, 2).Interior.ColorIndex = 40
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Vâng E cám ơn Thầy, Thầy có thể chỉnh giúp Em một chút xíu nữa là có vùng chọn (tức là chỉ chọn trong vùng chọn đó)Đây là code ngắn gọn (3 trong 1), nó xác định 3 kiểu định dạng (chọn vùng cần rồi nhấn nút).
- Nếu là số và ngày tháng tô màu xanh.
- Nếu là hàm tô màu vàng.
- Nếu là Text tô màu hường.
Mã:Sub DanhDau() Application.ScreenUpdating = False Application.DisplayAlerts = False On Error Resume Next Dim Vung As Range Set Vung = Selection 'Só, ngày Vung.SpecialCells(xlCellTypeConstants).Interior.ColorIndex = 33 'Hàm Vung.SpecialCells(xlCellTypeFormulas).Interior.ColorIndex = 27 'Text Vung.SpecialCells(xlCellTypeConstants, 2).Interior.ColorIndex = 40 Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
View attachment 200612
Mở Excel, nhấn Alt+F11 (vào VBE) rồi thay dòng này:Vâng E cám ơn Thầy, Thầy có thể chỉnh giúp Em một chút xíu nữa là có vùng chọn (tức là chỉ chọn trong vùng chọn đó)
Vùng dữ liệu của e nhìu, E chỉ muốn kiểm tra tròng vùng đó!hi
Muốn áp dụng cho vùng khác thì thay chỗ D4:I17, nếu khác sheet thì thay chỗ Sheet1.Vâng Có thể như thế này và chọn vùng được không Thầy, thì mỗi lần chọn k phải sửa trong Code
View attachment 200614
Dạ vâng, E thấy code Chị PacificPR viết giúp E ở bài #4 có vùng chọn hi, E vừa thêm phần đoạn vùng chọn đó vào code của Thầy nhưng k đượcMuốn áp dụng cho vùng khác thì thay chỗ D4:I17, nếu khác sheet thì thay chỗ Sheet1.
hiỦa, sao mình nhanh quá vậy? Mình nhờ 'chị' ở trên ấy.
Thì code bài 30 là chọn vùng bất kỳ tôi có nêu rõ rồi mà (chọn vùng cần rồi nhấn nút).Dạ vâng, E thấy code Chị PacificPR viết giúp E ở bài #4 có vùng chọn hi, E vừa thêm phần đoạn vùng chọn đó vào code của Thầy nhưng k được
E cám ơn Thầy nhiều, chúc Thầy buổi tối vui vẻ!
Vâng E cám ơn Thầy, Thầy có thể chỉnh giúp Em một chút xíu nữa là có vùng chọn (tức là chỉ chọn trong vùng chọn đó)
Vùng dữ liệu của e nhìu, E chỉ muốn kiểm tra tròng vùng đó!hi
Đây là code ngắn gọn (3 trong 1), nó xác định 3 kiểu định dạng (chọn vùng cần rồi nhấn nút).
- Nếu là số và ngày tháng tô màu xanh.
- Nếu là hàm tô màu vàng.
- Nếu là Text tô màu hường.
Mã:Sub DanhDau() Dim Vung As Range Set Vung = Selection Application.ScreenUpdating = False Application.DisplayAlerts = False On Error Resume Next 'Só, ngày Vung.SpecialCells(xlCellTypeConstants).Interior.ColorIndex = 33 'Hàm Vung.SpecialCells(xlCellTypeFormulas).Interior.ColorIndex = 27 'Text Vung.SpecialCells(xlCellTypeConstants, 2).Interior.ColorIndex = 40 Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
View attachment 200612
E vừa test lại đoạn code của Thầy, Thầy có thể giúp E chút nữa là: Tô ngày tháng mà bị lỗi, và giá trị các ô bị lỗi còn các cái khác đều không tô màu
Code của chị khá là ổn đúng ý E, giờ mà tô màu được các ô bị lỗi nữa thì tuyệt, chị có thể sửa lại giúp E đoạn code này để tô màu ô bị lỗi được K ạ!Tiện nhất là Bạn dự file demo gần gần với file thực cho dễ. Mà hình như cái này là kiểm tra ngày trong HSQLCL thì phải
PHP:Sub BoiMau() Dim sRng As Range, Rng As Range, Cll As Range Dim N As Long, Str As String, Str1 As String Str = "Em da chon duoc ": Str1 = " o. Lam gi nua thi tuy y nha Chi nha" On Error GoTo Thoat Set sRng = Application.InputBox(Prompt:="Chon vung du lieu ", Title:="Du lieu dau vao", Type:=8) sRng.Interior.Pattern = xlNone For Each Cll In sRng If IsError(Cll) Then GoTo Tiep If Cll <> Empty And Not IsDate(Cll) Then GoTo Tiep If Cll <> Empty Then If Year(Cll) = 1900 Then Tiep: N = N + 1 If Rng Is Nothing Then Set Rng = Cll Else Set Rng = Union(Rng, Cll) End If End If End If Next Rng.Select MsgBox Str & ": " & N & Str1 Thoat: End Sub
Sao em hoang mang quá vậy. Đọc kỹ lại thì bài 25 không phải là yêu cầu của chủ TopicBài đã được tự động gộp:
Code của chị khá là ổn đúng ý E, giờ mà tô màu được các ô bị lỗi nữa thì tuyệt, chị có thể sửa lại giúp E đoạn code này để tô màu ô bị lỗi được K ạ!
E cám ơn