2012-10-16 46 views
1

摘要:我有一大堆不需要的列的電子表格。因爲新的列可能會在未來添加我刪除任何<>必要的列。如果或聲明始終爲真

問題:我有一個很長的If Or聲明低於我使用,但它總是如此。我試圖在Or和許多其他括號變體之間放置括號,但沒有一個是正確的。在括號的一種變體下,陳述總是錯誤的,但這是我收到的唯一改變。

代碼:

If (Cells(4, i).Value <> "BATCH_ID" Or Cells(4, i).Value <> "Indicative" Or Cells(4, i).Value <> "Company Code" Or Cells(4, i).Value <> "Policy Num" Or Cells(4, i).Value <> "Numeric Amount" Or Cells(4, i).Value <> "Legal Amount" Or Cells(4, i).Value <> "PAYMENT_AMT") Then 

     ActiveCell.EntireColumn.Delete 

End If 

我在做什麼錯在這裏?提前致謝!

+2

嘗試使用AND?因爲OR只需要1個條件是真/假來執行。 – CustomX

回答

10

其他人在這種情況下使用AndOr提到了一個很大的概念。我還會推薦使用Select Case在有多個標準的情況下,閱讀,理解和編輯會更容易。

Select Case Cells(4, i).Value 

    Case Is = "BATCH_ID", "Indicative", "Company Code", "Policy Num", "Numeric Amount", "Legal Amount", "PAYMENT_AMT" 

    Case Else: ActiveCell.EntireColumn.Delete 

End Select 
+0

這比我的方法更具可讀性和更易於理解。 –

+0

在這種情況下有1個問題,因爲'Inidicative'應拼寫'Indicative',但是,這很容易接受。謝謝 –

+0

感謝編輯:D –

2

負面的「或」語句經常讓人們往上走。

你實際上需要使用「和」。這是邏輯:

如果x <> a or x <> b,那麼x可以是除a之外的任何東西,或者x可以是除b之外的任何東西。所以如果x == a,第二個語句是真的,並且如果x == b第一個語句是真的。對於一個OR,只有兩個陳述中的一個必須是真實的,才能使整個事情成真。

如果您使用「和」:

如果x <> a AND x <> b,那麼對於第一部分X可以是除任何事情,而對於第二部分x可以是除了B什麼,但是......如果x是一個那麼第一部分是虛假的,因此整個陳述是錯誤的。

2

嘗試使用AND,因爲您只想刪除行,如果它不匹配。因爲OR只需要1個條件是真/假來執行。

在你的情況下,它會說,不等於「BATCH_ID」(如果這是真的 - >刪除)等。

If (Cells(4, i).Value <> "BATCH_ID" AND Cells(4, i).Value <> "Indicative") Then