學習vba的同學經常會用到陣列的排序,網上介紹的程式演算法一般都是舉例一維陣列,
增加了公升降序選擇,排序列號選擇,以及標題行數等實際需要使用的引數
private sub test()
dim arr()
sheets("sheet1").select
row = sheets("sheet1").usedrange.rows.count
col = sheets("sheet1").usedrange.columns.count
redim arr(1 to row, 1 to 6)
arr = range("a1:f" & row)
arr = bubblesort(arr, 0, 2, 2)
range("j1:o" & row) = arr
end sub
以下為vba二維陣列氣泡排序例項
public function bubblesort(byref snarray(), sort as boolean, column as integer, title as integer)
'sort 為公升降序標記,column為需排序列,title為標題行數(不參與排序的行數)
dim iouter as long
dim iinner as long
dim ilbound as long
dim iubound as long
dim issort as boolean
dim count as integer
dim temp as integer
dim itemp
redim itemp(1, lbound(snarray, 2) to ubound(snarray, 2))
dim sorted as integer
lastindex = 0
tlbound = lbound(snarray, 2)
tubound = ubound(snarray, 2)
ilbound = lbound(snarray) + title
iubound = ubound(snarray)
sorted = iubound - iouter - 1
select case sort
case 0 '引數為0時公升序
for iouter = ilbound to iubound - 1
issort = true
for iinner = ilbound to sorted 'iubound - iouter - 1
if snarray(iinner, column) > snarray(iinner + 1, column) then
for temp = tlbound to tubound '陣列整行資料交換
itemp(1, temp) = snarray(iinner, temp)
snarray(iinner, temp) = snarray(iinner + 1, temp)
snarray(iinner + 1, temp) = itemp(1, temp)
next temp
issort = false '標記是否有排序動作
count = count + 1 '記錄排序次數,可刪除
lastindex = iinner '記錄最後排序位置
end if
next iinner
if issort = true then exit for '如果沒有排序動作則為全部排序完成,跳出迴圈,排序結束
sorted = lastindex '接下來的迴圈只到最後排序位置
next iouter
case 1 '引數為1時降序
for iouter = ilbound to iubound - 1
issort = true
for iinner = ilbound to sorted 'iubound - iouter - 1
if snarray(iinner, column) < snarray(iinner + 1, column) then
for temp = tlbound to tubound '陣列整行資料交換
itemp(1, temp) = snarray(iinner, temp)
snarray(iinner, temp) = snarray(iinner + 1, temp)
snarray(iinner + 1, temp) = itemp(1, temp)
next temp
issort = false '標記是否有排序動作
count = count + 1 '記錄排序次數,可刪除
lastindex = iinner '記錄最後排序位置
end if
next iinner
if issort = true then exit for '如果沒有排序動作則為全部排序完成,跳出迴圈,排序結束
sorted = lastindex '接下來的迴圈只到最後排序位置
next iouter
end select
sheets(1).range("i1") = count
bubblesort = snarray
end function
二維陣列實現氣泡排序
實現了一維陣列的排序,同時二位陣列也可實現排序。利用c 實現,以下為主函式 includeusing namespace std define n 3 void paixu int p n void out int p n int main 形參為指向一維陣列的指標,將二維陣列存到一維陣列之中,將一...
VBA陣列賦值(2 2) 二維陣列
借助工作表為二維陣列賦值就非常簡單直接了,示例 如下。sub demo4 dim myarray myarray range a1 c3 stop endsub 如願以償的生成了3x3的二維陣列。如果陣列中的資料是在 中生成的,也不是必須要借助工作表單元格,才能實現為二維資料賦值,很多時候從 執行效...
二維陣列排序
一維陣列排序可以使用asort 公升序 ksort 降序 二維陣列排序可以使用array mutisort和usort進行排序 users array array id 1,age 12 array id 2,age 13 array id 3,age 44 array id 4,age 22 ar...