免費(fèi)Excel之VBA編程之引用單元格_第1頁
免費(fèi)Excel之VBA編程之引用單元格_第2頁
免費(fèi)Excel之VBA編程之引用單元格_第3頁
免費(fèi)Excel之VBA編程之引用單元格_第4頁
免費(fèi)Excel之VBA編程之引用單元格_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Excel之VBA編程之引用單元格、區(qū)域的各種方法Excel單元格引用、區(qū)域的引用,在VBA編程中,有著重要的意義。掌握單元格、區(qū)域的引用方法,可方便我們對數(shù)據(jù)進(jìn)行相應(yīng)的處理。下面,是單元格、區(qū)域的引用方法之總結(jié),希望對您有幫助。用范圍來引用單元格及區(qū)域可使用Range屬性來引用A1引用樣式中的單元格或單元格區(qū)域。下述子程序?qū)卧駞^(qū)域A1:D5的字體設(shè)置為加粗。Workbooks(Book2).Sheets(Sheet2).Range(A1:D5).Font.Bold=True下表演示了使用Range屬性的一些A1樣式引用。引用含義Range(Al)Range(Al:B5)Range(C5:

2、D9,G9:Hl6)Range(A:A)Range(l:l)Range(A:C)Range(l:5)Range(l:l,3:3,8:8)Range(A:A,C:C,F:F)單元格Al從單元格Al到單元格B5的區(qū)域多塊選定區(qū)域A列第一行從A列到C列的區(qū)域從第一行到第五行的區(qū)域第l、3和8行A、C和F列用編號(hào)引用單元格通過使用行列編號(hào),可用Cells屬性來引用單個(gè)單元格。該屬性返回代表單個(gè)單元格的Range對象。下例中,Cells(6,l)返回Sheetl上的單元格A6,然后將Value屬性設(shè)置為10。Worksheets(Sheetl).Cells(6,l).Value=l0因?yàn)榭捎米兞刻娲幪?hào)

3、,所以Cells屬性非常適合于在單元格區(qū)域中循環(huán),如下例所示。DimCounterAsIntegerForCounter=lTo20Worksheets(Sheetl).Cells(Counter,3).Value=CounterNextCounter注意如果要同時(shí)更改某一單元格區(qū)域中所有單元格的屬性或?qū)ζ鋺?yīng)用方法,可使用Range屬性。引用行和列可用Rows屬性或Columns屬性來處理整行或整列。這兩個(gè)屬性返回代表單元格區(qū)域的Range對象。下例中,用Rows(1)返回Sheet1上的第一行,然后將單元格區(qū)域的Font對象的Bold屬性設(shè)置為True。Worksheets(Sheet1).

4、Rows(1).Font.Bold=True下表舉例說明了使用Rows和Columns屬性的一些行和列的引用。引用含義Rows(1)RowsColumns(1)Columns(A)Columns第一行工作表上所有的行第一列第一列工作表上所有的列若要同時(shí)處理若干行或列,請創(chuàng)建一個(gè)對象變量并使用Union方法,將對Rows屬性或Columns屬性的多個(gè)調(diào)用組合起來。下例將活動(dòng)工作簿中第一張工作表上的第一行、第三行和第五行的字體設(shè)置為加粗。Worksheets(Sheet1).ActivateDimmyUnionAsRangeSetmyUnion=Union(Rows(1),Rows(3),Rows

5、(5)myUnion.Font.Bold=True用快捷記號(hào)引用單元格可用方括號(hào)將A1引用樣式或命名區(qū)域括起來,作為Range屬性的快捷方式。這樣就不必鍵入單詞“Range”或使用引號(hào),如下例所示。Worksheets(Sheet1).A1:B5.ClearContentsMyRange.Value=30引用命名區(qū)域用名稱比用A1樣式記號(hào)更容易標(biāo)識(shí)單元格區(qū)域。若要命名選定的單元格區(qū)域,請單擊編輯欄左端的名稱框,鍵入名稱,再按Enter。引用命名區(qū)域下例引用了名為“MyBook.xls”的工作簿中的名為“MyRange”的單元格區(qū)域。Range(MyBook.xls!MyRange).Font.

6、Italic=True下例引用名為“Report.xls”的工作簿中的特定工作表單元格區(qū)域“Sheetl!Sales”。Range(Report.xlsSheet1!Sales).BorderAroundWeight:=xlthin若要選定命名區(qū)域,請用GoTo方法,該方法將激活工作簿和工作表,然后選定該區(qū)域。Application.GotoReference:=MyBook.xls!MyRangeSelection.ClearContents下例顯示對于活動(dòng)工作簿將如何編寫相同的過程。Application.GotoReference:=MyRangeSelection.ClearConte

7、nts在命名區(qū)域中的單元格上循環(huán)下例用ForEach.Next循環(huán)語句在命名區(qū)域中的每一個(gè)單元格上循環(huán)。如果該區(qū)域中的任一單元格的值超過limit的值,就將該單元格的顏色更改為黃色。ConstLimitAsInteger=25ForEachcInRange(MyRange)Ifc.ValueLimitThenc.Interior.ColorIndex=27EndIfNextc相對于其他單元格來引用單元格處理相對于另一個(gè)單元格的某一單元格的常用方法是使用Offset屬性。下例中,將位于活動(dòng)工作表上活動(dòng)單元格下一行和右邊三列的單元格的內(nèi)容設(shè)置為雙下劃線格式。ActiveCell.Offset(l,

8、3).Font.Underline=xlDouble注意可錄制使用Offset屬性(而不是絕對引用)的宏。在“工具”菜單上,指向“宏”,再單擊“錄制新宏”,然后單擊“確定”,再單擊錄制宏工具欄上的“相對引用”按鈕。若要在單元格區(qū)域中循環(huán),請?jiān)谘h(huán)中將變量與Cells屬性一起使用。下例以5為步長,用5到100之間的值填充第三列的前20個(gè)單元格。變量counter用作Cells屬性的行號(hào)。DimcounterAsIntegerForcounter=1To20Worksheets(Sheet1).Cells(counter,3).Value=counter*5Nextcounter用Range對象引

9、用單元格如果將對象變量設(shè)置為Range對象,即可用變量名方便地操作單元格區(qū)域。下述過程創(chuàng)建了對象變量myRange然后將活動(dòng)工作簿中Sheetl上的單元格區(qū)域A1:D5賦予該變量。隨后的語句用該變量代替該區(qū)域?qū)ο螅孕薷脑搮^(qū)域的屬性。DimmyRangeAsRangeSetmyRange=Worksheets(Sheetl).Range(Al:D5)myRange.Formula=RAND()myRange.Font.Bold=True引用工作表上的所有單元格如果對工作表應(yīng)用Cells屬性時(shí)不指定編號(hào),該屬性將返回代表工作表上所有單元格的Range對象。下述Sub過程清除活動(dòng)工作簿中Sheet

10、l上的所有單元格的內(nèi)容。Worksheets(Sheetl).Cells.ClearContents引用多個(gè)單元格區(qū)域使用適當(dāng)?shù)姆椒梢院苋菀椎赝瑫r(shí)引用多個(gè)單元格區(qū)域。可用Range和Union方法引用任意組合的單元格區(qū)域;用Areas屬性可引用工作表上選定的一組單元格區(qū)域。使用Range屬性通過在兩個(gè)或多個(gè)引用之間放置逗號(hào),可使用Range屬性來引用多個(gè)單元格區(qū)域。下例清除了Sheetl上三個(gè)單元格區(qū)域的內(nèi)容。Worksheets(Sheetl).Range(C5:D9,G9:Hl6,Bl4:Dl8)._ClearContents命名區(qū)域使得用Range屬性處理多個(gè)單元格區(qū)域更為容易。下例可

11、在三個(gè)命名區(qū)域處于同一工作表時(shí)運(yùn)行。Range(MyRange,YourRange,HisRange).ClearContents使用Union方法用Union方法可將多個(gè)單元格區(qū)域組合到一個(gè)Range對象中。下例創(chuàng)建了名為myMultipleRange的Range對象,并將其定義為單元格區(qū)域A1:B2和C3:D4的組合,然后將該組合區(qū)域的字體設(shè)置為加粗。Dimr1,r2,myMultipleRangeAsRangeSetr1=Sheets(Sheet1).Range(A1:B2)Setr2=Sheets(Sheet1).Range(C3:D4)SetmyMultipleRange=Union

12、(r1,r2)myMultipleRange.Font.Bold=True使用Areas屬性可用Areas屬性引用選定的單元格區(qū)域或多塊選定區(qū)域中的區(qū)域集合。下述過程計(jì)算選定區(qū)域中的塊數(shù)目,如果有多個(gè)塊,就顯示一則警告消息。IfSelection.Areas.Count1ThenMsgBoxCannotdothistoamultipleselection.EndIf在VBA代碼中引用Excel工作表中單元格區(qū)域的方式小結(jié)在使用e進(jìn)行編程時(shí),我們通常需要頻繁地引用單元格區(qū)域,然后再使用相應(yīng)的屬性和方法對區(qū)域進(jìn)行操作。所謂單元格區(qū)域,指的是單個(gè)的單元格、或者是由多個(gè)單元格組成的區(qū)域、或者是整行、整

13、列等。下面,我們設(shè)定一些情形,以問答的形式對引用單元格區(qū)域的方式進(jìn)行歸納。問題一:在B代碼中,如何引用當(dāng)前工作表中的單個(gè)單元格(例如引用單元格?)回答:可以使用下面列舉的任一方式對當(dāng)前工作表中的單元格(進(jìn)行引用。Range(C3CellCellRange(Range(D3)Range(A1)ffset(-1)et(,-1)et(2,2)若為當(dāng)前單元格,則可使用:ee()若將單元格命名為“Rangel”,則可使用:Range(Rangel)或Rangel()e()e(1)問題二:在B代碼中,我要引用當(dāng)前工作表中的B2:D6單元格區(qū)域,有哪些方式?回答:可以使用下面列舉的任一方式對當(dāng)前工作表中單元

14、格區(qū)域B2:D6進(jìn)行引用。Range(“B2:D6”)Range(B2,D6)B2:D6Range(Range(B2),Range(D6)Range(Cells(2,2),Cells(6,4)若將B2:D6區(qū)域命名為“MyRange”,則又可以使用下面的語句引用該區(qū)域:Range(MyRange)MyRangeRange(B2).Resize(5,3)Range(A1:C5).Offset(1,1)()若單元格2為當(dāng)前單元格,則可使用語句:Range(AieCeAieCee(2)(1)若單元格為當(dāng)前單元格,則可使用語句:Range(2AieCe)問題三:在代碼中,如何使用變量實(shí)現(xiàn)對當(dāng)前工作表中

15、不確定單元格區(qū)域的引用?回答:有時(shí),我們需要在代碼中依次獲取工作表中特定區(qū)域內(nèi)的單元格,這通常可以采取下面的幾種方式:Range(“A”&i)Range(“A”&i&“:C”&i)CeAAs(i,1)CeAAs(i,j)其中,i、為變量,在循環(huán)語句中指定i和的范圍后,依次獲取相應(yīng)單元格。問題四:在代碼中,如何擴(kuò)展引用當(dāng)前工作表中的單元格區(qū)域?回答:可以使用Rei屬性,例如:AieCeRei,e表示自當(dāng)前單元格開始創(chuàng)建一個(gè)行列的區(qū)域。Range(2)Reie(2表示創(chuàng)建2:C單元格區(qū)域。()Range(2)Rei表示創(chuàng)建2:單元格區(qū)域。()Range(2)Rei,e表示創(chuàng)建2:C2單元格區(qū)域。如

16、果是在一個(gè)單元格區(qū)域(如:e或一個(gè)命名區(qū)域中(如將單元格區(qū)域:命名為“MyRange”)使用Rei屬性,則只是相對于單元格區(qū)域左上角單元格擴(kuò)展區(qū)域,例如:代碼Range(C:)Rei,表示單元格區(qū)域C:,并且擴(kuò)展的單元格區(qū)域可不在原單元格區(qū)域內(nèi)。因此,可以知道Rei屬性是相對于當(dāng)前活動(dòng)單元格或某單元格區(qū)域中左上角單元格按指定的行數(shù)或列數(shù)擴(kuò)展單元格區(qū)域。問題五:在代碼中,如何在當(dāng)前工作表中基于當(dāng)前單元格區(qū)域或指定單元格區(qū)域處理其它單元格區(qū)域?回答:可以使用屬性,例如:Range(1).ActiveCeActiveCelset(,,表示單元格C3。,表示當(dāng)前單元格下一列的單元格。,表示當(dāng)前單元格下

17、一行的單元格。Range(C3:D).set(,表示單元格區(qū)域D3:,即將整個(gè)區(qū)域偏移一列。從上面的代碼示例可知,屬性從所指定的單元格開始按指定的行數(shù)和列數(shù)偏移,從而到達(dá)目的單元格,但偏移的行數(shù)和列數(shù)不包括指定單元格本身。問題六:在代碼中,如何在當(dāng)前工作表中引用交叉區(qū)域?回答:可以使用ntese方法,例如:nteset(Range(C3:6ar)ge(D:F8)表示單元格區(qū)域D:,即單元格區(qū)域C3:與D:F8相重迭的區(qū)域。問題七:在代碼中,如何在當(dāng)前工作表中引用多個(gè)區(qū)域?回答:(1)可以使用no方法,例如:non(Range(C3:D4)Range(:F)表示單元格區(qū)域C3:D4和:1所組成的

18、區(qū)域。no方法可以將多個(gè)非連續(xù)區(qū)域連接起來成為一個(gè)區(qū)域,從而可以實(shí)現(xiàn)對多個(gè)非連續(xù)區(qū)域一起進(jìn)行操作。()也可以使用下面的代碼:Range(C3:D4,:F或)C3:D4,:F注意:Range(C3:D4,F(xiàn):G,表示單元格區(qū)域C3:G,即將兩個(gè)區(qū)域以第一個(gè)區(qū)域左上角單元格為起點(diǎn),以第二個(gè)區(qū)域右下角單元格為終點(diǎn)連接成一個(gè)新區(qū)域。同時(shí),在引用區(qū)域后使用Rows屬性和Cou1屬性時(shí),注意下面代碼的區(qū)別:Range(C3:D4,F8:G10).Rows.Count,返回的值為8;Range(C3:D4,F8:G10).Rows.Count,返回的值為,即只計(jì)算第一個(gè)單元格區(qū)域。問題八:在代碼中,如何引用

19、當(dāng)前工作表中活動(dòng)單元格或指定單元格所在的區(qū)域(當(dāng)前區(qū)域)?回答:可以使用enRel!性,n例如:()ee,表示活動(dòng)單g元格所在的當(dāng)前區(qū)域。()Range(D)en,表示單元格D所在的當(dāng)前區(qū)域。當(dāng)前區(qū)域是指周圍由空行或空列所圍成的區(qū)域。該屬性的詳細(xì)使用參見enRegn性示例一文。問題九:在代碼中,如何引用當(dāng)前工作表中已使用的區(qū)域?回答:可以使用eRaflH性,例如:()eee,表示當(dāng)前工作表中已使用的區(qū)域。()ee(ee,表示工作表Rangeee中已使用的區(qū)域。與enRe屬性不同的是,該屬性代表工作表中已使用的單元格區(qū)域,包括顯示為空行,但已進(jìn)行過格式的單元格區(qū)域。該屬性的詳細(xì)使用參見解析eRa

20、flH性一文。問題十:如何在單元格區(qū)域內(nèi)指定特定的單元格?回答:可以使用eg性,例如:()Range(:0)指定單元格),這個(gè)單元格處于以區(qū)域中左上角單元格即區(qū)域中第行第列的單元格)為起點(diǎn)的第行第歹u。因?yàn)閑g性為默認(rèn)屬性,因此也可以簡寫為:Range(:0)(。,)如果將:區(qū)域命名為”MyRange”,那么Range(MyRange)(,也指定單元格。()Range(:0)(指定單元格M,即用這種方式引用單元格,該單元格不必一定要包含在區(qū)域內(nèi)。同時(shí),也不需要索引數(shù)值是正值,例如:Range(D4:F6)(0,0)代表單元格;Range(D4:F6)(,代表單元格。而Range(D4:F6)(

21、,代表單元格D4。,也可以在單元格區(qū)域中循環(huán),例如:,Range(D4:F6)(,)(代表單元格,即該單元格位于作為左上角單元格的第行第列因?yàn)槭情_始于區(qū)域中左上角單元格起的第行第列)也能使用一個(gè)單個(gè)的索引數(shù)值進(jìn)行引用。計(jì)數(shù)方式為從左向右,即在區(qū)域中的第一行開始從左向右計(jì)數(shù),第一行結(jié)束后,然后從第二行開始從左到右接著計(jì)數(shù),依次類推。(注:從區(qū)域中第一行第一個(gè)單元格開始計(jì)數(shù),當(dāng)?shù)谝恍薪Y(jié)束時(shí),轉(zhuǎn)入第二行最左邊的單元格,這樣按一行一行從左向右依次計(jì)數(shù)。以單元格區(qū)域中第1個(gè)單元格開始,按上述規(guī)則依次為第個(gè)單元格、第個(gè)單元格等等,例如:代表單元格1代表單元格;代表單元格;代表單元格。這種方法可在工作表中連

22、續(xù)向下引用單元格(即不一定是在單元格區(qū)域內(nèi),但在遵循相同的規(guī)律,例如:代表單元格;代表單元格,等等。也可以使用單個(gè)的負(fù)數(shù)索引值。這種使用單個(gè)索引值的方法對遍歷列是有用的,例如,代表單元格,代表單元格,代表單元格,等等。同理,稍作調(diào)整后也可遍歷行,例如:代表單元格,指定單元格,等等。當(dāng)與對象變量配合使用時(shí),屬性能提供簡潔并有效的代碼,例如:定義了對象變量后,像單元格方法一樣,屬性允許使用兩個(gè)索引數(shù)值引用工作表中的任一單元格,例如,指定單元格。問題十一:在代碼中,如何引用當(dāng)前工作表中的整行或整列?回答:見下面的示例代碼:c表示選擇歹U。表示選擇列至列。,表示選擇第一行。表示選擇第行至第行。表示列;

23、,表示列。同樣的方式,也可以選擇整行,然后可以使用如方法對整列或整行進(jìn)行調(diào)整。問題十二:在B代碼中,如何引用當(dāng)前工作表中的所有單元格?回答:可以使用下面的代碼:Cells,表示當(dāng)前工作表中的所有單元格。Range(Cells(11)Cells(Cells.Ros.ContCells.Colns.Co其中)Cells.Ros表示工作表所有行,Cells.Colr表示工作表所有列。問題十三:在B代碼中,如何引用工作表中的特定單元格區(qū)域?回答:在工作表中,您可能使用過“定位條件”對話框??梢酝ㄟ^選擇菜單“編輯定位”,單擊“定位”對話框中的“定位條件”按鈕顯示該對話框。這個(gè)對話框可以允許用戶選擇特定的

24、單元格。例如:Worksheets(sheet1).Cells.SealCells(xlCellyelloratCon表示tons)工作表sheet1中由帶有條件格式的單元格所組成的區(qū)域。teCell.CrrentRegon.SealCells(xlCelly表示當(dāng)前工作表中活動(dòng)單元格所在區(qū)域中所有空白單元格所組成的區(qū)域。當(dāng)然,還有很多常量和值的組合,可以讓您實(shí)現(xiàn)特定單元格的查找并引用。參見探討在工作表中找到最后一行一文。問題十四:在B代碼中,如何引用其它工作表或其它工作簿中的單元格區(qū)域?回答:要引用其它工作表或其它工作簿中的單元格區(qū)域,只需在單元格對象前加上相應(yīng)的引用對象即可,例如:Work

25、sheets(“Sheet3”).Range(“C3:D5”),表示引用工作表sheet3中的單元格區(qū)域C3:D5。Workbooks(“MyBook.xls”).Worksheets(“sheet1”).Range(“B2”),表示引用MyBook工作簿中工作表Sheet1上的單元格B2。問題十五:還有其它的一些情形嗎?回答:列舉如下:()Cells(,)表示單元格,即可在Cells屬性中指定單元格數(shù)字來選擇單元格,其計(jì)數(shù)順序?yàn)樽宰笾劣摇纳系较?,又如Cells(,表示單元格。()Cells(,表示單元格,但是如果Cells(,則會(huì)返回錯(cuò)誤。結(jié)語我們用對Exe進(jìn)行處理,一般是對其工作表中的數(shù)

26、據(jù)進(jìn)行處理,因此,引用單元格區(qū)域是Exel編程中最基本的操作之一,只有確定了所處理的單元格區(qū)域,才能使用相應(yīng)的屬性和方法進(jìn)行下一步的操作。上面列舉了一些引用單元格區(qū)域的情形和方式,可以看出,引用單元格區(qū)域有很多方式,有一些可能不常用,可以根據(jù)工作表的所處的環(huán)境和個(gè)人編程習(xí)慣進(jìn)行選擇使用。當(dāng)然,在編寫程序時(shí),也可能會(huì)將上面的一些屬性聯(lián)合使用,以達(dá)到選取特定操作對象的目的,例如s屬性、Res屬性、CuentReg屬才生、UsedRange屬性等的組合。找到最后一行的一些方法探討使用End屬性在Exel中A使用End(xlUp)查找最后一行是最常使用且最為簡單的方法,它假設(shè)要有一列總包含有數(shù)據(jù)(數(shù)字

27、、文本和公式等),并且在該列中最后輸入數(shù)據(jù)的單元格的下一行不會(huì)包含數(shù)據(jù),因此不必?fù)?dān)心會(huì)覆蓋掉已有數(shù)據(jù)。但該方法有兩個(gè)缺點(diǎn):僅局限于查找指定列的最后一行。如果該列中最后一行被隱藏,那么該隱藏行將被視作最后一行。因此,在最后一行被隱藏時(shí),其數(shù)據(jù)可能會(huì)被覆蓋。但該列中間的隱藏行不會(huì)影響查找的結(jié)果。示例代碼01SubEndxlUp_OneColLastRow()IfRange(A&Rows.Count).End(xlUp)=EmptyThenGoToFinis獲取最后一行sgox最后一行是第&Range(A&Rows.Count).End(xlUp).Row&“行.”ExitSubFinish:sgo

28、x沒有發(fā)現(xiàn)公式或數(shù)據(jù)EndSub示例代碼02ubNextRowInColumnUsedAsSub()包含所有數(shù)據(jù)和公式,忽略隱藏的最后一行Range(A&Range(A&Rows.Count).End(xlUp).Row+1).SelectEndSub示例代碼SubNextRowInColumnUsedAsFunction()包含所有數(shù)據(jù)和公式,忽略隱藏的最后一行EndRaneSub&astRownolun).SelectPublicFunctionLastRowInColumn(ColumnAsString)AsLongastRowInColun=Raneolun&Rows.Count).E

29、nd(xlUp).RowEndFunction注意,要輸入新數(shù)據(jù)的列可能與我們所查找最后一行時(shí)所使用的列不同,例如,在上例中,我們可以修改為在列中查找該列的最后一行,而在列相應(yīng)行的下一行中輸入新的數(shù)據(jù)。使用in方法in方法在當(dāng)前工作有數(shù)據(jù)中進(jìn)行查找,不需要指定列,也可以確保不會(huì)意外地覆蓋掉已有數(shù)據(jù)。其中,參數(shù)00指定所查找的類型,有三個(gè)常量可供選擇,即xlaluesxlorula和xloents常量xlorula|將包含零值的單元格作為有數(shù)據(jù)的單元格。當(dāng)設(shè)置零值不顯示時(shí),該單元格看起來為空,但該參數(shù)仍將該單元格視為有數(shù)據(jù)的單元格)常量xlalues將包含零值的單元格如果設(shè)置零值不顯示時(shí))作為空

30、白單元格,此時(shí),若該單元格在最后一行,則in方法會(huì)認(rèn)為該單元格所在的行為空行,因此,該單元格中的內(nèi)容可能會(huì)被新數(shù)據(jù)所覆蓋。注:在Excel中,選擇菜單“工具”一一“選項(xiàng)”,在打開的“選項(xiàng)”對話框中,選擇“視圖”選項(xiàng)卡,將其中的“零值”前的復(fù)選框取消選中,則工作表中的零值都不會(huì)顯示如果在參數(shù)oo中使用常量xlalues的話,還存在一個(gè)問題是:如果您將最后一行隱藏,則in方法會(huì)認(rèn)為倒數(shù)第二行是最后一行,此時(shí)您在最后一行的下一行輸入數(shù)據(jù),則會(huì)將實(shí)際的最后一行的數(shù)據(jù)覆蓋。您可以在隱藏最后一行與不隱藏最后一行,或者是最后一行顯示零值與不顯示零值時(shí),運(yùn)行下面的示例代碼0,4看看所得的結(jié)果有什么不同。示例代

31、碼04SubFind_LastRowxlValues()OnErrorGoToFinish獲取最后一行so最后一行是第&ells.inSearchrer:=xlRowsoon:=xlaluesSearchDirection:=xlPrevious).EntireRow.Row&“行”ExitSubinish:。沒有發(fā)現(xiàn)數(shù)值!MsEndSub因此,在使用in方法時(shí),您應(yīng)該考慮所選參數(shù)設(shè)置的常量,以及工作表最后一行是否有可能被隱藏或不顯示零值。如果您忽視這些情況,很可能得不到您想要的結(jié)果,或者是覆蓋掉已有數(shù)據(jù)。使用常量xlorula可以避免這個(gè)問題,如下面的示例代碼所示。示例代碼SuinastRo

32、wxlorulas)nErrorooinish獲取最后一行so最后一行是第&ells.inSearchrer:=xlRowsoon:=xlorulasSearchDirection:=xlPrevious).EntireRow.Row&“行ExitSubFinish:s。沒發(fā)現(xiàn)數(shù)值或公式!EndSub下面再列舉幾個(gè)示例代碼。示例代碼06SubNextRowUsedAsSub()選取最后一行的下一行*,LookIn:=xlFormulas).SelectRange(A&Cells.FinSearchDirection:=xlPrevious).RowEndSub示例代碼07SubNextRowU

33、sedAsFunction()選取最后一行的下一行(調(diào)用函數(shù))Range(A&LastRow+1).SelectEndSubPublicFunctionLastRow()AsLong本代碼包含隱藏行使用常量xlorulas因?yàn)槌A縳lalues會(huì)忽略隱藏的最后一行astRow=ells.inoon:=xlorulasSearchDirection:=xlPrevious).RowEndFunction注:in方法中,參數(shù)oo的默認(rèn)值為xlorulas使用方法方法用于查找指定類型的值,其語法為,有兩種主要的使用方式:若參數(shù)僅考慮常量,則在查找時(shí)會(huì)忽略和覆蓋由公式生成的任何數(shù)據(jù),如示例代碼所示。若

34、參數(shù)僅考慮由公式生成的數(shù)據(jù),則在查找時(shí)會(huì)忽略和覆蓋任何常量數(shù)據(jù),如示例代碼所示。如果參數(shù)是或者是,則參數(shù)可使用常量決定哪種類型的單元格將被包含在結(jié)果中,這些常量值能組合而返回多個(gè)類型,其缺省設(shè)置是選擇所有的常量或公式,而不管是何類型,可使用下面四個(gè)可選的常量:包含數(shù)字包含邏輯值包含文本包含錯(cuò)誤值自已在工作表輸入一些含有數(shù)值和公式的數(shù)據(jù),隱藏或不隱藏最后一行或公式所在的行,先體驗(yàn)下面的兩段示例代碼。示例代碼08當(dāng)最后一行為公式或隱藏了最后行時(shí),會(huì)忽略,即認(rèn)為倒數(shù)第二行為最后一行沒有發(fā)現(xiàn)數(shù)據(jù)!示例代碼09查找含有公式的單元格所在的行,忽略該行以后的常量和隱藏的行SubNexREndSubtForm

35、ulaange(A&RowFuncstFtion()ormulaRow(TPublicFunctionstFormulaRow(OOptionaOptionaOptionaDimTextAsLonNumbersAsDimLogicalAsLong,AllTypesIncludeTextenText=IncludeNumbersenNumbIncludeErrorsThenErrors=IncludeLogilshenLogAllTypes=Textumbers+EOnErrorGoToFinisstFormulaRowrue,True,True,True)+1).SelectptionalIn

36、cludeTextAsBooleaan,_lIncludeNumbersAsBoolean,lIncludeErrorsAsBoolean,_lIncludeLogicalsAsBoolean)AsLonLong,ErrorsAsLongAsLongxlTextValuesElseText=ers=xlNumbersElseNumbersxlErrorsElseErrorsical=xlLogicalElseLogicalrrors+LogicalSplit(Cells.SpecialCells(xlCellTypeFormulas,AllTypes).Address,$)_(UBound(S

37、plit(Cells.SpecialCells(xlCellTypeFormulas,AllTypes).Address,$)ExitFunctioninisMsgBox沒有發(fā)現(xiàn)數(shù)據(jù)!EndFunction下面的示例代碼10忽略最后一行帶有公式的單元格,即當(dāng)最后一行的單元格中含有公式時(shí),將倒數(shù)第二行作為最后一行,即只考慮直接輸入到工作表中的數(shù)據(jù)。當(dāng)最后一行沒有公式但被隱藏時(shí),并不影響該方法的判斷。示例代碼10SubSpecialCells_LastRowxlCellTypeConstants()DimMyRowAsRangeOnErrorGoToFinishSetMyRow=Intersect

38、(A:A,Cells._SpecialCells(xlCellTypeConstants).EntireRow).EntireRow獲取最后一行MsgBox最后一行是第&Split(MyRow.Address,$)_(UBound(Split(MyRow.Address,$)&“行”SetMyRow=NothingExitSubinisMsgBox沒有發(fā)現(xiàn)數(shù)據(jù)!EndSub注:因?yàn)樯鲜龃a使用了Split函數(shù),故只適合于ie及以上的版本。該方法也允許我們指定單個(gè)數(shù)據(jù)類型,諸如數(shù)字?jǐn)?shù)據(jù)或文本數(shù)據(jù),如下所示。下面,我們查找的最后一行是僅在行中有數(shù)字(而不包含公式)的單元格的最后一行。示例代碼11S

39、ubSpecialCells_LastRowxlCellTypeNumberConstants()DimMyRowAsRangeOnErrorGoToFinishSetMyRow=Intersect(A:A,Cells._SpecialCells(xlCellTypeConstants,xlNumbers).EntireRow)獲取最后一行MsgBox最后一行是第&Split(MyRow.Address,$)_(UBound(Split(MyRow.Address,$)&“行”SetMyRow=NothingExitSubFinish:MsgBox沒有發(fā)現(xiàn)數(shù)據(jù)!EndSub下面,我們查找的最后

40、一行是僅在行中有文本(而不包含公式)的單元格的最后一行。示例代碼12SubSpecialCells_LastRowxlCellTypeTextConstants()DimMyRowAsRangeOnErrorGoToFinishSetMyRow=Intersect(A:A,Cells._SpecialCells(xlCellTypeConstants,xlTextValues).EntireRow)獲取最后一行MsgBox最后一行是第&Split(MyRow.Address,$)_(UBound(Split(MyRow.Address,$)&“行”SetMyRow=NothingExitSubFinish:MsgBox沒有發(fā)現(xiàn)數(shù)據(jù)!EndSub下面,我們查找的最后一行是僅在行中有公式的單元格的最后一行。示例

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論