Đối chiếu hàng tồn kho theo mã ,xác định các chênh lệch và đánh dấu

Liên hệ QC

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
Em 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
 

File đính kèm

  • Đánh dấu các dòng lỗi.xlsm
    537.3 KB · Đọc: 29
Sao 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)?
 
Upvote 0
Sao 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)?
Cảm ơn anh
em muốn dùng code vì khi xuất hiện trường hợp (không xuất hiện mã hàng đối ứng)em sẽ chèn dòng ở chỗ đó (ví dụ dòng 55 trong bảng tính em gửi). Với lại Nếu dùng công thức thì khi ấn Ctrl+ xuống ;nó sẽ trôi tuột xuống dòng cuối của bảng, còn nếu chỉ đánh dấu theo vị trí thì khi ấn Ctrl+xuống; nó sẽ đến đúng vị trí bị lệch luôn
 
Upvote 0
Upvote 0
Bỏ 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
 
Upvote 0
Em 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
record macro + xào xáo dược code này
nhớ tháo auto filter trước khi chạy
Mã:
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
 
Upvote 0
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:

record macro + xào xáo dược code này
nhớ tháo auto filter trước khi chạy
Cảm ơn bạn đã giúp đỡ, chúc bạn cuối tuần vui vẻ nhé
 
Upvote 0
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é
Thử một cách khác:
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, 5).Value, vbTextCompare) Or _
    StrComp("TRUE", Cells(row, 6).Value, vbTextCompare) Then
        Cells(row, 7).Value = "X"
    End If
Next row
End Sub
 
Upvote 0
Bỏ 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
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
 

File đính kèm

  • Đánh dấu x các dòng False.xlsb
    478.1 KB · Đọc: 7
Upvote 0
Tặng bạn file này, hiển thị % công việc hoàn thành.
Link download:
Mã:
https://www.mediafire.com/file/45qd15y5vg60g99/ProgreesBar.rar/file
Các bạn đăng ký theo dõi kênh để cập nhật các video bài học mới nhất về VBA nhé.
 
Upvote 0
Sử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"
 
Lần chỉnh sửa cuối:
Upvote 0
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
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
 
Upvote 0
Sử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"
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 False
 
Upvote 0
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
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
 
Upvote 0
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
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.
Bài đã được tự động gộp:

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
Vâng code này của anh ra đúng ạ
 
Upvote 0
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.
Bài đã được tự động gộp:


Vâng code này của anh ra đúng ạ
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ầ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
 
Upvote 0
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ầ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
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 anh
Ngoài ra khi xong bảng tính này, em sẽ gửi kết quả và mong các anh giúp đỡ cách làm để ra được kết quả cuối cùng luôn. Như hiện nay là em đang áp dụng các code ở trên và thao tác khá nhiều lần trên bảng tính.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom