目錄
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...