then用法總結(jié)(then怎么用)
來源:好上學(xué) ??時間:2022-08-18
下面是《做一個計劃清單里面的代碼》
Sub 刪除已經(jīng)完成的任務(wù)()
Dim arr, n
arr = Sheet1.Range("a6:b105")
For n = 1 To UBound(arr)
If arr(n, 1) = "完成" Then arr(n, 2) = ""
Next n
Sheet1.Range("a6:b105") = arr
i = Sheet1.Range("b" & Rows.Count).End(xlUp).Row
For n = i To 6 Step -1
If Cells(n, 2) = "" Then
Rows(n).Delete
End If
Next n
End Sub
上述代碼有兩處用到了If……Then:
1.If arr(n, 1) = "完成" Then arr(n, 2) = ""
2.If Cells(n, 2) = "" Then
Rows(n).Delete
End If
第二個If 的循環(huán)語句,修改成如下代碼,從而達到同樣的目的
If Len(Cells(n, 2)) Then Else Rows(n).Delete
。
總結(jié)一下,上面3個例子的差異。1:第一個代碼沒有 end if;
2:第二個代碼,分了三行;
3:第三個代碼,沒有比較運算符 即“=”號
那么為什么會有以上的差別呢?通常If …… Then 語句的語法有兩種:1:橫向一句表達時的語法:If [條件] Then [真語句] Else [假語句]
中間可以使用任意【:】連接多層語句: If [條件] Then [真語句-1:真語句-2:真語句-3] Else [偽語句-1:偽語句-2:偽語句-3:偽語句-4]
2.多行表達:(標(biāo)準(zhǔn)的形式)If [條件] Then
[真語句]
Else
[假語句]
End If
如果沒有假語句,可以簡寫成
If [條件] Then
[真語句]
End If
兩種表達式,唯一的區(qū)別就是橫向?qū)懙臅r候,可以沒有End if語句結(jié)尾。而標(biāo)準(zhǔn)的語句,必須要End if結(jié)尾,或者程序會報錯。
那么為什么第三個If …… Then 沒有比較運算符也可以呢?因為我們常規(guī)進行判斷的時候,都是用<、>、=等具有比較意義的值。
其實If …… Then的函數(shù)的本質(zhì),只是判定條件語句的返回結(jié)果是True或者Fales。除了比較運算符,還有很多函數(shù)可以返回Boolean的值。如:
IsNumeric(Num) 判斷是否數(shù)字
IsDate(Date) 判斷是否日期
IsError(temp) 判斷是否錯誤值
IsArray(arr) 判斷是否數(shù)組
IsEmpty(temp) 判斷變量是否為空值
另外,微軟工程師引入了直接把數(shù)值用作比較判斷結(jié)果的隱形處理方法:
- 如果表達式計算結(jié)果是數(shù)值 0 則視作滿足 條件=False
- 如果表達式計算結(jié)果不是數(shù)值 0 而是任意其它數(shù)值,則視作滿足 條件=True
len函數(shù)就是取單元格的字符長度。當(dāng)單元格有無字符的時候,數(shù)值會大于0,則為False ,運行Else后面的假語句。否者就運行,真語句。
當(dāng)然If …… Then還有多重判斷的語句,如If …… Then else IF ……等,本篇就不深入研究了。