欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
【原創(chuàng )】VBA學(xué)習筆記(13)VBA的數組 array

一 數組 array

1.1 數據定義

  • 靜態(tài)數組:長(cháng)度不變的數組

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

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

1.2數組的index下標

  • (1)數組的index下標應該是從0開(kāi)始的,比如split生成的,還有未指定index下標的

  •          如 dim arr1(5)

  • (2)但是數組的index下標也有從1開(kāi)始的情況,比如range 賦值的變量,默認下標從1開(kāi)始

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

  • (3)數組的index下標受控制的情況

  •        模塊最前面 option base  -1

  • (4)數組index下標最好自己定義好

  •       如  dim arr3(1 to 5)

1.3 數組嚴格定義的重要性

  • Dim arr1(3)

  • Dim arr1( 1 to 3)

  • Option base 1 等等的意義

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

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

  • (1) array()

  • (2) split()  (對應join)

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

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

Sub test101()rem 測試創(chuàng  )建數組的各種方法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

二 數組必須聲明大小后才可以使用

2.1 測試

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

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

  • rem 變量可以賦初值,就可以表達式運算,不同類(lèi)型的變量,默認初值不同

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

2.2 語(yǔ)法差別比較

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

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

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

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

  • 函數和數組形式完全不同,沒(méi)有實(shí)現區分的必要性

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

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

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

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

rem 變量可以賦初值,就可以表達式運算,不同的變量,默認初值不同

Sub t3()rem 變量可以賦初值,就可以表達式運算,不同的變量,默認初值不同a = a + 1Debug.Print a'arr4(1) = 1   '直接會(huì )報錯,arr4未定義??!End Sub
'selectionSub 刪除空格4()Dim arr1()ReDim arr1(11)                      '不redim呢j = 0                               'j=1開(kāi)始就會(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開(kāi)始,arr()得從0開(kāi)始Next jEnd Sub

三 數組的 聲明+ 賦值  不同方法 

3.1 聲明定義數組有3種方法:

  •  直接聲明數組

  • 數組名為變量

  • 數組名為對象名


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

  • 變量名代表變量

  • dim a

  • 或者不聲明 a 直接使用也默認為變量

  • 數組名 與數組     

  • 如果先聲明 dim arr1()

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

  • 函數名  與函數     

  • 如果先聲明的  function func1()

  • func1 就代表 func1()

3.3 數組不能被賦值,只有 數組的元素,變量,對象可以被賦值

  • 而數組不能被直接賦值

  • 只有數組的元素可以被賦值

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

Sub test001()Rem VBA里的array是數組    Rem 數組不能被賦值,只能給數組的元素賦值Rem Excel里的range是對象,2維數組對象 <> 數組,range是對象不是數組!    Rem 對象是可以被賦值的,賦值給了對象的 range.value屬性Dim arr1(3)               '如果已經(jīng)聲明為數組名了,arr1就代表arr1(),以后就不能給數組賦值Dim arr2  As Variant      '相當于dim arr2Dim arr3 As Object'arr1 = Range("a1:c1")     '不能給數組賦值? 只能給數組里的元素賦值?arr1 = Range("a1:c1").value 也不行arr1(0) = Range("a1")      '可以給數組的某個(gè)元素賦值arr2 = Range("a1:c1")      '可以給變量賦值,賦予這個(gè)變量整個(gè)數組Set arr3 = Range("a1:c3")  '可以把EXCEL的range 賦值給變量,或對象。然后默認都成為了2維數組。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

四  數組定義和賦值

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

  • Dim Array

  • Dim Array()

  • Dim array as object

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

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

  • 無(wú)論dim arr1   (as variant)

  • 還是 dim arr1()

  • 但是一旦  dim arr1 as object就有問(wèn)題,數組不是對象? 報錯 缺少數組

  • 但是一旦  dim arr1()  as object就有問(wèn)題,數組不是對象?  報錯缺少數組

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

  • dim arr1 或 dim arr1() 都可以

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

Sub 測試1()Dim arr1 As Variantarr1 = Range("a1:c4")    '這里為什么不 set 為對象呢?Debug.Print arr1(3, 3)Debug.Print LBound(arr1)Debug.Print UBound(arr1)Debug.Print LBound(arr1, 2)  '二維數組,第1維默認是行數,往下數!Debug.Print UBound(arr1, 2)  '二維數組, array(row,column)Sub 測試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 測試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() 函數的作用----再升高一維數組

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

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

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

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

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

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

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

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

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

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

  • 所以下面兩種寫(xiě)法都可以,如果用array的index從0開(kāi)始則需要注意,對應匹配好excel對象的 下標+1 和ubound -1

Sub 測試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    ‘測試腳手架,不是一直有Debug.Print arr1(0, 0)End Sub
  • 下面這么嚴格和excel對應也是OK的,一般人會(huì )這么寫(xiě),

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

  • 但是因為沒(méi)有arr1(0,0) 所以Debug.Print arr1(0, 0) 會(huì )報錯!

Sub 測試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
  • 但是如果含糊寫(xiě),又不對應,也沒(méi)問(wèn)題

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

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

Sub 測試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

五  數組分類(lèi)

5.1 靜態(tài)數組

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

  • dim arr1(10) as string     資料說(shuō)是從1開(kāi)始,我測試是從0開(kāi)始

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

  • dim arr2(5 to 10) as string

  • 另外,數組數據類(lèi)型也并不需要都是 as string, 測試 as integer同樣沒(méi)問(wèn)題

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)   '不顯示下標越界Debug.Print arr(11)  '會(huì )顯示下標越界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)   '不顯示下標越界End Sub

 

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

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

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

  • 數組重定義:redim

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

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

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)  '使用數組的內容之前,必須先redim 否則會(huì )顯示下標越界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   '不能對靜態(tài)數組redim改變大小End Sub

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

  • 指向excel對象,比如range() 的 默認為2維數組,因為EXCEL表本身就是二維數組!

  • 二維數組的下標,需要用excel里的r1c1模式

  • 因為是二維數組,不能這么使用,即使只是1行或者1列數,但仍然是二維數據結構!

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

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

 

六 定義二維數組

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)數組和靜態(tài)數據的語(yǔ)法不要混用!

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

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

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

七 定義三維數組

  • 下標也是從0開(kāi)始的

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

 

多維數組的問(wèn)題---3維數組的表達方式???

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

  • arr(1,2)

  • arr(1)(2)

  • 現在實(shí)際測試的結果是

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

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

  • 現在實(shí)際測試的結果是

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

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

三維數組的表示問(wèn)題,和之前的不同了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ě)不行了?莫不是偏移3次?對比之前的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   '報錯''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
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
【原創(chuàng )】VBA學(xué)習筆記(12)VBA的數組 array
Vba遍歷數組
【VBA初學(xué)者教程】- 第一章 VBA入門(mén)知識:在Visual Basic中使用Excel工作表函數...
VBA 臨時(shí),關(guān)于數組的index : index的初值,index的上下限,index序列
VBA數組基礎學(xué)習
面向VBA一維數組的實(shí)用自定義函數
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久