国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
【原創(chuàng)】VBA學(xué)習(xí)筆記(13)VBA的數(shù)組 array

一 數(shù)組 array

1.1 數(shù)據(jù)定義

  • 靜態(tài)數(shù)組:長度不變的數(shù)組

  • 動(dòng)態(tài)數(shù)組:長度不定的數(shù)組,需要redim

  • 數(shù)組 arr() 必須先聲明后才可以使用!

1.2數(shù)組的index下標(biāo)

  • (1)數(shù)組的index下標(biāo)應(yīng)該是從0開始的,比如split生成的,還有未指定index下標(biāo)的

  •          如 dim arr1(5)

  • (2)但是數(shù)組的index下標(biāo)也有從1開始的情況,比如range 賦值的變量,默認(rèn)下標(biāo)從1開始

  •         如 arr2=range("b1:d5")

  • (3)數(shù)組的index下標(biāo)受控制的情況

  •        模塊最前面 option base  -1

  • (4)數(shù)組index下標(biāo)最好自己定義好

  •       如  dim arr3(1 to 5)

1.3 數(shù)組嚴(yán)格定義的重要性

  • Dim arr1(3)

  • Dim arr1( 1 to 3)

  • Option base 1 等等的意義

1.4 創(chuàng)建數(shù)組的方法

   創(chuàng)建數(shù)組的方法

  • (1) array()

  • (2) split()  (對(duì)應(yīng)join)

  • (3) 挨個(gè)元素賦值,甚至循環(huán)

  • (4) 變量/對(duì)象 = range對(duì)象(值)

Sub test101()rem 測(cè)試創(chuàng)建數(shù)組的各種方法Dim arr1Dim arr2Dim arr3(0 To 3)arr1 = Array(1, 2, 3, 4, 5, 6, 7)arr2 = Split("a,b,c,d,e,f,g", ",")arr3(0) = 1arr3(1) = 2Debug.Print arr1(1)Debug.Print arr2(1)Debug.Print arr3(1)End Sub

二 數(shù)組必須聲明大小后才可以使用

2.1 測(cè)試

  • 變量可以不事先定義,也可以不賦初值

  • 數(shù)組必須實(shí)現(xiàn)聲明大小后才可以使用

  • rem 變量可以賦初值,就可以表達(dá)式運(yùn)算,不同類型的變量,默認(rèn)初值不同

  • rem 數(shù)組必須聲明大小后才可以使用,包括運(yùn)算,或者賦值

2.2 語法差別比較

  • js 里 變量名 $a  字符串a(chǎn)  

  • 和其他語言不同的,其他語言標(biāo)準(zhǔn) 字符,字符串為 "", 變量名不用特殊標(biāo)記

  • 而js 標(biāo)記了變量,本質(zhì)是一樣的

  • python里 變量 a 字符串" a” 函數(shù)  func()  數(shù)組 list=[]

  • 函數(shù)和數(shù)組形式完全不同,沒有實(shí)現(xiàn)區(qū)分的必要性

  • VBA里  變量 a   字符串 “a”  函數(shù) func()  數(shù)組 array()

  • 數(shù)組和函數(shù)形式很像,所以需要實(shí)現(xiàn)定義清楚,否則不好區(qū)分

  • 但是VB里,index用 ()  而不是一般語言的 []

Sub t3()Dim arr3(3) As Integerarr4(1) = 1   '直接會(huì)報(bào)錯(cuò),arr4未定義??!End Sub

rem 變量可以賦初值,就可以表達(dá)式運(yùn)算,不同的變量,默認(rèn)初值不同

Sub t3()rem 變量可以賦初值,就可以表達(dá)式運(yùn)算,不同的變量,默認(rèn)初值不同a = a + 1Debug.Print a'arr4(1) = 1   '直接會(huì)報(bào)錯(cuò),arr4未定義??!End Sub
'selectionSub 刪除空格4()Dim arr1()ReDim arr1(11)                      '不redim呢j = 0                               'j=1開始就會(huì)越界For i = 1 To 11 Step 1   If Not IsEmpty(Cells(i, 1)) Then      arr1(j) = Cells(i, 1)      j = j + 1   End IfNext iFor j = 0 To UBound(arr1())    Cells(j + 1, 9) = arr1(j)      '單元格得從1開始,arr()得從0開始Next jEnd Sub

三 數(shù)組的 聲明+ 賦值  不同方法 

3.1 聲明定義數(shù)組有3種方法:

  •  直接聲明數(shù)組

  • 數(shù)組名為變量

  • 數(shù)組名為對(duì)象名


3.2 數(shù)組名(變量名)與數(shù)組

  • 變量名代表變量

  • dim a

  • 或者不聲明 a 直接使用也默認(rèn)為變量

  • 數(shù)組名 與數(shù)組     

  • 如果先聲明 dim arr1()

  •    arr1 就代表 arr1()  否則arr1 一般就被認(rèn)為是變量名

  • 函數(shù)名  與函數(shù)     

  • 如果先聲明的  function func1()

  • func1 就代表 func1()

3.3 數(shù)組不能被賦值,只有 數(shù)組的元素,變量,對(duì)象可以被賦值

  • 而數(shù)組不能被直接賦值

  • 只有數(shù)組的元素可以被賦值

  • 而變量,對(duì)象都是可以被直接賦值的

Sub test001()Rem VBA里的array是數(shù)組    Rem 數(shù)組不能被賦值,只能給數(shù)組的元素賦值Rem Excel里的range是對(duì)象,2維數(shù)組對(duì)象 <> 數(shù)組,range是對(duì)象不是數(shù)組!    Rem 對(duì)象是可以被賦值的,賦值給了對(duì)象的 range.value屬性Dim arr1(3)               '如果已經(jīng)聲明為數(shù)組名了,arr1就代表arr1(),以后就不能給數(shù)組賦值Dim arr2  As Variant      '相當(dāng)于dim arr2Dim arr3 As Object'arr1 = Range("a1:c1")     '不能給數(shù)組賦值? 只能給數(shù)組里的元素賦值?arr1 = Range("a1:c1").value 也不行arr1(0) = Range("a1")      '可以給數(shù)組的某個(gè)元素賦值arr2 = Range("a1:c1")      '可以給變量賦值,賦予這個(gè)變量整個(gè)數(shù)組Set arr3 = Range("a1:c3")  '可以把EXCEL的range 賦值給變量,或?qū)ο蟆H缓竽J(rèn)都成為了2維數(shù)組。Range("b2:c2") = 9999Debug.Print "arr1(0)=" & arr1(0)Debug.Print "arr2(1,1)=" & arr2(1, 1)Debug.Print "arr3(1,1)=" & arr3(1, 1)End Sub

四  數(shù)組定義和賦值

4.1 數(shù)組的 聲明/定義大小 和賦值 ----數(shù)組使用前需要定義數(shù)組大小

  • Dim Array

  • Dim Array()

  • Dim array as object

  • 無差別??--是不是有點(diǎn)太隨便了,反而不好學(xué)規(guī)律

  • 聲明數(shù)組的時(shí)候

  • 無論dim arr1   (as variant)

  • 還是 dim arr1()

  • 但是一旦  dim arr1 as object就有問題,數(shù)組不是對(duì)象? 報(bào)錯(cuò) 缺少數(shù)組

  • 但是一旦  dim arr1()  as object就有問題,數(shù)組不是對(duì)象?  報(bào)錯(cuò)缺少數(shù)組

總結(jié):這2種沒差別

  • dim arr1 或 dim arr1() 都可以

  • arr1=range 或 arr1()=range 都可以

Sub 測(cè)試1()Dim arr1 As Variantarr1 = Range("a1:c4")    '這里為什么不 set 為對(duì)象呢?Debug.Print arr1(3, 3)Debug.Print LBound(arr1)Debug.Print UBound(arr1)Debug.Print LBound(arr1, 2)  '二維數(shù)組,第1維默認(rèn)是行數(shù),往下數(shù)!Debug.Print UBound(arr1, 2)  '二維數(shù)組, array(row,column)Sub 測(cè)試2()Dim arr2()arr2 = Range("a1:c4")Debug.Print arr2(3, 3)Debug.Print LBound(arr2)Debug.Print UBound(arr2)Debug.Print LBound(arr2, 2)Debug.Print UBound(arr2, 2)End SubSub 測(cè)試3()Dim arr2()arr2() = Range("a1:c4")Debug.Print arr2(3, 3)Debug.Print LBound(arr2)Debug.Print UBound(arr2)Debug.Print LBound(arr2, 2)Debug.Print UBound(arr2, 2)End SubEnd Sub

4.2 array() 函數(shù)的作用----再升高一維數(shù)組

Sub 測(cè)試1()Dim arr1   '定義arr1() 其實(shí)arr1就代表了數(shù)組把  arr1()只是明晰了聲明了arr1是數(shù)組arr1 = Array(Range("a1:a4"), Range("b1:b4"), Range("c1:c4"))Rem array()轉(zhuǎn)的都是1維數(shù)組把, no 這里是三維數(shù)組Rem array 只是加一維,并非是轉(zhuǎn)成1維數(shù)組了Debug.Print arr1(0)(1)(1)For i = 1 To UBound(arr1)Debug.Print arr1(i)(2)(1) '寫成arr(i)會(huì)報(bào)類型不匹配,因?yàn)閿?shù)組維數(shù)不對(duì)Next iEnd Sub

4.3 關(guān)于dim array() 的index下標(biāo)

  • array 使用前,必須先定義 dim array() 大小

  • 無論是靜態(tài)的數(shù)組,或是靜態(tài)的大小  dim array(10) 或  redim  array()

  • 首先要記住,cells()等是excel對(duì)象,其pos是(row column)組成,所以下標(biāo)必須從1開始,不能從開始

  • 而array() 默認(rèn)index都是從0開始, 比如這么定義 dim arr1(4,3) 實(shí)際上是 arr1(0 to 4, 0 to 3)

  • 但是array的index下標(biāo)可以從1 或者2 等其他開始

  • 比如 dim array1(1 to 5)  dim array2(2to7)

  • 一般為了兩者匹配,所以定義數(shù)組維度時(shí)會(huì)這么定義

  •  arr1(1 to 4, 1 to 3)  完全是為了方便和excel對(duì)象的數(shù)據(jù)匹配

  • 所以下面兩種寫法都可以,如果用array的index從0開始則需要注意,對(duì)應(yīng)匹配好excel對(duì)象的 下標(biāo)+1 和ubound -1

Sub 測(cè)試2()Dim arr1(4, 3)For i = 0 To 3For j = 0 To 2arr1(i, j) = Cells(i + 1, j + 1)Debug.Print arr1(i, j)Next jNext iDebug.Print vbCrLf    ‘測(cè)試腳手架,不是一直有Debug.Print arr1(0, 0)End Sub
  • 下面這么嚴(yán)格和excel對(duì)應(yīng)也是OK的,一般人會(huì)這么寫,

  • 但要明白 array() 不嚴(yán)格聲明下標(biāo) 1 to 4 默認(rèn)都會(huì)是 0 to 4,要明白這個(gè)??!

  • 但是因?yàn)闆]有arr1(0,0) 所以Debug.Print arr1(0, 0) 會(huì)報(bào)錯(cuò)!

Sub 測(cè)試3()Dim arr1(1 To 4, 1 To 3)For i = 1 To 4For j = 1 To 3arr1(i, j) = Cells(i, j)Debug.Print arr1(i, j)Next jNext iDebug.Print vbCrLfEnd Sub
  • 但是如果含糊寫,又不對(duì)應(yīng),也沒問題

  • 只是要知道。Arr1(0,0) 這里實(shí)際是沒被賦值的,只是VBA這里沒事。

  • Debug.Print arr1(0, 0)  不會(huì)打印出東西 none 也不報(bào)錯(cuò)

Sub 測(cè)試4()Dim arr1(4, 3)For i = 1 To 4For j = 1 To 3arr1(i, j) = Cells(i, j)Debug.Print arr1(i, j)Next jNext iEnd Sub

五  數(shù)組分類

5.1 靜態(tài)數(shù)組

  • 靜態(tài)數(shù)組定義的語法:

  • dim arr1(10) as string     資料說是從1開始,我測(cè)試是從0開始

  • 但是0~10都不越界,不是有11個(gè)數(shù)了? 就是0-11?

  • dim arr2(5 to 10) as string

  • 另外,數(shù)組數(shù)據(jù)類型也并不需要都是 as string, 測(cè)試 as integer同樣沒問題

Sub t3()Dim arr(10) As StringFor i = 1 To 10 Step 1arr(i) = iDebug.Print (arr(i))Next iDebug.Print arr(5)Debug.Print arr(0)   '不顯示下標(biāo)越界Debug.Print arr(11)  '會(huì)顯示下標(biāo)越界End Sub
Sub t3()Dim arr(10) As IntegerFor i = 1 To 10 Step 1arr(i) = iDebug.Print (arr(i))Next iDebug.Print arr(5)Debug.Print arr(0)   '不顯示下標(biāo)越界End Sub

 

5.2 動(dòng)態(tài)數(shù)組

  • 動(dòng)態(tài)數(shù)組定義

  • dim arr3()  as string   或 dim arr3()

  • 數(shù)組重定義:redim

  • 只能重定義動(dòng)態(tài)數(shù)組! 也必須重定義大?。?不redim前無法使用

  • redim時(shí),下標(biāo)可以是變量

Sub t3()Dim arr3() As Integer  '如果定義dim arr3 as integer 會(huì)成為一個(gè)變量Dim arr4() As IntegerFor i = 1 To 5 Step 1ReDim arr3(1 To i)  '使用數(shù)組的內(nèi)容之前,必須先redim 否則會(huì)顯示下標(biāo)越界ReDim arr4(1 To i)arr3(i) = iarr4(i) = iDebug.Print (arr3(i))Debug.Print (arr4(i))Next iEnd Sub
Sub t3()Dim arr5(1 To 5) As IntegerReDim arr5(1 To 10) As String   '不能對(duì)靜態(tài)數(shù)組redim改變大小End Sub

5.3 定義數(shù)組指向EXCEL對(duì)象,是二維數(shù)組,不能這么使用arr(1)

  • 指向excel對(duì)象,比如range() 的 默認(rèn)為2維數(shù)組,因?yàn)镋XCEL表本身就是二維數(shù)組!

  • 二維數(shù)組的下標(biāo),需要用excel里的r1c1模式

  • 因?yàn)槭嵌S數(shù)組,不能這么使用,即使只是1行或者1列數(shù),但仍然是二維數(shù)據(jù)結(jié)構(gòu)!

  • arr1()=range("a1:e1")  雖然看起來只是a1 b1 c1 d1 e1 這5個(gè)數(shù),但由于是在excel表里的對(duì)象,是二維的 

Sub t3()Rem Dim arr6 As Integerarr6 = Range("a1:a5")Debug.Print arr6(1, 1)Debug.Print arr6(2, 1)Debug.Print arr6(3, 1)Debug.Print arr6(4, 1)Debug.Print arr6(5, 1)End Sub

 

六 定義二維數(shù)組

6.1 定義

  • 定義方法

  • dim arr1(4,5) as string

  • dim arr1 (0 to 4,0 to 5) as integer

Sub t4()Dim arr1(0 To 4, 0 To 5) As Integerarr1(0, 0) = 999Debug.Print arr1(0, 0)End Sub

6.2 動(dòng)態(tài)數(shù)組和靜態(tài)數(shù)據(jù)的語法不要混用!

  • 靜態(tài)數(shù)組就不要再redim

  • 動(dòng)態(tài)數(shù)據(jù)就一定需要redim

Sub t4()Dim arr2()Rem Dim arr2(5, 6)  '使用動(dòng)態(tài)數(shù)組 redim就不要和 靜態(tài)數(shù)組定義格式混用For i = 0 To 5 Step 1For j = 0 To 6 Step 1ReDim arr2(0 To i, 0 To j)  '動(dòng)態(tài)數(shù)組,必須在使用前redimarr2(i, j) = i + jDebug.Print arr2(i, j)Next jNext i
Sub t4()Dim arr2(5, 6)For i = 0 To 5 Step 1For j = 0 To 6 Step 1Rem ReDim arr2(0 To i, 0 To j) '如果要用靜態(tài)數(shù)組也可以,但不要再redim了!arr2(i, j) = i + jDebug.Print arr2(i, j)Next jNext iEnd Sub

七 定義三維數(shù)組

  • 下標(biāo)也是從0開始的

Sub t4()Dim arr3(3, 4, 5)arr3(0, 0, 0) = 888Debug.Print arr3(0, 0, 0)End Sub

 

多維數(shù)組的問題---3維數(shù)組的表達(dá)方式???

  • 到底哪種指定維度的方法正確?

  • arr(1,2)

  • arr(1)(2)

  • 現(xiàn)在實(shí)際測(cè)試的結(jié)果是

  • arr可以定位為變量,賦值為一個(gè)range 或 range.value,等價(jià)

  • 但是沒有 array().value 這種用法

  • 現(xiàn)在實(shí)際測(cè)試的結(jié)果是

  • 2維數(shù)組,只能arr(1,2)

  • 3維數(shù)組,有的arr(1,2,3) 有的arr(1)(2)(3)

三維數(shù)組的表示問題,和之前的不同了Sub test_3d()Dim arr1(1 To 2)Dim arr2(1 To 2, 1 To 2)Dim arr3(1 To 2, 1 To 2, 1 To 2)Dim arr4arr1(1) = 1arr2(1, 1) = 10arr3(1, 1, 1) = 100'arr4(1)(1)(1) = 100  為啥現(xiàn)在這么寫不行了?莫不是偏移3次?對(duì)比之前的Debug.Print arr1(1)Debug.Print arr2(1, 1)Debug.Print arr3(1, 1, 1)'Debug.Print arr4(1)(1)(1)End Sub
Sub test1()Dim arr1Dim arr2Dim arr3Dim arr4Dim arr5(3, 4, 5)arr1 = Range("b1:b3")Debug.Print arr1(3, 1)'Debug.Print arr1(3)(1)arr2 = Range("b1:b3").ValueDebug.Print arr2(3, 1)'Debug.Print arr2(3)(1)arr3 = Array(Range("a1:a3"), Range("b1:b3"))'Debug.Print arr3(0, 1, 1)Debug.Print arr3(1)(1)(3)'arr4 = Array(Range("a1:a3"), Range("b1:b3")).Value   '報(bào)錯(cuò)''Debug.Print arr4(0, 1, 1)'Debug.Print arr4(1)(1)(3)arr5(0, 0, 0) = 111Debug.Print arr5(0, 0, 0)'Debug.Print arr5(0)(0)(0)End Sub
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
【原創(chuàng)】VBA學(xué)習(xí)筆記(12)VBA的數(shù)組 array
Vba遍歷數(shù)組
【VBA初學(xué)者教程】- 第一章 VBA入門知識(shí):在Visual Basic中使用Excel工作表函數(shù)...
VBA 臨時(shí),關(guān)于數(shù)組的index : index的初值,index的上下限,index序列
VBA數(shù)組基礎(chǔ)學(xué)習(xí)
面向VBA一維數(shù)組的實(shí)用自定義函數(shù)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服