Sub ToMauDuLieuTheoDieuKien()
Dim Rng As Range, Cls As Range: Dim Num As Double
Set Rng = Range([G9], [G65500].End(xlUp))
Rng.Interior.ColorIndex = 2
For Each Cls In Rng
If IsNumeric(Cls.Value) Then
Num = Cls.Value
If Num > 20 Or Num < 0 Then
Cls.Interior.ColorIndex = 35
ElseIf Num / 1 <> Num \ 1 Then
Cls.Interior.ColorIndex = 36
End If
Else
Cls.Interior.ColorIndex = 38
End If
Next Cls
End Sub
Code không an toàn.PHP:... ElseIf Num / 1 <> Num \ 1 Then ...
Góp vui 1 cách củ chuốiCác bạn giúp code tô những ô không phải là số nguyên dương
hoặc số lớn hơn 20
Sau khi mình nhập liệu xong thì cho chạy code, nếu từ G9 trở xuống mà ô nào không thỏa điều kiện trên thì tô đỏ. Xin cảm ơn nhiều.
Option Explicit
Sub ToMauSoNguyen()
Dim I As Long, j As Long, Rng As Range
With Sheets("DATA")
For I = 9 To .Cells(10000, 7).End(xlUp).Row
If IsNumeric(.Cells(I, 7)) = False Then
.Cells(I, 7).Interior.ColorIndex = 6
Else
If .Cells(I, 7) < 0 Or Int(.Cells(I, 7)) <> .Cells(I, 7) Or .Cells(I, 7) > 20 Then
.Cells(I, 7).Interior.ColorIndex = 6
End If
End If
Next I
End With
End Sub
Bạn vô cửa sồ Immediate sẽ tìm hiểu cũng được; Nó là toán tử chia lấy phần nguyên"ElseIf Num / 1 <> Num \ 1 Then"
Anh ơi, anh cho em hỏi: Dấu "/" thì để chia, còn dấu "\" trường hợp này có chức năng gì ạ. (Em cũng tìm hiểu nhưng chưa rõ ạ)
Vậy lả giống như hàm Quotient anh nhỉ, em cảm ơn anh.Bạn vô cửa sồ Immedia sẽ tìm hiểu cũng được; Nó là toán tử chia lấy phần nguyên
Nếu tham biến Num >20 hay < 0 thì có câu lệnh trên nó lo rồi mà; Mình tưởng như vậy đã đạt rồiCode không an toàn.
Nếu Num lớn hơn 2 tỷ mọt chút (giới hạn của Long) thì sẽ bị lỗi tràn số.
& giống hàm Int() trong VBAVậy lả giống như hàm Quotient anh nhỉ, em cảm ơn anh.
Tôi chỉ nói là không an toàn.Nếu tham biến Num >20 hay < 0 thì có câu lệnh trên nó lo rồi mà; Mình tưởng như vậy đã đạt rồi
Mong bạn phân tích thêm, xin cảm ơn!
Không giống.& giống hàm Int() trong VBA
Không giống luôn.Vậy lả giống như hàm Quotient anh nhỉ, em cảm ơn anh.
Khi thử lúc trước em cũng thấy như vậy nhưng chưa hiểu vì sao, cảm ơn anh nhiều ạ.Không giống.
Hàm Int nhận tham số là Double. Nếu nạp Long nó sẽ tự nâng cấp lên.
Trong khi đó, toán tử \ chỉ nhận vế Long. Đưa cho nó số lớn hơn giới hạn của Long sẽ bị lỗi tràn số.
View attachment 282411
Không giống luôn.
Toán tử \ bản thân là phép chia số nguyên cho nên nó có làm tròn trước khi chia.
Hàm Quotient của bảng tính là phép lấy thương số giữa hai số thực cho nên nó không làm tròn trước khi chia.
View attachment 282412
Chú thích 1: Toán tử \ là toán tử chia số nguyên. Hai vế của nó (số chia và số bị chia) phải là số nguyên. Trước khi nhận biểu thức ở hai vế bên trái và bên phải, nó ép kiểu các biểu thức này về số nguyên. Tuy nhiên, cách ép kiểu của nó hơi rắc rối. Vì vậy, lúc dùng nó để chia số thực bạn phải cẩn thận.
View attachment 282414
Chú thích 2: Hàm chính thống để chặt bỏ phần thập phân của một số thực là hàm FIX. Hàm này tương đương với hàm TRUNC của bảng tính.
View attachment 282413
Các bạn cho hỏi thêm, mình muốn nó thông báo địa chỉ Ô nào bị lỗi luôn, thì cách thêm code như thế nào.Cells(I, 7).Interior.ColorIndex = 6
Cũng không khó gì. Ngay dưới dòng bôi màu, bạn thêm:Các bạn cho hỏi thêm, mình muốn nó thông báo địa chỉ Ô nào bị lỗi luôn, thì cách thêm code như thế nào
Ví dụ: lỗi ở G10 ...
Mình có thêm Msgbox nhưng chưa biết cú pháp như thế nào
MsgBox "Loi tai o : " & .Cells(I, 7).Address
Thì sửa lại thànhCác bạn cho hỏi thêm, mình muốn nó thông báo địa chỉ Ô nào bị lỗi luôn, thì cách thêm code như thế nào
Ví dụ: lỗi ở G10 ...
Mình có thêm Msgbox nhưng chưa biết cú pháp như thế nào
If .Cells(I, 7) < 0 Or Int(.Cells(I, 7)) <> .Cells(I, 7) Or .Cells(I, 7) > 20 Then
.Cells(I, 7).Interior.ColorIndex = 6
else
loi= loi & ", " & i
End If
End If
Next I
End With
if len( loi)>0 then
msgbox " đa có lôi ơ các dòng " & loi
end if
end sub
·
Option Explicit
Sub ToMauSoNguyen()
Dim I As Long, j As Long, Rng As Range
Dim str As String
With Sheets("DATA")
For I = 9 To .Cells(10000, 7).End(xlUp).Row
If IsNumeric(.Cells(I, 7)) = FALSE Then
.Cells(I, 7).Interior.ColorIndex = 6
If str = "" Then str = .Cells(I, 7).Address Else: str = str & ", " & .Cells(I, 7).Address
Else
If .Cells(I, 7) < 0 Or Int(.Cells(I, 7)) <> .Cells(I, 7) Or .Cells(I, 7) > 20 Then
.Cells(I, 7).Interior.ColorIndex = 6
If str = "" Then str = .Cells(I, 7).Address Else: str = str & ", " & .Cells(I, 7).Address
End If
End If
Next I
End With
Application.Assistant.DoAlert "Thông báo !!!", "L" & ChrW(7895) & "i t" & ChrW(7841) & "i các ô sau: " & str , msoAlertButtonOK, msoAlertIconInfo, 0, 0, 0
End Sub
Anh tô màu trắng hết cho bằng ấy ô à? 50 ngàn ô cũng tô trắng luôn?PHP:Set Rng = Range([G9], [G65500].End(xlUp)) Rng.Interior.ColorIndex = 2
Chắc ý ảnh làAnh tô màu trắng hết cho bằng ấy ô à? 50 ngàn ô cũng tô trắng luôn?
Rng.Interior.Pattern = xlNone
Ảnh đang dùng Interior.ColorIndex, không tô là 0. Ảnh dùng 2 là tô trắng và đây là tói quen của khá nhiều người kể cả làm bằng tay.Chắc ý ảnh là
Mà nhầm đâu đó.PHP:Rng.Interior.Pattern = xlNone
Option Explicit
Sub tomau()
Dim cell As Range
For Each cell In Range("G9:G" & Cells(Rows.Count, "G").End(xlUp).Row)
If Not IsNumeric(Evaluate("=Match(" & cell.Value & ", Row(1:20), 0)")) Then cell.Interior.Color = vbRed
Next
End Sub