Bùi Thúy Thúy
Thành viên thường trực




- Tham gia
- 2/7/18
- Bài viết
- 290
- Được thích
- 38
Bạn cho hỏi ô ghi 1/2/1900 tại sao không phải ngày tháng vậy? tương tự ô 3/20/1900 tại sao không phải ngày tháng? theo excel hiểu 3/20/1900 chính là ngày 20 tháng 3 năm 1900 mà.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
Vâng, e để định dạng ngày tháng trong các ô đó, theo E hiểu những ô như 3/20/190 là ô bị lỗi ( E để định dạng ngày tháng, nhưng đó là ô E điền dạng số học như số 30 hay số gì đó mà không phải điền dữ liệu kiểu ngày tháng" 02/03/2016")Bạn cho hỏi ô ghi 1/2/1900 tại sao không phải ngày tháng vậy? tương tự ô 3/20/1900 tại sao không phải ngày tháng? theo excel hiểu 3/20/1900 chính là ngày 20 tháng 3 năm 1900 mà.
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ảiVâng, e để định dạng ngày tháng trong các ô đó, theo E hiểu những ô như 3/20/190 là ô bị lỗi ( E để định dạng ngày tháng, nhưng đó là ô E điền dạng số học như số 30 hay số gì đó mà không phải điền dữ liệu kiểu ngày tháng" 02/03/2016")
E hiểu như vậy có đúng không Thầy? mục đích của E là để kiểm tra dữ liệu, những ô nào vô tình điền dữ liệu không đúng kiểu ngày/tháng/năm (điền con số nào đó: số 20 chả hạn) sẽ bị tô màu để phát hiện và sửa lại
E cám ơn Thầy!
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
Thế thì bạn xài conditional formatting, tô màu những ô có giá trị< 36000 ( tương đương với ngày 24/7/1998) , vốn dĩ ngày tháng cũng là một con số với số 1tương đương là ngày 1/1/1900, bạn xem cơ sở dữ liệu của bạn cần ngày cũ nhất là bao nhiêu rồi chọn giá trị đó bỏ vào conditional formatting là được, ko cần xài code chiVâng, e để định dạng ngày tháng trong các ô đó, theo E hiểu những ô như 3/20/190 là ô bị lỗi ( E để định dạng ngày tháng, nhưng đó là ô E điền dạng số học như số 30 hay số gì đó mà không phải điền dữ liệu kiểu ngày tháng" 02/03/2016")
E hiểu như vậy có đúng không Thầy? mục đích của E là để kiểm tra dữ liệu, những ô nào vô tình điền dữ liệu không đúng kiểu ngày/tháng/năm (điền con số nào đó: số 20 chả hạn) sẽ bị tô màu để phát hiện và sửa lại
E cám ơn Thầy!
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
Vâng E cám ơn, có file mà chị E đính kèm ờ bài 1 Chị ạ!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
E có chạy code Chị ạ, có tô màu như hình e gửi nhưng khi chọn chuột ra ngoài lại mất (hình 1 + hình 2)Với cách này là có thể kiểm tra được dữ liệu cả những dạng khác như định dạng ngày tháng, định dạng date và định dạng text đúng không anh !
Mình nghĩ đưa nó vào hàm xác nhận là được. Đó là nghĩ thôi nha. Còn không biết làm đâuVới cách này là có thể kiểm tra được dữ liệu cả những dạng khác như định dạng ngày tháng, định dạng date và định dạng text đúng không anh !
À mình nói trên là cái file mẫu nó gần giống với file bạn ý làm thực tế để mọi người đỡ phải sửa đi sửa lại. Do vậy mình phải đưa cái InputBox: Thích chọn vùng nào thì chọnVâng E cám ơn, có file mà chị E đính kèm ờ bài 1 Chị ạ!
Bài đã được tự động gộp:
E có chạy code Chị ạ, có tô màu như hình e gửi nhưng khi chọn chuột ra ngoài lại mất (hình 1 + hình 2)View attachment 200554View attachment 200555 ngay Chị ạ!, Chị xem giúp lại E bôi bàu nào đỏ để khi nhấn chuột ra ngoài không bị mất được không ạ!
Úi Thầy ơi. Kiểu nầy Thầy sắp la em cái gì nữa đâyMình thì không biết làm mà cũng không biết nghĩ luôn.
Cái đó mới là chọn ô thôi chứ có tô màu gì đâu: Rng.Select màVâng E cám ơn, có file mà chị E đính kèm ờ bài 1 Chị ạ!
Bài đã được tự động gộp:
E có chạy code Chị ạ, có tô màu như hình e gửi nhưng khi chọn chuột ra ngoài lại mất (hình 1 + hình 2)View attachment 200554View attachment 200555 ngay Chị ạ!, Chị xem giúp lại E bôi bàu nào đỏ để khi nhấn chuột ra ngoài không bị mất được không ạ!
Bạn chưa biết tôi. Tôi rất lấy làm buồn khi có ngừoi gọi mình là cao thủ.Cao thủ rồi thì anh làm đại cũng được ấy mà nên vậy anh ạ
Vâng E cám ơn, có file mà chị E đính kèm ờ bài 1 Chị ạ!
Bài đã được tự động gộp:
E có chạy code Chị ạ, có tô màu như hình e gửi nhưng khi chọn chuột ra ngoài lại mất (hình 1 + hình 2)View attachment 200554View attachment 200555 ngay Chị ạ!, Chị xem giúp lại E bôi bàu nào đỏ để khi nhấn chuột ra ngoài không bị mất được không ạ!
Đây E đưa file lên Chị giúp E ạ!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
If Year(Cll) = 1900 Then? Vậy 1901 thì bỏ qua? (chẳng hạn cell có giá trị 367)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() If Year(Cll) = 1900 Then
Dữ liệu kiểu này là gây khó cho "đồng đội" rồiĐây E đưa file lên Chị giúp E ạ!
Bài toán đặt ra:
1. Tô màu những ô bị lỗi (lỗi về ngày tháng năm, lỗi về giờ) kết quả đã được tô màu vàng như hình trên!
2. Những ô không có dữ liệu và ô có dữ liệu được định dạng đúng không bị tô màu
View attachment 200564
Em xin cảm ơn!
Hi vâng cám ơn Thầy, E làm theo phần mềm định dạng sẵn như vậy nên khó thay đổi Thầy ạ!, Thầy giúp E trong khoảng thời gian "07h00-12h00" và "13h00-18h00" được không Thầy? nếu không được Thầy giúp Em kiểm tra ngày thôi ạ! k cần đến giờ, E cám ơn ThầyDữ liệu kiểu này là gây khó cho "đồng đội" rồi
9h00-10h00 là đúng định dạng. Vậy đương nhiên nhìn bằng mắt sẽ biết 27h00-29h00 hay 12h00-11h00... là sai định dạng
Vấn đề là: Viết code tổng quát cho mọi trường hợp không phải chuyện dễ
Lời khuyên: Với CSDL thì nên có sự chuẩn hóa. Ví dụ thay vì 9h00-10h00 tại sao không chia thành 2 cột "Giờ vào", "Giờ ra" chẳng hạn. Như vậy thì còn tính toán được chứ với 1 chuỗi nhập linh tinh chỉ có tác dụng để nhìn, không tính toán được gì cả
Nên nhớ: Excel dùng để tính toán, không phải để trang trí hay màu mè
Hi nhờ Anh (Chị) chỉnh giúp Em để hiện màu tô những ô bị lỗi đó.Cái đó mới là chọn ô thôi chứ có tô màu gì đâu: Rng.Select mà
Cái Msgbox có nói rồi mà (Chắc là tiếng việt không dấu do vậy bạn dịch không được)
Khi mỗi lần chạy Code em có ghi là "Em đã chọn được: N ô. Làm gì nữa thì tùy nhà Chị nha". rùi mà![]()
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
đó là bạn em, với lại như vậy phức tạp, E quay về cái cũ hiSao 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ủ Topic
Chị ơi cái code này thay đổi vùng kiểm tra thì vào phần nào trong code ạ!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 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![]()
Vầy nha. Mình khai báo cái Arr = Array(15, 16, 18, 19, 21, 22, 24, 25) là mảng chứa số cột của bảng tính cấn kiểm traChị ơi cái code này thay đổi vùng kiểm tra thì vào phần nào trong code ạ!
Vâng cám ơn chị, chị giúp E chút xíu nữa là sửa lại code ở bài #4 để e có thể tô màu được không ạ! E sẽ sử dụng code ở bài #4 đó, chúc chị ngày mới vui vẻ!Vầy nha. Mình khai báo cái Arr = Array(15, 16, 18, 19, 21, 22, 24, 25) là mảng chứa số cột của bảng tính cấn kiểm tra
Trong câu lệnh
Select Case Arr(J)
Case 15, 18, 21, 24 To 25 --->Nếu số côt trong bảng tính là 15,18,21, 24, 25 thì chạy Macro Kiemtrangay
Kiemtrangay SRng
Case 16, 19, 22
Kiemtragio SRng --->Nếu số côt trong bảng tính là 16,19,22 thì chạy Macro Kiemtragio
End Select
Bê cái Code bài 25 vào thôi nhaVâng cám ơn chị, chị giúp E chút xíu nữa là sửa lại code ở bài #4 để e có thể tô màu được không ạ! E sẽ sử dụng code ở bài #4 đó, chúc chị ngày mới vui vẻ!
Sub BoiMau()
Dim SRng As Range
On Error GoTo Thoat
Set SRng = Application.InputBox(Prompt:="Chon vung du lieu ", Title:="Du lieu dau vao", Type:=8)
Kiemtrangay SRng
Thoat:
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()) - 5: 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
Chỉ là "Khó" thôi, chứ không fải là không thay đổi; Ví dụ bạn có thể tìm các ô trong vùng cột có kí tự "-" thì tách ra bỡi hàm nào đó thành 2 cột; Chuyện này không thể dính dáng hay đổ thừa cho fần mền được, 1 khi chưa có fần mềm mới thay thếE làm theo phần mềm định dạng sẵn như vậy nên khó thay đổi Thầy ạ!,
Vâng E cám ơn Thầy ạ!Chỉ là "Khó" thôi, chứ không fải là không thay đổi; Ví dụ bạn có thể tìm các ô trong vùng cột có kí tự "-" thì tách ra bỡi hàm nào đó thành 2 cột; Chuyện này không thể dính dáng hay đổ thừa cho fần mền được, 1 khi chưa có fần mềm mới thay thế
Vâng, E cám ơn Chị nhiều nhé! chúc chị cuối tuần vui vẻ và may mắn!Bê cái Code bài 25 vào thôi nha
Mã:Sub BoiMau() Dim SRng As Range On Error GoTo Thoat Set SRng = Application.InputBox(Prompt:="Chon vung du lieu ", Title:="Du lieu dau vao", Type:=8) Kiemtrangay SRng Thoat: 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()) - 5: 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
Hi, làm phiền chị xinh gái chút nữa:Bê cái Code bài 25 vào thôi nha
Mã:Sub BoiMau() Dim SRng As Range On Error GoTo Thoat Set SRng = Application.InputBox(Prompt:="Chon vung du lieu ", Title:="Du lieu dau vao", Type:=8) Kiemtrangay SRng Thoat: 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()) - 5: 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
Cứ "một chút xíu" mà gần 50 bài rồi vẫn chưa có dấu hiệu kết thúc.
Bài 44 lại nhờ sửa lại code bài 4 để dùng. Hay là nhờ mod xóa từ bài 5 đến 43 cho gọn nhỉ? Thấy tốn kém quá.
Như bài 1 mà Anh hiCứ "một chút xíu" mà gần 50 bài rồi vẫn chưa có dấu hiệu kết thúc.
Bài 44 lại nhờ sửa lại code bài 4 để dùng. Hay là nhờ mod xóa từ bài 5 đến 43 cho gọn nhỉ? Thấy tốn kém quá.
Bỏ dòng Rng.Font.Strikethrough = True là được xơi cà rốt rùiHi, gần được chị ạ! ô màu xanh vẫn bị gạch chị ạ! E nhờ chị sửa vậy để còn sửa lại được dữ liệu tô màu e có thể sửa lại được nhưng dữ liệu bị gạch k sửa được chị ạ!
E cám ơn Chị nhiều!
View attachment 200690
Khổ thân. Đáng nhẽ ăn được rồi mà người ta lại không cho ăn. Số mình đen thếĐây chị ơi gần ăn được ạ!
Hình 1: là bỏ là bỏ
Hình 2: là kết quả
View attachment 200692View attachment 200693
Chắc nốt lần này nữa là ăn được chị nhỉ hi..
cám ơn chị đã ok, chúc chị buổi tối vui vẻKhổ thân. Đáng nhẽ ăn được rồi mà người ta lại không cho ăn. Số mình đen thế