Xin giúp đỡ: Hàm If..and bị sai.

Liên hệ QC

alias1313

Thành viên hoạt động
Tham gia
7/4/17
Bài viết
163
Được thích
13
Mã:
Sub NB()

Dim wb As ThisWorkbook
Dim ws As Worksheet
Dim rg1 As Range
Dim d As Date
Dim WS_Count As Integer
Dim b As Range
Dim f As String

On Error Resume Next
Dim LastCol As Integer
Dim i As Variant
Dim j As Variant
Dim Range1 As Range
 
        lcl = Cells(7, Columns.Count).End(xlToLeft).Column
        Debug.Print lcl
        lr = Cells(Rows.Count, "N").End(xlUp).Row
        Debug.Print lr
        Cells.Locked = False
        Cells.FormulaHidden = False

WS_Count = ActiveWorkbook.Worksheets.Count '

         For j = 1 To WS_Count
         If Worksheets(i).Visible = True Then
'
For Each rg1 In ActiveWorkbook.Worksheets(j).Range("P7:CK7")
        If (rg1.Value = Range("Q7").Value) Or (rg1.Value = Range("S7").Value) Or (rg1.Value = Range("U7").Value) Or (rg1.Value = Range("W7").Value) Then
    Debug.Print rg1.Address
    For i = 11 To 20
    Debug.Print Cells(rg1.Offset(i, 0).Columns.Row, 14).Address
        If IsDate((Cells(rg1.Offset(i, 0).Columns.Row, 14))) And True Then
        d = CDate(Cells(rg1.Offset(i, 0).Columns.Row, 14).Value)
    e = "=DATEDIF(" & Replace(Cells(rg1.Offset(i, 0).Columns.Row, 14).Address, "$", "") & "," & Replace(rg1.Offset(1, 0).Address, "$", "") & ", ""d"")/350"
    Cells(rg1.Offset(i, 0).Columns.Row, 16).Value = DateAdd("yyyy", Cells(rg1.Offset(i, 0).Columns.Row, 15).Value, d)
           
    Debug.Print e
    rg1.Offset(i, 0).Formula = e
    rg1.Offset(i, 0).Copy
    rg1.Offset(i, 0).PasteSpecial xlPasteValues
    n = rg1.Value
   
   
    Range1 = Range(Cells(8, 17), Cells(lr, lcl))
    Debug.Print Range1.Address
    Range1.Copy
    Range("Q8").PasteSpecial Paste:=xlPasteValues
    Debug.Print rg1.Offset(i, 0).Value
    Debug.Print Cells(rg1.Offset(i, 0).Columns.Row, 15).Value
    Debug.Print rg1.Offset(i, 0).Address
    Debug.Print i
    Dim a As Variant
    a = Cells(rg1.Offset(i, 0).Columns.Row, 15).Value
    Debug.Print a
    If ((rg1.Value = Range("Q7").Value Or Range("S7").Value)) Then
        Debug.Print rg1.Address
        If ((rg1.Offset(i, 0).Value >= 2) And _
        (rg1.Offset(i, 0).Offset(0, -1).Value <> "x") And _
        (rg1.Offset(i, 0).Offset(0, -3).Value <> "x") And _
        (rg1.Offset(i, 0).Offset(0, -5).Value <> "x") And _
        (rg1.Offset(i, 0).Offset(0, -7).Value <> "x") And _
        (rg1.Offset(i, 0).Offset(0, -9).Value <> "x")) Then
                 rg1.Offset(i, 0).Offset(0, 1).Value = "x"
             
        Else
    rg1.Offset(i, 0).Offset(0, 1).Value = "-"
   
    '        ElseIf ((rg1.Value = Range("S7").Value) And (rg1.Offset(i, 0).Value >= 2.6)) Then
'    rg1.Offset(i, 0).Offset(0, 1).Value = "x"
   
'    =====================================================

If ((rg1.Value = Range("U7").Value Or Range("W7").Value)) Then
Debug.Print rg1.Address
    If ((n >= a) And _
        (rg1.Offset(i, 0).Offset(0, -1).Value <> "x") And _
        (rg1.Offset(i, 0).Offset(0, -5).Value <> "x") And _
        (rg1.Offset(i, 0).Offset(0, -7).Value <> "x") And _
        (rg1.Offset(i, 0).Offset(0, -9).Value <> "x")) Then
        rg1.Offset(i, 0).Offset(0, 1).Value = "x"
    Else
rg1.Offset(i, 0).Offset(0, 1).Value = "-"
'=================================
If (rg1.Offset(i, 0).Offset(0, 1).Value = "x") Then
cell1 = Cells(rg1.Offset(i, 0).Columns.Row, 16)
cell2 = Cells(rg1.Offset(i, 0).Columns.Row, 1)

Debug.Print Range(Cells(rg1.Offset(i, 0).Columns.Row, 16), Cells(rg1.Offset(i, 0).Columns.Row, 1)).Address
'Range(Cells(rg1.Offset(i, 0).Columns.Row, 16), Cells(rg1.Offset(i, 0).Columns.Row, 1)).Copy Destination:=Worksheets("Sheet2").Range("A65536").End(xlUp).Offset(1, 0)


    End If
    End If
    End If
    End If
    End If
    End If
    Next i
    End If
    Next rg1
    End If
    Next j
   


    For n = 1 To (lcl + 1) Step 2
  With Range("Q18:Q" & lr).Offset(0, n - 1).Font
        .ThemeColor = xlThemeColorAccent3
        .TintAndShade = 0
    End With
    Next n
    Application.CutCopyMode = False
End Sub


Em có hàm If..and:

If ((n >= a) And _
(rg1.Offset(i, 0).Offset(0, -1).Value <> "x") And _
(rg1.Offset(i, 0).Offset(0, -5).Value <> "x") And _
(rg1.Offset(i, 0).Offset(0, -7).Value <> "x") And _
(rg1.Offset(i, 0).Offset(0, -9).Value <> "x")) Then
rg1.Offset(i, 0).Offset(0, 1).Value = "x"
Else
rg1.Offset(i, 0).Offset(0, 1).Value = "-"
End If
a: là giá trị tương ứng ở cột "O"
n: là giá trị tính toán ra (AK18:AK27)
Khi n = 4, a= 5 hàm lại trả về giá trị "x". em tìm mãi ma không ra lỗi.
Đúng ra n(4)>=a(5): false hàm phải trả về "-".
Anh/chị và các Thầy giúp em với.
Em có gửi file đính kèm.
Em xin hỏi thêm có cách nào để sửa code trên cho nhanh hơn và tối ưu hơn không ạ!
Em xin cảm ơn!
 

File đính kèm

  • Xet NB.xls
    123.5 KB · Đọc: 7
Lần chỉnh sửa cuối:
Mã:
Sub NB()
a = Cells(rg1.Offset(i, 0).Columns.Row, 15).Value
[COLOR=#ff0000]For Each rg1 In ActiveWorkbook.Worksheets(j).Range("P7:CK7")
..........[/COLOR]
..........
..........
   [COLOR=#ff0000] n = rg1.Value[/COLOR]
............
If ((n >= a) And _
sub...
...
a = Cells(rg1.Offset(i, 0).Columns.Row, 15).Value
...
For Each rg1 In ActiveWorkbook.Worksheets(j).Range("P7:CK7")
...
n = rg1.Value
...
If ((n >= a) And _...
...
--------------------------------------------------------------------------------
Bạn thử Debug.Print n bằng bao nhiêu mà so sánh với a
 
Lần chỉnh sửa cuối:
Upvote 0
sub...
...
a = Cells(rg1.Offset(i, 0).Columns.Row, 15).Value
...
For Each rg1 In ActiveWorkbook.Worksheets(j).Range("P7:CK7")
...
n = rg1.Value
...
If ((n >= a) And _...
...
--------------------------------------------------------------------------------
Bạn thử Debug.Print n bằng bao nhiêu mà so sánh với a

Cám ơn bạn. Mình đã sửa lại rồi! ^_^..!
 
Upvote 0
Web KT
Back
Top Bottom