Nguyễn Hồng Quang
Thành viên GPE Hà Nội
- Tham gia
- 8/6/07
- Bài viết
- 1,203
- Được thích
- 876
- Giới tính
- Nam
- Nghề nghiệp
- Kế toán
Cảm ơn anhSao không dùng công thức này:
=IF(AND(A2=C2,B2=D2),"","x")
mà dùng 2 cột phụ và 1 cột kết quả (cột thứ 3)?
Dùng công thức xong Copy -> PasteValues
Trước đây em vẫn làm công thức hoặc dùng filter nhưng mỗi lần chèn thêm dòng thì lại phải chạy lại công thức từ đầu. Nên em muốn xin code để đánh dấu cột GDùng công thức xong Copy -> PasteValues
Public Sub DanhDauX()
Dim i As Long
Dim lr As Long
Dim sArr, dArr
lr = Range("A" & Rows.Count).End(xlUp).Row
sArr = Range("A2:D" & lr).Value
lr = UBound(sArr, 1)
ReDim dArr(1 To lr, 1 To 1)
For i = 1 To lr
If sArr(i, 1) <> sArr(i, 3) Or sArr(i, 2) <> sArr(i, 4) Then dArr(i, 1) = "X"
Next
Range("G2").Resize(lr, 1) = dArr
End Sub
record macro + xào xáo dược code nàyEm có 1 bảng tính đang đối chiếu dữ liệu, em cần đánh dấu vào cột G các dòng mà có các ô ở cột E, F xuất hiện giá trị False. Chi tiết em đã ghi chú trong bảng tính. Rất mong các anh , chị và các bạn giúp đỡ
Em xin cảm ơn
Option Explicit
Sub Macro1()
Dim rws
With Sheet1
rws = .Range("A1000000").End(xlUp).Row
Range("A1", "G" & rws).AutoFilter Field:=6, Criteria1:="FALSE"
Range("G4:G10943") = "x"
Range("A1", "G" & rws).AutoFilter Field:=6
Range("A1", "G" & rws).AutoFilter Field:=5, Criteria1:="FALSE"
Range("G4:G10943") = "x"
Range("A1", "G" & rws).AutoFilter
End With
End Sub
Cảm ơn bạn đã giúp đỡ, chúc bạn cuối tuần vui vẻ nhérecord macro + xào xáo dược code này
nhớ tháo auto filter trước khi chạy
Thử một cách khác:Cảm ơn anh phuocam nhiều. Code chạy đúng kết quả em mong muốn rồi ạ. Chúc anh ngày vui
Bài đã được tự động gộp:
Cảm ơn bạn đã giúp đỡ, chúc bạn cuối tuần vui vẻ nhé
Sub DanhDau()
Dim row As Integer
Dim DongCuoi As Long
DongCuoi = Sheet1.Range("B" & Rows.Count).End(xlUp).row
For row = 2 To DongCuoi
If StrComp("TRUE", Cells(row, 5).Value, vbTextCompare) Or _
StrComp("TRUE", Cells(row, 6).Value, vbTextCompare) Then
Cells(row, 7).Value = "X"
End If
Next row
End Sub
Em cảm ơn anh be09 đã giúp đỡ. Chúc anh ngày vuiThử một cách khác:
Anh ơi! em áp dụng code của anh, nhưng khi tăng số lượng cột so khớp lên thì code bị lỗiBỏ 2 cột phụ, thử:
Mã:Public Sub DanhDauX() Dim i As Long Dim lr As Long Dim sArr, dArr lr = Range("A" & Rows.Count).End(xlUp).Row sArr = Range("A2:D" & lr).Value lr = UBound(sArr, 1) ReDim dArr(1 To lr, 1 To 1) For i = 1 To lr If sArr(i, 1) <> sArr(i, 3) Or sArr(i, 2) <> sArr(i, 4) Then dArr(i, 1) = "X" Next Range("G2").Resize(lr, 1) = dArr End Sub
https://www.mediafire.com/file/45qd15y5vg60g99/ProgreesBar.rar/file
Máy tính xử lý các con số gần đúng nên so sánh "=" hoặc "<>" có lúc loạn cào càoAnh ơi! em áp dụng code của anh, nhưng khi tăng số lượng cột so khớp lên thì code bị lỗi
Anh xem giúp em với nhé. Chi tiết em trình bày trong file
Thêm một lần Cảm ơn anh. Nhưng mà cái này thú vị thật. Rõ ràng trên bảng tính , Excel xác nhận là 124409.36=124409.36 = TRUE nhưng khi đưa vào VBA lại FalseSửa thành:
If sArr(i, 1) <> sArr(i, 4) Or sArr(i, 2) <> sArr(i, 5) Or Round(sArr(i, 3) - sArr(i, 6), 10) <> 0 Then dArr(i, 1) = "x"
Sửa code bài 9 lại 1 tí:Anh ơi! em áp dụng code của anh, nhưng khi tăng số lượng cột so khớp lên thì code bị lỗi
Anh xem giúp em với nhé. Chi tiết em trình bày trong file
Sub DanhDau()
Dim row As Integer
Dim DongCuoi As Long
DongCuoi = Sheet1.Range("B" & Rows.Count).End(xlUp).row
For row = 2 To DongCuoi
If StrComp("TRUE", Cells(row, 7).Value, vbTextCompare) Or _
StrComp("TRUE", Cells(row, 8).Value, vbTextCompare) Or _
StrComp("TRUE", Cells(row, 9).Value, vbTextCompare) Then
Cells(row, 10).Value = "X"
End If
Next row
End Sub
Cảm ơn anh. Hôm nay gặp mới biết. Cái này đúng là ngoài tầm hiểu biết của em, rõ ràng trên bảng tính em đã xem đến hàng thập phân thứ 20 mà hai số vẫn cứ là 124409.36000000000000000000000000.Máy tính xử lý các con số gần đúng nên so sánh "=" hoặc "<>" có lúc loạn cào cào
Có thể chuyển thành chuổi
CStr(sArr(i, 3)) <> CStr(sArr(i, 6))
Hoặc qui định 1 sai số E
Abs(sArr(i, 3) - sArr(i, 6)) > E
Vâng code này của anh ra đúng ạSửa code bài 9 lại 1 tí:
Mã:Sub DanhDau() Dim row As Integer Dim DongCuoi As Long DongCuoi = Sheet1.Range("B" & Rows.Count).End(xlUp).row For row = 2 To DongCuoi If StrComp("TRUE", Cells(row, 7).Value, vbTextCompare) Or _ StrComp("TRUE", Cells(row, 8).Value, vbTextCompare) Or _ StrComp("TRUE", Cells(row, 9).Value, vbTextCompare) Then Cells(row, 10).Value = "X" End If Next row End Sub
Sai số nầy nằm trong code, còn trên bảng tính có lẽ ngài Bil đã loại lỗi nầyCảm ơn anh. Hôm nay gặp mới biết. Cái này đúng là ngoài tầm hiểu biết của em, rõ ràng trên bảng tính em đã xem đến hàng thập phân thứ 20 mà hai số vẫn cứ là 124409.36000000000000000000000000.
Bài đã được tự động gộp:
Vâng code này của anh ra đúng ạ
Sub Button1_Click()
Dim i As Long
Dim lr As Long
Dim sArr, dArr
lr = Range("A" & Rows.Count).End(xlUp).Row
sArr = Range("A2:F" & lr).Value
lr = UBound(sArr, 1)
ReDim dArr(1 To lr, 1 To 1)
For i = 1 To lr
'****
If i = 1051 Then
e = sArr(i, 3) - sArr(i, 6)
End If
'****
If sArr(i, 1) <> sArr(i, 4) Or sArr(i, 2) <> sArr(i, 5) Or sArr(i, 3) <> sArr(i, 6) Then dArr(i, 1) = "x"
Next
Range("J2").Resize(lr, 1) = dArr
MsgBox (lr)
End Sub
Cảm ơn anh. Em vẫn đang làm so khớp cho phần còn lại của cái bảng tính này. Khi nào xong em sẽ nghiên cứu kiến thức mới của anhSai số nầy nằm trong code, còn trên bảng tính có lẽ ngài Bil đã loại lỗi nầy
Thử code sẽ rỏ hơn
Mã:Sub Button1_Click() Dim i As Long Dim lr As Long Dim sArr, dArr lr = Range("A" & Rows.Count).End(xlUp).Row sArr = Range("A2:F" & lr).Value lr = UBound(sArr, 1) ReDim dArr(1 To lr, 1 To 1) For i = 1 To lr '**** If i = 1051 Then e = sArr(i, 3) - sArr(i, 6) End If '**** If sArr(i, 1) <> sArr(i, 4) Or sArr(i, 2) <> sArr(i, 5) Or sArr(i, 3) <> sArr(i, 6) Then dArr(i, 1) = "x" Next Range("J2").Resize(lr, 1) = dArr MsgBox (lr) End Sub
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 2