Giúp sửa code để thỏa mãn điều kiện lọc dữ liệu

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

Văn Toàn 1996

Thành viên hoạt động
Tham gia
5/6/23
Bài viết
102
Được thích
22
Chào tất cả mọi người. em cần sửa đoạn code để so sánh cột B và Cột C, nếu giá trị số màu đỏ (sau dấu gạch - ) >= giá trị cột C thì lấy
Mã:
Sub loc()
On Error Resume Next
Dim sArr(), dArr(), I As Long, K As Long, R As Long, Col As Long
sArr = Range("B4:C10").Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 2)
For I = 1 To R
    If sArr(I, 1) >= sArr(I, 2) Then ' Dòng code cần chỉnh sửa *************
        K = K + 1
        For Col = 1 To 2
            dArr(K, Col) = sArr(I, Col)
        Next Col
    End If
Next I
Range("F4:G10").ClearContents
Range("F4").Resize(K, 2) = dArr
End Sub

Cụ thể tại dòng code **********. em xin chân thành cảm ơn

1693073044002.png
 

File đính kèm

  • test 123.xlsm
    16.1 KB · Đọc: 10
Lần chỉnh sửa cuối:
Có thể là vầy, thử xem:

PHP:
Sub SinhNhatGPELan17()
Dim sArr():                             Const GG As String = "-"
Dim J As Long, W As Long, Rs As Long, Col As Long, VTr As Integer, Num As Integer
'On Error Resume Next   '
sArr = Range("B4:C10").Value
Rs = UBound(sArr)
ReDim dArr(1 To Rs, 1 To 2)
Range("F4").CurrentRegion.Offset(2).ClearContents
For J = 1 To Rs
    VTr = InStr(sArr(J, 1), GG)
    Num = CInt(Mid(sArr(J, 1), VTr + 1, Len(sArr(J, 1))))
    If VTr And Num >= sArr(J, 2) Then ' Láy   '
        W = W + 1
        For Col = 1 To 2
            dArr(W, Col) = sArr(J, Col)
        Next Col
    End If
Next J
Range("F4").Resize(W, 2) = dArr
End Sub
 
Upvote 0
Có thể là vầy, thử xem:

PHP:
Sub SinhNhatGPELan17()
Dim sArr():                             Const GG As String = "-"
Dim J As Long, W As Long, Rs As Long, Col As Long, VTr As Integer, Num As Integer
'On Error Resume Next   '
sArr = Range("B4:C10").Value
Rs = UBound(sArr)
ReDim dArr(1 To Rs, 1 To 2)
Range("F4").CurrentRegion.Offset(2).ClearContents
For J = 1 To Rs
    VTr = InStr(sArr(J, 1), GG)
    Num = CInt(Mid(sArr(J, 1), VTr + 1, Len(sArr(J, 1))))
    If VTr And Num >= sArr(J, 2) Then ' Láy   '
        W = W + 1
        For Col = 1 To 2
            dArr(W, Col) = sArr(J, Col)
        Next Col
    End If
Next J
Range("F4").Resize(W, 2) = dArr
End Sub
Thiết thực chào mừng sinh nhật GPE lần thứ 17 :D --=0
 
Upvote 0
.

Bạn thử chỉnh lại như sau:

PHP:
If Val(Split(sArr(I, 1) & "-", "-")(1)) >= sArr(I, 2) Then

.
cảm ơn bạn đúng ý mình
Bài đã được tự động gộp:

Có thể là vầy, thử xem:

PHP:
Sub SinhNhatGPELan17()
Dim sArr():                             Const GG As String = "-"
Dim J As Long, W As Long, Rs As Long, Col As Long, VTr As Integer, Num As Integer
'On Error Resume Next   '
sArr = Range("B4:C10").Value
Rs = UBound(sArr)
ReDim dArr(1 To Rs, 1 To 2)
Range("F4").CurrentRegion.Offset(2).ClearContents
For J = 1 To Rs
    VTr = InStr(sArr(J, 1), GG)
    Num = CInt(Mid(sArr(J, 1), VTr + 1, Len(sArr(J, 1))))
    If VTr And Num >= sArr(J, 2) Then ' Láy   '
        W = W + 1
        For Col = 1 To 2
            dArr(W, Col) = sArr(J, Col)
        Next Col
    End If
Next J
Range("F4").Resize(W, 2) = dArr
End Sub
cảm ơn bạn đúng ý mình luôn
 
Upvote 0
If VTr And Num >= sArr(J, 2) Then ' Láy '
Code như vầy nguy hiểm bỏ bố. Toán tử And trong VBA là toán tử tính theo bit.
1 And 2 = 0
Ở trên, bạn dựa vào thực tế là toán tử >= có độ ưu tiên cao hơn And. Điều này làm cho code khá khó debug.
Trong biểu thức lô gic có nhiều toán tử, luôn luôn dùng cặp dấu ngoặc "()" để xác định.
 
Upvote 0
Code như vầy nguy hiểm bỏ bố. Toán tử And trong VBA là toán tử tính theo bit.
1 And 2 = 0
Ở trên, bạn dựa vào thực tế là toán tử >= có độ ưu tiên cao hơn And. Điều này làm cho code khá khó debug.
Trong biểu thức lô gic có nhiều toán tử, luôn luôn dùng cặp dấu ngoặc "()" để xác định.
cảm ơn bạn. Góp Vui
Mã:
If Val(Mid(sArr(I, 1), InStrRev(sArr(I, 1), "-") + 1)) >= sArr(I, 2) Then
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom