搜尋此網誌

2018年10月10日 星期三

[VBA]自動調整列高

[VBA]自動調整行高

[VBA]自動調整列高

一般來說在整理Excel表格的時候常常會發生字只有顯示一半的情況

標題因為行距太小被切割

而有效解決的方式就是在想要調整行高的格子上快速左鍵點兩下,就能自動調整。如果只有一兩項就算了,但是如果有好幾十項或是好幾百頁裡面尋找就會非常麻煩。

在這樣的情況下就很適合用VBA來處理機械化的事務,利用錄製巨集來找尋需要的指令,得到左鍵點兩下來自動調整行高的指令為Rows("9:9").EntireRow.AutoFit,利用這個指令來做Do迴圈,就能自動將整個工作表自動調整行高。而一開始編寫程式的時候最好先將工作表邊界抓取出來,減少DO迴圈的執行次數,多少可以節省一點時間。

這段程式主要用來設定最大列數,代表著在第6欄最下行按CTRL+↑遇到的第一個非空白的列數。以Excel 2016來舉例,當我從最後一列“1048576”1CTRL+↑就會一次跳到非空白列的位置。

設定好之後就r就等於最大列數,相對的最大欄數可以利用下列程式來設定

c就等於在第5列最大欄位的地方按CTRL+←所得到非空白欄的欄數,這樣方便以後的應用,上述的程式用以擇定的欄、列皆可以按照自己的需求變更。

設定完邊界之後就是利用迴圈來自動調整列高,其做法如下:

其中k= k+1代表著每次迴圈增加的數量,如果不設定的話Do迴圈會一直執行下去造成類似當機的狀態,每做一次迴圈k就會+1,直到k=rk=5則是設定一開始的數值,因為我要從第5列開始執行自動調整列高,所以這邊我輸入5。

因為autofit無法固定列高,當文字只有一列的時候執行就可能會縮得比較小,這時候就要加個if來設定最小列高

最小列高i=22,在一開始輸入完之後後面就能用i代替,以後就不用每個用到的地方都調整。在DO迴圈裡面放入If表示當自動調整列高之後發現列高小於22,將列高變更為22,如此一來就能達到設定最小列高的目的。

 

 


1 Excel版本不同,最後一列的數字也不用。2003以前是65535。

沒有留言:

張貼留言