久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Excel 墻上那一串串紅辣椒——數(shù)組入門講座

 9 1 1 2011-03-19

墻上那一串串紅辣椒——數(shù)組入門講座

轉(zhuǎn)自 山菊花老師的作品 :http://club./viewthread.php?tid=196095&px=0
寫個學(xué)習(xí)數(shù)組的帖子,,送給初學(xué)的朋友。

1,、什么是數(shù)組

數(shù)組就是把數(shù)據(jù)組合起來以方便管理,,在程序中運用數(shù)組可簡化程序、提高效率,。

學(xué)習(xí)數(shù)組并不難,。我奶奶就是玩數(shù)組的高手,她到地里,,用根紅繩子將采下的辣椒一只一只串起來帶回家掛在門前那墻上,,她把這串辣椒稱為“紅繩子”,墻上還有“大串”,、“初一”,、“五兒”……,現(xiàn)在我才明白,,那是數(shù)組名,。中午,奶奶要我把紅繩子第5顆辣椒摘下來,,我不知道奶奶為什么要摘第5顆,,反正我照辦就是,奶奶說,,她要我摘“紅繩子(5)”是想考考我數(shù)數(shù)的能力,,暈,一二三四五,,上山打老虎,,我還能數(shù)錯嗎?那年我已經(jīng)四歲了,。奶奶說話總喜歡用數(shù)組,,好比“尚云嫂她家那七個孩子啊就是有出息!”,你知道奶奶用哪個數(shù)組說話,?如果還不知道,,等會再告訴你,。

山版主的文章讀起來瑯瑯上口,用幾個簡單的生活中的例子就可以把一個問題講得很透徹,。本文確實是新手學(xué)習(xí)的好材料,,歡迎大家補充?!猲orthwolves
 

2,、用Array創(chuàng)建數(shù)組

今天,我們在Excel上來玩?zhèn)€串辣椒的游戲,。新建一Excel文件,,按Alt+F11打開VBE窗口,,如圖所示打開本地窗口備用,。
 
 
 

插入一新的模塊,在代碼窗口中寫入代碼:

Sub test()

紅繩子 = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10")

End Sub

F8,,逐行運行代碼,,如圖所示,我們可以看到,,程序成功創(chuàng)建了一個數(shù)組,,數(shù)組名稱是“紅繩子”,"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"是數(shù)組元素,。
 



Array()創(chuàng)建數(shù)組,,各元素之間用逗號隔開。元素如果是文本,,要用半角引號作定界符,。

 

練習(xí),創(chuàng)建兩個數(shù)組:

⑴數(shù)組名為cName,,數(shù)據(jù)為10個同學(xué)的姓名:林思明,、曾玉婷、曾國文,、林偉權(quán),、林興發(fā)、劉卓懷,、曾仙婷,、林平

⑵數(shù)組名為cj,數(shù)據(jù)為10個數(shù)值:99, 85, 92.5, 70, 78.5, 65, 84, 100

參考答案:數(shù)組入門01.xls

3,、像和尚數(shù)念珠一樣把數(shù)組玩轉(zhuǎn)

我們已經(jīng)初步認(rèn)識了數(shù)組,,數(shù)組是把一組數(shù)保存到一個數(shù)組變量中,它有兩個重要特征,。

⑴它是一個變量,,對一組數(shù)進行統(tǒng)一管理帶來方便,。上面建立的姓名數(shù)組,我們要把它寫入到工作表區(qū)域A1向右連續(xù)8個單元格中,,可用命令:

Range(“a1:h1”)=cname

我們認(rèn)識的這類數(shù)組,,稱為一維數(shù)組,一維數(shù)組是一個水平數(shù)組,,相當(dāng)于工作表中的行,。如果要把姓名按垂直方向填充到單元格,可轉(zhuǎn)置命令,。如,,把這個數(shù)組寫入到A1:A8單元格中:

Range(“a1:a8”)= WorksheetFunction.Transpose(cname)

練習(xí):把數(shù)組cname分別寫入到單元格C4:J4D8:D15,。

答案:數(shù)組入門02.xls

 

⑵第二上重要的特征,,是數(shù)組元素的有序性,一組數(shù)據(jù)有序地保存到數(shù)組變量中,。數(shù)組中,,用數(shù)組名加序號(稱索引值)構(gòu)成唯一的名稱對元素進行引用。元素與序號一一對應(yīng),,根據(jù)序號,,可以修改和讀取指定位置上的元素。

 

把一串姓名保存到數(shù)組cName中,,數(shù)據(jù)在數(shù)組中按順序保存,,默認(rèn)從0開始,依次是1,、2,、3……,用cName(0)表示第一個姓名,、cName(1)表示第二個姓名,,等等。

 

在工作表中插入一個按鈕,,點擊按鈕,,把姓名填入單元格A1:A8中:

Private Sub CommandButton1_Click()

    cname = Array("林思明", "曾玉婷", "曾國文", "林偉權(quán)", "林興發(fā)", "劉卓懷", "曾仙婷", "林平")

    For i = 1 To 8

        Range("a" & i) = cname(i - 1)

    Next

End Sub

 

數(shù)組序號(索引值)默認(rèn)從0開始,也可以通過命令OPTION BASE 1修改為從1開始,。該命令寫在模塊的前面,。如果設(shè)定索引值從1開始,則上面的代碼修改為:

Private Sub CommandButton1_Click()

    cname = Array("林思明", "曾玉婷", "曾國文", "林偉權(quán)", "林興發(fā)", "劉卓懷", "曾仙婷", "林平")

    For i = 1 To 8

        Range("a" & i) = cname(i ) ‘工作表行號與數(shù)組序號相吻合

    Next

End Sub

 

參考:數(shù)組入門03.xls

 

4,、想起瑞士軍刀

Array()很好用,,但有時Split()更好用,我們?nèi)〕鲞@瑞士軍刀的第二利器,。

Split()把一個文本,,根據(jù)指定的分隔符,,建立一個數(shù)組。

看一個實例:

單元格A1中有一串姓名:

朱清燕(),林鑫,林秋靜(),林永鑫,林云艷(),林嘉惠(),曾文婷(),林悅,陳誠,林偉健,賴紫嵐(),曾雁(),賴文強,鐘娟(),張琪(),林文彬,黃曉婷(),李朕,林依婷(),林佳利(),曾德福

要求:用Split(),,把這串文本創(chuàng)建為一個數(shù)組:

Sub test()

XM = Split(Range("a1"), ",")

End Sub

同樣可以用本地窗口檢查轉(zhuǎn)換結(jié)果,。

注意,Split()函數(shù)把文本轉(zhuǎn)換成數(shù)組,,并不受Option Base的影響,,索引號總是從0開始。

很自然想知道,,A1單元格中有多少個姓名,?創(chuàng)建的數(shù)組有多少個元素?瑞士軍刀中有把小尺子,,可以量一量:

Ubound()——返回數(shù)組的最大下標(biāo),。

Sub test()

    xm = Split(Range("a1"), ",")

    MsgBox "數(shù)組最大下標(biāo)是 " & UBound(xm) & Chr(13) _

    & "數(shù)組共有 " & UBound(xm) + 1 & " 個元素"

End Sub

參考:數(shù)組入門04.xls

 

5、三維表示一個空間,,四維,、五維、六維呢,?

三維已經(jīng)可以代表寬廣無垠的宇宙,而數(shù)組卻允許聲明為4維,、5維,、6維,直至60維,。這是一個什么樣的概念,?我曾經(jīng)打過一個這樣的比方:

http://club./dispbbs.asp?BoardID=3&ID=185500&replyID=504536&skin=0

 

6、由工作表區(qū)域創(chuàng)建數(shù)組,。

Array()Split()相比,,由工作表區(qū)域創(chuàng)建數(shù)組更加直觀而簡易,一個等號便解決問題:

如:用Sheet2工作表A1:E83的數(shù)據(jù)創(chuàng)建一個數(shù)組:

Private Sub CommandButton1_Click()

    arr = Sheet2.Range("a1:e83")

End Sub

如果把該數(shù)據(jù)復(fù)制到Sheet1工作表相同區(qū)域,,用數(shù)組操作,,代碼如下:

Private Sub CommandButton1_Click()

    arr = Sheet2.Range("a1:e83")

    Range("a1:e83") = arr

End Sub

共兩句,前一句把數(shù)據(jù)保存到數(shù)組,,第二句,,把數(shù)組內(nèi)容寫入到工作表。

選擇第3行代碼,,按F9設(shè)置斷點,。點擊按鈕運行代碼,到該行,,程序自動中斷,,此時,,可從本地窗口中觀察到運行結(jié)果,一個832列的數(shù)組已經(jīng)創(chuàng)建,。
 
 
 

也可以按F8逐行運行代碼,,查看數(shù)組創(chuàng)建的結(jié)果。

參考:數(shù)組入門05.xls

 

7,、隨心所欲創(chuàng)建數(shù)組

以上幾種辦法都是根據(jù)已有的數(shù)據(jù)創(chuàng)建數(shù)組,。實際使用中,更多時候,,程序需要先創(chuàng)建數(shù)組,,然后對數(shù)組進行賦值和修改。

Private,、Public,、DimStatic,,這些語句都可聲明數(shù)組變量,,區(qū)別在于聲明的數(shù)組的使用范圍,可查看各語句的幫助,。

新建一個過程:

Sub 聲明數(shù)組()

    Dim MyArray(10) '在過程中間聲明一個數(shù)組,,過程結(jié)束,本數(shù)組將被釋放,。

    MyArray(1) = 100 '給數(shù)組賦值

    MyArray(5) = 90

End Sub

F8逐行運行程序,,在本地窗口中可以看到數(shù)組MyArray()已成功創(chuàng)建。


 


Dim
是聲明變量的語句,;

MyArray是數(shù)組名稱,;

10是數(shù)組最大下標(biāo)。當(dāng)Option Base 0的模式下,,數(shù)組的序號(索引值)010,,表示數(shù)組有11個元素,當(dāng)Option Base 1的模式下,,數(shù)組的索引值從110,,該語句創(chuàng)建的數(shù)組共有10個元素。

 

上面聲明的數(shù)組是一維數(shù)組,,數(shù)組最大可以定義60維,。多維數(shù)組的表示方法,維與維之間用逗號相隔,。

Sub 聲明數(shù)組b()

Dim Data(10,5) ’聲明一個二維數(shù)組

    Data (1,1) = “A001” '給數(shù)組賦值

Data (1,2) = 90

    Data (3,1) = “A003”

Data (3,2) = 80

End Sub

這里,,Data是一個二維數(shù)組。二維數(shù)組的兩維,,我們通常用“行,、列”稱呼它,,如Data,最大行號是10,,最大列號是5,,在Option Base 1 模式下,表示是一個105列共50個元素的數(shù)組空間,。在Option Base 0 模式下,,表示一個116列共66個元素的數(shù)組空間。

二維數(shù)組是使用頻率最高的數(shù)組形式,,因為我們的工作表也是二維的,。

用工作表來領(lǐng)會二維數(shù)組,將會更加直觀:

Data(1,1)相當(dāng)于Cells(1,1),,表示第1行,,第1列;

Data(5,3)相當(dāng)于Cells(5,3),,表示第5行,,第3列。

下面的語句,,聲明的是一個三維數(shù)組:

Sub 聲明數(shù)組b()

Dim x(3,30,3)

    X (1,1,1) = “1” '給數(shù)組賦值

X (1,1,2) = “張三

    X (1,1,3) = 88

X (1,2,1) = “1” '給數(shù)組賦值

X (1,2,2) = “李四

    X (1,2,3) = 95

X (2,1,1) = “2” '給數(shù)組賦值

X (2,1,2) = “劉日

    X (2,1,3) = 92

 

End Sub




我們可以用工作簿的概念來遷移領(lǐng)會三維數(shù)組:

X(1,2,3):第1個工作表第2行第3列,;

X(2,14,10):第2個工作表第14行第10列。

假如我們要測量數(shù)組各維的最大下標(biāo),,可以在UBound()函數(shù)使用第二個參數(shù):

UBound(x,1),,返回數(shù)組x1維的最大下標(biāo);

UBound(x,2),,返回數(shù)組x2維的最大下標(biāo);

UBound(x,3),,返回數(shù)組x3維的最大下標(biāo),。

 

參考:數(shù)組入門06.xls

 

8、進階操作聲明數(shù)組

⑴聲明數(shù)組還可以根據(jù)需要自己指定下標(biāo)和上標(biāo),,而且不受Option Base 的影響:

 

Sub 聲明數(shù)組()

    Dim cArr(11 To 20) ‘聲明一個數(shù)組cArr,,下標(biāo)從1120,共有10個元素,。

    cArr(11) = ""

    cArr(12) = ""

    cArr(13) = ""

End Sub

 

數(shù)組的索引值還允許為負整數(shù):

Sub 聲明數(shù)組()

    Dim nArr(-10 To 10) ‘聲明一個數(shù)組 nArr,,下標(biāo)從-1010,共21個元素,。

    nArr(-10) = 123

    nArr(-9) = 456

    nArr(-2) = 789

End Sub

可變的下標(biāo)給你的程序帶來靈活性,,推薦另一個函數(shù):UBound()函數(shù)的姐妹花LBound()

LBound()可以返回指定數(shù)組維可用的最小下標(biāo),。如:

xb = LBound(nArr)

MsgBox xb

 

⑵聲明數(shù)組時,,還允許像聲明單值變量一樣為數(shù)組指定為數(shù)據(jù)類型,。

Sub 聲明數(shù)組()

    Dim cArr(11 To 20) As String

    cArr(11) = ""

    cArr(12) = ""

    cArr(13) = ""

End Sub

As String 表示數(shù)組cArr()是一個字符型變量,在本地窗口中可以看到,,沒有賦值的元素默認(rèn)為空文本,。

Sub 聲明數(shù)組()

    Dim nArr(-10 To 10) As Integer

    nArr(-10) = 123

    nArr(-9) = 456

    nArr(-2) = 789

End Sub

As Integer表示數(shù)組nArr()是一個整型變量,在本地窗口中可以看到,,沒有賦值的元素默認(rèn)為0,。

沒有指定類型的變量,默認(rèn)為Variant,,沒有賦值的元素默認(rèn)為“空值”,。

 



參考:數(shù)組入門
07.xls

⑶變量的級別問題

以上都是在過程內(nèi)部聲明變量,當(dāng)過程結(jié)果時,,變量自動被釋放,。

在模塊級別中聲明變量,對該模塊中的所有過程都是可用的,。

參考:數(shù)組入門08.xls

 

如果要聲明級別更高的變量,,可使用Public語句。詳見幫助,。

 

 

9,、動態(tài)數(shù)組

以上聲明的數(shù)組都屬于“靜態(tài)數(shù)組”,每個數(shù)組有確定的維數(shù),,每維有確定的最大下標(biāo),。與之相對應(yīng)的是動態(tài)數(shù)組。程序中,,數(shù)組的大小有時不是固定的,,而是隨數(shù)據(jù)的變化而變化。

聲明數(shù)組的時候,,不指定數(shù)組的維數(shù)與下標(biāo),,這樣的數(shù)組就是動態(tài)數(shù)組,在程序中可用命令Redim為動態(tài)數(shù)組變量重新分配存儲空間,。

 

例:單元格A1中有一串姓名:

朱清燕(),林鑫,林秋靜(),林永鑫,林云艷(),林嘉惠(),曾文婷(),林悅,陳誠,林偉健,賴紫嵐(),曾雁(),賴文強,鐘娟(),張琪(),林文彬,黃曉婷(),李朕,林依婷(),林佳利(),曾德福

要求:把名單整理成兩列,,第一列是姓名,第二列是性別,,把它輸出到B:C兩列,。

 

與例4相同,用Split(),,把這串文本創(chuàng)建為一個數(shù)組,,然后根據(jù)這個數(shù)組的大小,創(chuàng)建另一個數(shù)組:

ReDim Arr(1 To s, 1 To 2)

其中s是數(shù)組xm()的最大下標(biāo),xm()有多少行,,Arr()就有多少行,,列數(shù)為2,一列是姓名,,另一列是性別,。

參考:數(shù)組入門09.xls

允許使用ReDim語句反復(fù)地改變數(shù)組的元素以及維數(shù)的數(shù)目,請自己練習(xí),。

 

10,、對同一數(shù)組的反復(fù)定義

對同一數(shù)組反復(fù)改變大小的時候,也有規(guī)則必須遵守,。如果數(shù)組中存在數(shù)據(jù),,再次定義的時候默認(rèn)把原數(shù)據(jù)清除,重新定義后的數(shù)組是一個空的數(shù)組,。如果你要保留原來的數(shù)據(jù),,必須加上參數(shù)Preserve。使用Preserve參數(shù)又有一個限制,,只能改變最后一維的大小,,比如二維數(shù)組,只能改變第2()的大小而不能改第1()的大小,。

 

還是使用上個示例,,要求把A1單元格中的女同學(xué)的姓名整理成兩列,第一列序號,,第二列是姓名,。

使用數(shù)組Arr()記錄整理結(jié)果,我們在遍歷原始數(shù)組xm()的時候,,根據(jù)性別的判斷即時改變Arr()的大小,。但不能把數(shù)組Arr()定義為n2列,第1列保存序號,,第2列保存姓名,,因為我們必須使用Preserve參數(shù)保留原來的數(shù)據(jù),此時數(shù)組Arr(n,2)的第一維是不允許改變的,。為了解決為個矛盾,我們可以把數(shù)組定義為2n列,,第一行記錄序號,,第二行記錄姓名,列數(shù)在程序過程中反復(fù)改變,。

n = n + 1

ReDim Preserve Arr(1 To 2, 1 To n) '改變動態(tài)數(shù)組的大小,,共2行,n

數(shù)組第1行記錄序號,,第2行記錄姓名:

Arr(1, n) = n

Arr(2, n) = Left(Xm(i), Len(Xm(i)) - 3) 

對數(shù)組xm()遍歷結(jié)束后,,把結(jié)果寫入工作表,,因為數(shù)組的方向與結(jié)果要求的方向不一致,所以要加一個轉(zhuǎn)置函數(shù):

Range("b6").Resize(n, 2) = WorksheetFunction.Transpose(Arr)

參考:數(shù)組入門10.xls

 

11,、搜索數(shù)組

園子里是不是有紅蘋果,?

你手中的牌是不是有紅桃K

我們用眼睛一瞄就知道,。數(shù)組元素中是不是有“張三”,,是不是有“李四”,我們?nèi)绾沃??不用?dān)心,,Filter()函數(shù)剛好可以幫你忙。

Filter()函數(shù)在一維數(shù)組中搜索文本型數(shù)據(jù),,并把結(jié)果保存到指定的數(shù)組中,。

A1單元格是以逗號分隔的姓名串,部分有重復(fù),,要求剔除其中重復(fù)的姓名,,把不重復(fù)的姓名寫入單元格A2向右的區(qū)域。

第一步,,把所有姓名保存到數(shù)組xm()中,;

第二步,建立一個數(shù)組Arr()保存結(jié)果,,遍歷xm()過程中,,檢查Arr()中是否存在當(dāng)前的姓名,用命令:

Temp = Filter(Arr, xm(i)) '在數(shù)組Arr()中搜索當(dāng)前值xm(i),,如果找到,,結(jié)果保存到Temp()數(shù)組中,如果找不到,,返回一個空的數(shù)組Temp()

根據(jù)Temp()數(shù)組的大小,,可以知道當(dāng)前值xm(i)是不是一個重復(fù)的值。

參考:數(shù)組入門11.xls

 

12,、連接數(shù)組元素

有一個函數(shù),,是Split()的反向操作函數(shù),把數(shù)組的元素連接成一個字符串,,這個函數(shù)就是Join(),。

在上例中,把要求改為,,剔除重復(fù)值后,,把結(jié)果依原樣輸出到A2單元格中。

我們只需改變最后一行代碼:

把這一行:

'Range("a2").Resize(1, r) = Arr '填充到工作表

換成這一行,用上Join()函數(shù),,把Arr()數(shù)組中的元素用“,”連接成一個字符串:

Range("a2") = Join(Arr, ",")

 

13,、清除數(shù)組

當(dāng)數(shù)組不需要使用時,可用Erase語句清除數(shù)組元素,,釋放變量占用的空間,。

語句:

Erase xm,Arr

每條Erase語句,可清除一個數(shù)組,,也可同時清除多個數(shù)組,,數(shù)組名之間用逗號分隔。

 

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多