Excel VBA 陣列及其他知識

2021-09-09 03:50:15 字數 3985 閱讀 5944

陣列:定義陣列:

dim arr(30 to 50) as single    定義陣列,從30到50,定義為浮點型~

arr(30) = 34.3

產生隨機數,但是隨機數要不同(1到20之間產生10個不同的隨機數)

sub

sdlkfjl()

for i = 1

to10

cells(

1, i) = int(1 + rnd() * 19) '

給個隨機數

for j = 1

to i - 1

dowhile cells(1, j) = cells(1, i) '

判斷這個數與前面的數是否相同,知道不相同退出迴圈

cells(1, i) = int(1 + rnd() * 19) '

若是相同,則重新產生隨機數

loop

next

next

end sub

→ on error resume next    說明當乙個執行時錯誤發生時,控制項轉到緊接著發生錯誤的語句之後的語句,並在此繼續執行。

→ collection物件    可以去除重複值

在collection物件中,由兩部分組成,一部分是值的部分,一部分key的部分,其中key的部分是用來區分重複值的,若是相同的key,則只取第 乙個的值作為collection的值,所以在寫的時候,要是想去掉要素的重複值,可以直接將要素值作為key值,但是key必須為字元型,所以可以用 cstr函式做轉換~

另外由於會有重複的key值,所以要用on error resume next語句來越過錯誤~

private

subuserform_initialize()

dim r as

integer

dim i as

integer

dim mycol as

newcollection

dim arr() as

variant

onerror

resume

next

with

sheet1

r = .cells(.rows.count, 1

).end(xlup).row

for i = 1

tor

iftrim(.cells(i, 1)) <> ""

then

mycol.add item:=cells(i, 1), key:=cstr(.cells(i, 1

))

endif

next

endwith

redim arr(1

to mycol.count) '

最大值已經變了,因為有重複的值會變成不重複的~

for i = 1

tomycol.count

arr(i) =mycol(i)

next

listbox1.list =arr

end sub

→ 當combobox1發生change的時候,觸發如下事件

private

subcombobox1_change()

dim myaddress as

string

dim rng as

range

combobox2.clear

with sheet1.range("

a:a"

)

set rng = .find(what:=combobox1.text)

ifnot rng is

nothing

then

myaddress =rng.address

docombobox2.additem rng.offset(,

1)

set rng =.findnext(rng)

loop

while

not rng is

nothing

and rng.address <>myaddress

endif

endwith

combobox2.listindex = 0

set rng = nothing

end sub

其中

rng.address <> myaddress
一句很重要,因為findnext函式還會向上找回去,若是沒有這個限制條件,就會一直迴圈下去~

→ vbcrlf和chr(13)都是表示換行的意思

→ 按ctrl+j可以提示方法和屬性

→ 空格+下環線可以將一行分成多行來寫 space+underscore

→ array函式    返回乙個包含陣列的variant

dim a as

variant

a = array(10,20,30

) b = a(2)

→ split函式    返回乙個小標從零開始的一維陣列,它包含指定數目的子字串

sub

splitexample()

dimstr() as

string

str = split("

a,b,c,d,e

", ","

)

for i = 0

toubound(str

) s = s & str(i) &vbcrlf

next

msgbox

s

end sub

參考:

單元格簡單複製,將單元格的值存成陣列

private

subcommandbutton1_click()

arr = sheet2.range("

a1:e83

")

range(

"a1:e83

") =arr

end sub

→ split函式&join函式例子,從乙個句子裡面提取姓名和性別

sub

splitexample()

dimstr() as

string

cells(

2, 1) = "全部"

cells(

2, 2) = "姓名"

cells(

2, 3) = "性別"

str = split(cells(1, 1), ","

)

for i = 0

toubound(str

) cells(i + 3, 1) = str

(i)

ifright(str(i), 3) = "

(女)"

then

cells(i + 3, 2) = left(str(i), instr(str(i), "

(") - 1

) cells(i + 3, 3) = "女"

else

cells(i + 3, 2) = str

(i)

cells(i + 3, 3) = "男"

endif

next

msgbox

join(str, ","

)

end sub

join函式是split函式的反向過程~

→ 動態陣列

redim preserve 陣列名(ubound(陣列名) + n)在擴大陣列邊界後,原來的值保留,否則會自動刪掉

→ 陣列複製

可以用「=」直接實現陣列的複製,但是必須保證「=」左邊的陣列是動態陣列

陣列遍歷及其他方法

1 控制台輸出陣列顯式原型物件,然後依次檢視 2 相關常用遍歷方法 1 find 接收乙個方法作為引數,方法內部返回乙個條件,find會遍歷陣列返回匹配元素,否則返回undefined var arraydata 111,222,333,444,555,666,777,888 var findval...

演算法試題 及其他知識點

1.把整數轉換成每一位組成的列表 123 1,2,3 num 1234 print list str num 1,2,3 len 3 i 0 0 1,2,3,4 len 4 i 0 1 1,2,3,4,5 len 5 i 0 2 len n i 0 n 2 1 def reverse list li...

要點及其他

類的載入順序 1.靜態屬性和靜態塊 按書寫順序 2.非靜態屬性和非靜態塊 按書寫順序 3.構造方法 4.被呼叫的方法 無論靜態非靜態 使android應用國際化的步驟 1.新建android xml file 2.選擇type為values 3.選擇語言碼和區域碼,語言碼設定為en或zh 區域碼設定...