當前位置:成語大全網 - 新華字典 - 請問:excel vba中xlvalue,xlwhole,xlbyrows,xlnext,xlup,xltoleft等XL開頭的詞分別代表什麽含義用途?

請問:excel vba中xlvalue,xlwhole,xlbyrows,xlnext,xlup,xltoleft等XL開頭的詞分別代表什麽含義用途?

Excel的這個功能對查找指定的數據非常有用,特別是在含有大量數據的工作表中搜索數據時,更能體現出該功能的快速和便捷。同樣,在ExcelVBA中使用與該功能對應的Find方法,提供了壹種在單元格區域查找特定數據的簡單方式,並且比用傳統的循環方法進行查找的速度更快。

--------------------------------------------------------------------------------

1. Find方法的作用

Find方法將在指定的單元格區域中查找包含參數指定數據的單元格,若找到符合條件的數據,則返回包含該數據的單元格;若未發現相匹配的數據,則返回Nothing。該方法返回壹個Range對象,在使用該方法時,不影響選定區域或活動單元格。

--------------------------------------------------------------------------------

2. Find方法的語法

[語法]

<單元格區域>.Find (What,[After],[LookIn],[LookAt],[SearchOrder],[SearchDirection],[MatchCase],[MatchByte],[SearchFormat])

[參數說明]

(1)<單元格區域>,必須指定,返回壹個Range對象。

(2)參數What,必需指定。代表所要查找的數據,可以為字符串、整數或者其它任何數據類型的數據。對應於“查找與替換”對話框中,“查找內容”文本框中的內容。

(3)參數After,可選。指定開始查找的位置,即從該位置所在的單元格之後向後或之前向前開始查找(也就是說,開始時不查找該位置所在的單元格,直到Find方法繞回到該單元格時,才對其內容進行查找)。所指定的位置必須是單元格區域中的單個單元格,如果未指定本參數,則將從單元格區域的左上角的單元格之後開始進行查找。

(4)參數LookIn,可選。指定查找的範圍類型,可以為以下常量之壹:xlValues、xlFormulas或者xlComments,默認值為xlFormulas。對應於“查找與替換”對話框中,“查找範圍”下拉框中的選項。

(5)參數LookAt,可選。可以為以下常量之壹:XlWhole或者xlPart,用來指定所查找的數據是與單元格內容完全匹配還是部分匹配,默認值為xlPart。對應於“查找與替換”對話框中,“單元格匹配”復選框。

(6)參數SearchOrder,可選。用來確定如何在單元格區域中進行查找,是以行的方式(xlByRows)查找,還是以列的方式(xlByColumns)查找,默認值為xlByRows。對應於“查找與替換”對話框中,“搜索”下拉框中的選項。

(7)參數SearchDirection,可選。用來確定查找的方向,即是向前查找(XlPrevious)還是向後查找(xlNext),默認的是向後查找。

(8)參數MatchCase,可選。若該參數值為True,則在查找時區分大小寫。默認值為False。對應於“查找與替換”對話框中,“區分大小寫”復選框。

(9)參數MatchByter,可選。即是否區分全角或半角,在選擇或安裝了雙字節語言時使用。若該參數為True,則雙字節字符僅與雙字節字符相匹配;若該參數為False,則雙字節字符可匹配與其相同的單字節字符。對應於“查找與替換”對話框中,“區分全角/半角”復選框。

(10)參數SearchFormat,可選,指定壹個確切類型的查找格式。對應於“查找與替換”對話框中,“格式”按鈕。當設置帶有相應格式的查找時,該參數值為True。

(11)在每次使用Find方法後,參數LookIn、LookAt、SearchOrder、MatchByte的設置將保存。如果下次使用本方法時,不改變或指定這些參數的值,那麽該方法將使用保存的值。

在VBA中設置的這些參數將更改“查找與替換”對話框中的設置;同理,更改“查找與替換”對話框中的設置,也將同時更改已保存的值。也就是說,在編寫好壹段代碼後,若在代碼中未指定上述參數,可能在初期運行時能滿足要求,但若用戶在“查找與替換”對話框中更改了這些參數,它們將同時反映到程序代碼中,當再次運行代碼時,運行結果可能會產生差異或錯誤。若要避免這個問題,在每次使用時建議明確的設置這些參數。

3. Find方法使用示例

3.1 本示例在活動工作表中查找what變量所代表的值的單元格,並刪除該單元格所在的列。

‘- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Sub Find_Error()

Dim rng As Range

Dim what As String

what = "Error"

Do

Set rng = ActiveSheet.UsedRange.Find(what)

If rng Is Nothing Then

Exit Do

Else

Columns(rng.Column).Delete

End If

Loop

End Sub

‘- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

3.2 帶格式的查找

本示例在當前工作表單元格中查找字體為"Arial Unicode MS"且顏色為紅色的單元格。其中,Application.FindFormat對象允許指定所需要查找的格式,此時Find方法的參數SearchFormat應設置為True。

‘- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Sub FindWithFormat()

With Application.FindFormat.Font

.Name = "Arial Unicode MS"

.ColorIndex = 3

End With

Cells.Find(what:="", SearchFormat:=True).Activate

End Sub

‘- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

[小結] 在使用Find方法找到符合條件的數據後,就可以對其進行相應的操作了。您可以:

(1)對該數據所在的單元格進行操作;

(2)對該數據所在單元格的行或列進行操作;

(3)對該數據所在的單元格區域進行操作。

--------------------------------------------------------------------------------

4. 與Find方法相聯系的方法

可以使用FindNext方法和FindPrevious方法進行重復查找。在使用這兩個方法之前,必須用Find方法指定所需要查找的數據內容。

4.1 FindNext方法

FindNext方法對應於“查找與替換”對話框中的“查找下壹個”按鈕。可以使用該方法繼續執行查找,查找下壹個與Find方法中所指定條件的數據相匹配的單元格,返回代表該單元格的Range對象。在使用該方法時,不影響選定區域或活動單元格。

4.1.1 語法

<單元格區域>.FindNext(After)

4.1.2 參數說明

參數After,可選。代表所指定的單元格,將從該單元格之後開始進行查找。開始時不查找該位置所在的單元格,直到FindNext方法繞回到該單元格時,才對其內容進行查找。所指定的位置必須是單元格區域中的單個單元格,如果未指定本參數,則將從單元格區域的左上角的單元格之後開始進行查找。

當查找到指定查找區域的末尾時,本方法將環繞至區域的開始繼續查找。發生環繞後,為停止查找,可保存第壹次找到的單元格地址,然後測試下壹個查找到的單元格地址是否與其相同,作為判斷查找退出的條件,以避免出現死循環。當然,如果在查找的過程中,將查找到的單元格數據進行了改變,也可不作此判斷,如下例所示。

4.1.3 對VBA幫助系統上的壹點疑問探討

在VBA幫助系統中,介紹Find方法和FindNext方法所使用的示例好像有點問題:當在Excel中運行時,雖然運行結果正確,但是在運行到最後時,會報錯誤:運行時錯誤’91’:對象變量或With塊變量未設置。究其原因,可能是對象變量c的問題,因為當進行查找並將相應的值全部改變後,最後變量c的值為Nothing。將其稍作改動後,運行通過。

原示例代碼如下:(大家也可參見VBA幫助系統Find方法或FindNext方法幫助主題)

本示例在單元格區域A1:A500中查找值為2的單元格,並將這些單元格的值變為5。

With Worksheets(1).Range("a1:a500")

Set c = .Find(2, lookin:=xlValues)

If Not c Is Nothing Then

firstAddress = c.Address

Do

c.Value = 5

Set c = .FindNext(c)

Loop While Not c Is Nothing And c.Address <> firstAddress

End If

End With

經修改後的示例代碼如下,即在原代碼中加了壹句錯誤處理語句On Error Resume Next,忽略所發生的錯誤。

Sub test1()

Dim c As Range, firstAddress As String

On Error Resume Next

With Worksheets(1).Range("a1:a15")

Set c = .Find(2, LookIn:=xlValues)

If Not c Is Nothing Then

firstAddress = c.Address

Do

c.Value = 5

Set c = .FindNext(c)

Loop While Not c Is Nothing And c.Address <> firstAddress

End If

End With

End Sub

或者,將代碼作如下修改,即去掉原代碼中最後壹個判斷循環的條件c.Address <> firstAddress,因為本程序的功能是在指定區域查找值為2的單元格並替換為數值5,當程序在指定區域查找不到數值2時就會退出循環,不涉及到重復循環的問題。

Sub test2()

Dim c As Range, firstAddress As String

With Worksheets(1).Range("a1:a15")

Set c = .Find(2, LookIn:=xlValues)

If Not c Is Nothing Then

firstAddress = c.Address

Do

c.Value = 5

Set c = .FindNext(c)

Loop While Not c Is Nothing

End If

End With

End Sub

您也可以試試該程序,看看我的理解是否正確,或者還有什麽其它的解決辦法。

4.2 FindPrevious方法

可以使用該方法繼續執行Find方法所進行的查找,查找前壹個與Find方法中所指定條件的數據相匹配的單元格,返回代表該單元格的Range對象。在使用該方法時,不影響選定區域或活動單元格。

4.2.1 語法

<單元格區域>.FindPrevious(After)

4.2.2 參數說明

參數After,可選。代表所指定的單元格,將從該單元格之前開始進行查找。開始時不查找該位置所在的單元格,直到FindPrevious方法繞回到該單元格時,才對其內容進行查找。所指定的位置必須是單元格區域中的單個單元格,如果未指定本參數,則將從單元格區域的左上角的單元格之前開始進行查找。

當查找到指定查找區域的起始位置時,本方法將環繞至區域的末尾繼續查找。發生環繞後,為停止查找,可保存第壹次找到的單元格地址,然後測試下壹個查找到的單元格地址是否與其相同,作為判斷查找退出的條件,以避免出現死循環。

4.2.3 示例

在工作表中輸入數據,至少保證在A列中有兩個單元格輸入了數據“excelhome”。

在VBE編輯器中輸入下面的代碼測試Find方法、FindNext方法、FindPrevious方法,體驗各個方法所查找到的單元格位置。

‘- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Sub testFind()

Dim findValue As Range

Set findValue = Worksheets("Sheet1").Columns("A").Find(what:="excelhome")

MsgBox "第壹個數據發現在單元格:" & findValue.Address

Set findValue = Worksheets("Sheet1").Columns("A").FindNext(After:=findValue)

MsgBox "下壹個數據發現在單元格:" & findValue.Address

Set findValue = Worksheets("Sheet1").Columns("A").FindPrevious(After:=findValue)

MsgBox "前壹個數據發現在單元格" & findValue.Address

End Sub