VBA實踐技巧精粹009 將工作表按指定順序排序

2022-08-27 03:48:08 字數 2069 閱讀 9266

問題提出:實際上自己感覺用處不是很大,非得需要將工作表進行排序嗎?只要能訪問不就可以嗎?但既然提出來了,就看看吧,而且裡面有個演算法對我很有價值,就是排序演算法,以前遇到需要排序的要求,心裡就害怕,這次就藉著這個問題,把它解決吧.

sub 工作表按公升序排序()

dim i as integer, j as integer, n as integer

dim sht() as string, t as string

n = sheets.count

redim sht(1 to n) '注意陣列定義的寫法,可以直接實現從1開始啊.不用再在過程前寫option base 1了.

for i = 1 to n '將所有工作表名字逐一寫入陣列,為排序進行準備

sht(i) = sheets(i).name

next i

for i = 1 to n - 1 '按從大到小排序,即降序排列,書中寫錯了.

for j = i + 1 to n

if sht(i) < sht(j) then '如果前1個小於後1個,則將二者交換順序,這樣交換完後,大的在前,小的在後.

t = sht(i)          '先參與迴圈的為1到n-1,後參與迴圈的為後1個到n,這樣就可以保證所有資料都參與排序.

sht(i) = sht(j)

sht(j) = t

end if

next j

next i

for i = 1 to n 

debug.print sht(i)   '此時輸出的結果即為從大到小

worksheets(sht(i)).move before:=sheets(1) '先將最大的移到第1個工作表前,再將其次的移到最前面,這樣迴圈下來,就可以實現將最小的移到最前面,恰好符合要求.

next i

end sub

這種排序的方式是逐字元進行比較,純字母的排序完全可以得到想要的結果,但如果工作表名稱中含有字母+數字或者純數字的話,恐怕得到的結果就不是自己要的.如下圖所示:

明顯的不是按數字大小排序,這也從另一方面說明上述比較方法是逐字元進行比較的,因為0的ascii碼為48在0-9中最小,所以......

如何改進呢?想辦法變成按真正的數字大小進行排序,尤其是在工作名稱是sheet1/sheet2/sheet10/sheet20......樣式時.

注意sheet44與sheet45的區別.

**反思:兩種方法都有價值,但用途不一樣.第1種適用於字母的比較;第2種適用於字母加數字的比較,而且是有規律的比較.

了解了如果更改大小寫呢?ucase和lcase函式可以實現,這是vba中的函式.

43 things: error, excel, excel vba, range, vba, 愛好者, 區分大小寫, 迴圈, 應用程式, 字串, 最大值

buzznet: error, excel, excel vba, range, vba, 愛好者, 區分大小寫, 迴圈, 應用程式, 字串, 最大值

del.icio.us: error, excel, excel vba, range, vba, 愛好者, 區分大小寫, 迴圈, 應用程式, 字串, 最大值

flickr: error, excel, excel vba, range, vba, 愛好者, 區分大小寫, 迴圈, 應用程式, 字串, 最大值

icerocket: error, excel, excel vba, range, vba, 愛好者, 區分大小寫, 迴圈, 應用程式, 字串, 最大值

livejournal: error, excel, excel vba, range, vba, 愛好者, 區分大小寫, 迴圈, 應用程式, 字串, 最大值

technorati: error, excel, excel vba, range, vba, 愛好者, 區分大小寫, 迴圈, 應用程式, 字串, 最大值

今天你菊子曰了麼?

vba 實用技巧

1.減少物件的啟用和選擇 with sheets sheet3 range a1 value 100 range a2 value 200 end with 2 在迴圈中要儘量減少物件的訪問。for k 1 to 1000 sheets sheet1 select cells k,1 value c...

VBA快速入門技巧

開發bw報表時,經常會遇到一些展示效果要求比較高的需求,這種情況下,往往需要借助excel的公式或者vba程式設計來實現。需要用到公式時,可以檢視excel幫助文件,以找到具有相應功能的公式。但是,有時僅僅利用公式不能夠滿足一些複雜的需求,則要借助vba。對於剛剛接觸vba的開發人員來說,掌握vba...

VBA程式設計規則及方法技巧

1 編寫自定義函式時,必須在vba模組中,而不是在與thisworkbook 工作表和使用者窗體關聯的 模組中。2 如果 要選中單元格區域,則該區域所在的工作表必須是活動的,可以使用activate方法來啟用某工作表。3 盡量在vba 中使用命名的單元格區域。4 當通過快捷鍵選擇單元格區域的時候,如...