Có thể dùng AND hoặc OR ... trong hàm IIF (VBA) được không? xin cho ví dụ (3 người xem)

  • Thread starter Thread starter campha
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

campha

Thành viên mới
Tham gia
4/5/13
Bài viết
29
Được thích
7
Mọi người cho hỏi có dùng được các toán tử logic đối với hàm IIF(expr, truepart, falsepart) được không?
Nếu được xin cho ví dụ tham khảo?

Tks!
 
Mọi người cho hỏi có dùng được các toán tử logic đối với hàm IIF(expr, truepart, falsepart) được không?
Nếu được xin cho ví dụ tham khảo?

Tks!
Ý của bạn là sử dụng các phép toán AND, OR ở trong tham số expr ấy à? Việc này hoàn toàn có thể.
Một ví dụ đơn giản:
[GPECODE=vb]Sub Test()
With Sheets("Sheet1")
.[C1] = IIf(.[A1] = "GPE" And .[B1] > 5, 1, 2)
End With
End Sub[/GPECODE]
Khi chạy code, nếu ô A1 của Sheet1 có giá trị là "GPE" và ô B1 có giá trị >5 thì ô C1 sẽ nhận giá trị là 1, ngược lại thì C1 nhận giá trị là 2.
 
Upvote 0
Ý của bạn là sử dụng các phép toán AND, OR ở trong tham số expr ấy à? Việc này hoàn toàn có thể.
Một ví dụ đơn giản:
[GPECODE=vb]Sub Test()
With Sheets("Sheet1")
.[C1] = IIf(.[A1] = "GPE" And .[B1] > 5, 1, 2)
End With
End Sub[/GPECODE]
Khi chạy code, nếu ô A1 của Sheet1 có giá trị là "GPE" và ô B1 có giá trị >5 thì ô C1 sẽ nhận giá trị là 1, ngược lại thì C1 nhận giá trị là 2.

Cảm ơn bạn
Mình viết sai nên cứ thắc mắc làm sao lại không chạy.
Lẽ ra phải viết = IIF(dk1 And dk2, truepart, falsepart) thì cứ nghĩ là IIF(and(dk1, dk2), truepart, falsepart)
Tks again.
 
Upvote 0
Cảm ơn bạn
Mình viết sai nên cứ thắc mắc làm sao lại không chạy.
Lẽ ra phải viết = IIF(dk1 And dk2, truepart, falsepart) thì cứ nghĩ là IIF(and(dk1, dk2), truepart, falsepart)
Tks again.
Trong VBA, AND, OR là những phép toán chứ không phải hàm nên cú pháp của nó không giống như cú pháp của hàm.
 
Upvote 0
Bạn có thể giúp mình sửa đoạn code này chỉ 1 dòng dùng IIF lồng vào nhau không? đoạn này dùng trong word để sửa câu cú người dùng nhập vào combobox thôi
Mã:
        If Left(cbx, 1) <> "-" Then
            If Right(cbx, 1) <> "." Then
                cbx = "- " & UCase(Left(cbx, 1)) & Mid(cbx, 2) & "."
            Else
                If Left(Right(cbx, 2), 1) = " " Or Left(Right(cbx, 2), 1) = "." Then
                    cbx = Replace(cbx, Right(cbx, 2), ".")
                End If
                    cbx = "- " & UCase(Left(cbx, 1)) & Mid(cbx, 2)
            End If
        Else
            If Mid(cbx, 2, 1) <> " " Then
                cbx = Replace(cbx, Left(cbx, 1), "- ")
            End If
            If Right(cbx, 1) <> "." Then
                cbx = Left(cbx, 2) & UCase(Mid(cbx, 3, 1)) & Mid(cbx, 4) & "."
            Else
                If Left(Right(cbx, 2), 1) = " " Or Left(Right(cbx, 2), 1) = "." Then
                    cbx = Replace(cbx, Right(cbx, 2), ".")
                End If
                    cbx = Left(cbx, 2) & UCase(Mid(cbx, 3, 1)) & Mid(cbx, 4)
            End If
        End If
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn có thể giúp mình sửa đoạn code này chỉ 1 dòng dùng IIF lồng vào nhau không? đoạn này dùng trong word để sửa câu cú người dùng nhập vào combobox thôi
Mã:
        If Left(cbx, 1) <> "-" Then
            If Right(cbx, 1) <> "." Then
                cbx = "- " & UCase(Left(cbx, 1)) & Mid(cbx, 2) & "."
            Else
                If Left(Right(cbx, 2), 1) = " " Or Left(Right(cbx, 2), 1) = "." Then
                    cbx = Replace(cbx, Right(cbx, 2), ".")
                End If
                    cbx = "- " & UCase(Left(cbx, 1)) & Mid(cbx, 2)
            End If
        Else
            If Mid(cbx, 2, 1) <> " " Then
                cbx = Replace(cbx, Left(cbx, 1), "- ")
            End If
            If Right(cbx, 1) <> "." Then
                cbx = Left(cbx, 2) & UCase(Mid(cbx, 3, 1)) & Mid(cbx, 4) & "."
            Else
                If Left(Right(cbx, 2), 1) = " " Or Left(Right(cbx, 2), 1) = "." Then
                    cbx = Replace(cbx, Right(cbx, 2), ".")
                End If
                    cbx = Left(cbx, 2) & UCase(Mid(cbx, 3, 1)) & Mid(cbx, 4)
            End If
        End If
Tôi thấy để nguyên như vậy hay hơn đấy, trông dài dòng nhưng rõ ràng hơn, và tôi nghĩ rằng nó sẽ chạy nhanh hơn là lồng tất cả những gì trong code trên vào các hàm IIF.
 
Upvote 0
Bạn có thể giúp mình sửa đoạn code này chỉ 1 dòng dùng IIF lồng vào nhau không? đoạn này dùng trong word để sửa câu cú người dùng nhập vào combobox thôi
Mã:
        If Left(cbx, 1) <> "-" Then
            If Right(cbx, 1) <> "." Then
                cbx = "- " & UCase(Left(cbx, 1)) & Mid(cbx, 2) & "."
            Else
                If Left(Right(cbx, 2), 1) = " " Or Left(Right(cbx, 2), 1) = "." Then
                    cbx = Replace(cbx, Right(cbx, 2), ".")
                End If
                    cbx = "- " & UCase(Left(cbx, 1)) & Mid(cbx, 2)
            End If
        Else
            If Mid(cbx, 2, 1) <> " " Then
                cbx = Replace(cbx, Left(cbx, 1), "- ")
            End If
            If Right(cbx, 1) <> "." Then
                cbx = Left(cbx, 2) & UCase(Mid(cbx, 3, 1)) & Mid(cbx, 4) & "."
            Else
                If Left(Right(cbx, 2), 1) = " " Or Left(Right(cbx, 2), 1) = "." Then
                    cbx = Replace(cbx, Right(cbx, 2), ".")
                End If
                    cbx = Left(cbx, 2) & UCase(Mid(cbx, 3, 1)) & Mid(cbx, 4)
            End If
        End If
Bạn thích thì cũng tập tành sửa cho bạn
Chú ý: Rối rắm ko bảo trì được code hay máy bị treo thì cấm "kêu". hic
Mã:
cbx = IIf(Left(cbx, 1) <> "-", _
            IIf(Right(cbx, 1) <> ".", _
                "- " & UCase(Left(cbx, 1)) & Mid(cbx, 2) & ".", _
                    IIf(Left(Right(cbx, 2), 1) = " " Or Left(Right(cbx, 2), 1) = ".", _
                        Replace(cbx, Right(cbx, 2), "."), _
                         "- " & UCase(Left(cbx, 1)) & Mid(cbx, 2))), _
                              IIf(Mid(cbx, 2, 1) <> " ", _
                                  Replace(cbx, Left(cbx, 1), "- "), _
                                      IIf(Right(cbx, 1) <> ".", _
                                          Left(cbx, 2) & UCase(Mid(cbx, 3, 1)) & Mid(cbx, 4) & ".", _
                                              IIf(Left(Right(cbx, 2), 1) = " " Or Left(Right(cbx, 2), 1) = ".", _
                                                  Replace(cbx, Right(cbx, 2), "."), _
                                                  Left(cbx, 2) & UCase(Mid(cbx, 3, 1)) & Mid(cbx, 4)))))
 
Upvote 0
Bạn thích thì cũng tập tành sửa cho bạn
Chú ý: Rối rắm ko bảo trì được code hay máy bị treo thì cấm "kêu". hic
Mã:
cbx = IIf(Left(cbx, 1) <> "-", _
            IIf(Right(cbx, 1) <> ".", _
                "- " & UCase(Left(cbx, 1)) & Mid(cbx, 2) & ".", _
                    IIf(Left(Right(cbx, 2), 1) = " " Or Left(Right(cbx, 2), 1) = ".", _
                        Replace(cbx, Right(cbx, 2), "."), _
                         "- " & UCase(Left(cbx, 1)) & Mid(cbx, 2))), _
                              IIf(Mid(cbx, 2, 1) <> " ", _
                                  Replace(cbx, Left(cbx, 1), "- "), _
                                      IIf(Right(cbx, 1) <> ".", _
                                          Left(cbx, 2) & UCase(Mid(cbx, 3, 1)) & Mid(cbx, 4) & ".", _
                                              IIf(Left(Right(cbx, 2), 1) = " " Or Left(Right(cbx, 2), 1) = ".", _
                                                  Replace(cbx, Right(cbx, 2), "."), _
                                                  Left(cbx, 2) & UCase(Mid(cbx, 3, 1)) & Mid(cbx, 4)))))

Cái này nhìn giống bậc thang lên trời quá hen!
Ẹc... Ẹc...
 
Upvote 0
Mọi người cho hỏi có dùng được các toán tử logic đối với hàm IIF(expr, truepart, falsepart) được không?
Nếu được xin cho ví dụ tham khảo?

Tks!
Mình không rành VBA nên thường xài mấy cái đơn giản, đọc vào hiểu liền
PHP:
Sub Test()
      If [A1] = 1 Then
         If [B1] > 5 Then [C1] = 1
      Else
         [C1] = 2
      End If
End Sub
 
Upvote 0
Trong VBA, AND, OR là những phép toán chứ không phải hàm nên cú pháp của nó không giống như cú pháp của hàm.

Không chỉ riêng cú pháp mà cả cách sử dụng cũng không giống nhau.

Phép toán AND và OR của VBA là phép toán bit. Phép toán này so bits của các vế.
Hàm AND(...) của worksheet nhận mỗi tham số là một biểu thức có giá trị boolean
Trong VBA (1 and 2) cho ra kết quả 0 (FALSE). Trong worksheet AND(1,2) cho ra kết quả TRUE

Tuỳ theo muốn kết quả như thế nào mà người ta dùng toán tử hay dùng hàm

IF (1 and 2) và IF (WorksheetFunction.AND(1,2)) không giống nhau

Bạn có thể giúp mình sửa đoạn code này chỉ 1 dòng dùng IIF lồng vào nhau không? đoạn này dùng trong word để sửa câu cú người dùng nhập vào combobox thôi
Mã:
        If Left(cbx, 1) <> "-" Then
            If Right(cbx, 1) <> "." Then
                cbx = "- " & UCase(Left(cbx, 1)) & Mid(cbx, 2) & "."
            Else
                If Left(Right(cbx, 2), 1) = " " Or Left(Right(cbx, 2), 1) = "." Then
                    cbx = Replace(cbx, Right(cbx, 2), ".")
                End If
                    cbx = "- " & UCase(Left(cbx, 1)) & Mid(cbx, 2)
            End If
        Else
            If Mid(cbx, 2, 1) <> " " Then
                cbx = Replace(cbx, Left(cbx, 1), "- ")
            End If
            If Right(cbx, 1) <> "." Then
                cbx = Left(cbx, 2) & UCase(Mid(cbx, 3, 1)) & Mid(cbx, 4) & "."
            Else
                If Left(Right(cbx, 2), 1) = " " Or Left(Right(cbx, 2), 1) = "." Then
                    cbx = Replace(cbx, Right(cbx, 2), ".")
                End If
                    cbx = Left(cbx, 2) & UCase(Mid(cbx, 3, 1)) & Mid(cbx, 4)
            End If
        End If

Code này không đổi ra IIF được.

IIF là một hàm chứ không phải là một lệnh rẽ nhánh.

Đối với hàm, các tham số là tham số truyền trị cho nên VBA sẽ tính trị trước khi gọi hàm. Dù cho biểu thức ra true hay false thì các tham số đều bị tính. Tức là các hàm nằm trong block true hay false gì đều tính tuốt.

Đối với lệnh rẽ nhánh chỉ có một nhánh được tính thôi. Tức là trong if-then-else, chỉ có một trong hai blocks, then hoặc else được tính mà thôi.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom