VBA陣列用法案例詳解

2022-09-20 09:09:08 字數 4703 閱讀 4531

目錄

vba陣列在excel開發應用中,作用還是很明顯的,用好陣列可以提高工作效率,下面就開始揭開vba陣列的神秘面紗。

下面是幾種陣列常用的定義方法,一維陣列的定義、二維陣列的定義

直接賦值定義、呼叫array函式定義、呼叫excel工作表記憶體陣列

''''''''''''直接定義給陣列賦值

'一維常量陣列的定義

sub arrdemo1()

dim arr(2) as variant '陣列

arr(0) = "vba"

arr(1) = 100

arr(2) = 3.14

msgbox arr(0)

end sub

'二維常量陣列的定義

sub arrdemo2()

dim arr(1, 1) as variant 'dim arr(0 to 1, 0 to 1) as variant

arr(0, 0) = "apple"

arr(0, 1) = "banana"

arr(1, 0) = "pear"

arr(1, 1) = "grape"

for i = 0 to 1

for j = 0 to 1

msgbox arr(i, j)

next

next

end sub

''''''''''''用array函式建立常量陣列

'一維陣列

sub arraydemo3()

dim arr as variant '陣列

arr = array("vba", 100, 3.14)

msgbox arr(0)

end sub

'二維陣列

sub arraydemo4()

dim arr as variant '陣列

arr = array(array("張三", 100), array("李四", 76), array("王五", 80))

msgbox arr(1)(1)

end sub

'呼叫excel工gghnwf作表記憶體陣列

' 一維陣列

'二維陣列

sub mylook()

dim arr

arr =

range("a1:b3") = arr

msgbox application.worksheetfunction.vlookup("b", arr, 2, 0) '呼叫vlookup時可以作為第二個引數

end sub

'動態陣列的定義方法

sub arrdemo5()

dim arr1() '宣告乙個動態陣列(動態指不固定大小)

dim arr2 '宣告乙個variant型別的變數

arr1 = range("a1:b2") '把單元格區域a1:b2的值裝入陣列arr1

arr2 = range("a1:b2") '把單元格區域a1:b2的值裝入陣列arr2

msgbox arr1(1, 1) '讀取arr陣列中第1行第1列的數值

msgbox arr2(2, 2) '讀取arr1陣列的第2行第2列的數值

end sub

'讀取單元格資料到陣列,進行計算,再賦值給單元格

sub arr_calculate()

dim arr '宣告乙個變數用來盛放單元格資料

dim i%

arr = range("a2:d5") '把單元格資料搬入到arr裡,它有4列4行

for i = 1 to 4 '通過迴圈在arr陣列中迴圈

arr(i, 4) = arr(i, 3) * arr(i, 2) '陣列的第4列(金額)=第3列*第2例

next i

range("a2:d5") = arr '把陣列放回到單元格中

end sub

'陣列合併(join)與拆分(split)

sub join_demo()

dim a as variant

dim b as variant

' join using spaces

a = array("red", "blue", "yellow")

b = join(a, "")

msgbox ("the value of b is :" & b) 'red bulgghnwfe yellow

' join using $

b = join(a, "$") 'red$bule$yellow

msgbox ("the join result after using delimiter is : " & b)

end sub

sub split_demo()

dim a as variant

dim b as variant

a = split("red$blue$yellow", "$") 'a = array("red","blue","yellow")

b = ubound(a)

for i = 0 to b

msgbox a(i)

next

end sub

'vba陣列的篩選

sub arr_filter()

arr = array("abc", "f", "d", "ca", "er")

arr1 = vba.filter(arr, "a", true) '篩選所有含a的數值組成乙個新陣列

arr2 = vba.filter(arr, "a", false) '篩選所有不含a的數值組成乙個新陣列

msgbox join(arr1, ",") '檢視篩選的結果

end sub

'陣列維數的轉換

'一維轉二維

sub arr_tranpose1()

arr = array(10, "vba", 2, "b", 3)

arr1 = application.transpose(arr)

msgbox arr1(2, 1) '轉換後的陣列是1列多行的二維陣列

end sub

'二維陣列轉一維 '注意:在轉置時只有1列n行的陣列才能直接轉置成一維陣列

sub arr_tranpose2()

arr2 = range("a1:b5")

arr3 = application.transpose(application.index(arr2, , 2)) '取得arr2第2列資料並轉置成1維陣列

msgbox arr3(4)

end sub

'把單元格中的內容用「-」連線起來

sub join_transpose_demo()

arr = range("a1:c1")

arr1 = range("a1:a5")

msgbox join(application.transpose(application.transpose(arr)), "-")

msgbox join(application.transpose(arr1), "-")

end sub

'利用陣列獲取所有工作表名稱的自定義函式

function getsheetsname(id)

dim i%, arr()

k = sheets.count

redim arr(1 to k)

for i = 1 to k

arr(i) = sheets(i).name

next

getsheetsname = application.index(arr, id)

end function

'陣列賦值,提高計算效率

'2.03秒

sub datainput()

dim start as double

start = timer

dim i&

for i = 1 to 30000

cells(i, 1) = i

next

msgbox "程式執行時間為" & format(timer - start, "0.00") & "秒"

end sub

'0.12秒

sub datainputarr()

dim start as double

start = timer

dim i&, arr(1 to 30000) as string

for i = 1 to 30000

arr(i) = i

next

range("a1:a30000").value = application.transpose(arr)

msgbox "程式執行時間為" & format(timer - start, "0.00") & "秒"

end sub

'0.09秒

sub datainputarr2()

dim start as double

start = timer

dim i&, arr(1 to 30000, 1 to 1) as string

for i = 1 to 30000

arr(i, 1) = i

next

range("a1:a30000").value = arr

msgbox "程式執行時間為" & format(timer - start, "0.00") & "秒"

end sub

C odr用法案例詳解

the main module.file odr test1.cpp include void module1 print declaration of an exeternal function inline int f1 class a const double c 4.2 constexpr ...

MFC LoadImage用法案例詳解

目錄 handle loadimage hinstance hinst,若引導程式外部資源傳null,否則一般傳afxgetinstancehandle lpctstr lpszname,名稱或全路徑 uint utype,型別 image bitmap或image icon或image curso...

C pictureBox用法案例詳解

picturebox 控制項可以顯示來自位圖 圖示或者元檔案,以及來自增強的元檔案 jpeg 或 gif 檔案的圖形。如果控制項不足以顯示整幅圖象,則裁剪圖象以適應控制項的大小。展示了控制項的sizemode四種格式 最好的應該是zoom,在不發生形變的條件下,對進行縮放。sizemode auto...