跳到主要內容

Excel 依據儲存格的數值調整行高

「Excel 自動將所有欄/列 印到同一張紙時,列高總是不足以顯示所有的文字。」

「嗯,因為自動調整列高的功能在縮放時會失效。」

「那我該怎麼辦。」

「你就先用 len() 算出儲存格內的字數,換算合適的行數,最後利用篩選逐一調整各數值的列高。」

以上的對話,是幾年前我在幫一個打字人員列印報告時遇到的,當時想出的解決方法就是增加一個欄位,專門顯示適當的行數,再手動用篩選功能調整欄高,不然可能印出來的成品就會有被截掉的風險。

最近我又遇到類似的問題,不過這一回,我用了巨集。

我手頭上有一張表格,其中 D 欄會填入件數,件數越多則行高需要越大,好讓檢查人員可以有足夠的空間填寫他們的意見,例如:
D欄 列高
1 20
2 40
3 60
n n * 20
這下可麻煩了,如果我要每一列逐一調整欄高,那我肯定會瘋掉。

解法一:篩選

  • 說明:利用篩選功能:篩選同樣為 2 的數值,設定欄高為 40。
  • 優點:可以同時調整相同數值的欄高
  • 缺點:若是不同數值的數量太多,一樣會死人的。

解法二:巨集

  • 說明:利用巨集逐一調整區域內的列高
  • 設定:
    • 範圍:D3:D502,以(3,4)~ (502,4) 表示(列,欄)
    • i 代表列數,(i,4) 代表儲存格,因此 i = 3 時,代表 (3,4),也就是 D3 的意思

Dim i As Integer
For i = 3 To 502
 If Cells(i, 4).Value * 20 > 409 Then
   Rows(i).RowHeight = 409
 ElseIf Cells(i, 4).Value = 0 Then
                 Rows(i).RowHeight = 20
 Else
  Rows(i).RowHeight = Cells(i, 4).Value * 20
        End If
Next

參考資料

  1. 「row height - Excel VBA rowheigt from value in range - Stack Overflow」. 引見於 2015年5月21日. http://stackoverflow.com/questions/16547330/excel-vba-rowheigt-from-value-in-range.
  2. 「vba - Excel macro: how do I change all row heights, BUT if cell.value = bold make the cell height bigger?」. Stack Overflow. 引見於 2015年5月21日. http://stackoverflow.com/questions/3616610/excel-macro-how-do-i-change-all-row-heights-but-if-cell-value-bold-make-the.
  3. 「Excel VBA Range Object」. 引見於 2015年5月21日. http://www.excel-easy.com/vba/range-object.html.


留言

這個網誌中的熱門文章

浴室蓮蓬頭水量復活了!

狀況是這樣的,進入冬季之後開始感覺熱水器的水似乎越來越常忽冷忽熱,熱水洗不到兩分鐘馬上就變成冷水,由於狀況太過頻繁因此開始上網查查可能的原因有哪些。

熱水器進水量太多,熱水器來不及燒熱熱水器裝錯,大廈用裝成公寓用(水壓不同)水壓不穩,建議裝個加壓器蓮蓬頭卡到沙子水管內鈣化.....
個人相當偏向簡單容易的解決方法,所以調整了水塔的水量,也把蓮蓬頭打開來清了清,順便把櫻花牌熱水器的溫度調了又調都沒有明顯的改善效果。

這時讓我比較驚奇的事情發生了,因為數年前曾經發生不良的洗手臺可能因為熱脹冷縮的關係而發生爆裂的情況,因此我很久沒有使用洗手臺裝熱水來使用。但因為逼不得已,打開洗手臺開熱水使用,竟然發現熱水可以源源不絕地供應,這代表說從水塔到熱水器到浴室的運作都是正常的,那代表的是蓮蓬頭有問題!

蓮蓬頭多半有個旋扭,可以決定是由蓮蓬頭出水還是下方的水龍頭出水,兩邊的出水量都一樣小就代表進水的時候有問題。而這時我在 Mobile01 上頭找到了相同狀況的苦主,用了他的方法竟然一試見效。

先全開熱水
再用一字起子將制水塞(螺絲) 轉緊轉鬆 轉緊轉鬆 轉緊轉鬆
就看到一些砂狀污垢流出
熱水的水量就恢復正常
沒錯,就是拿一字起調整熱水管線下方的螺絲,順時鐘轉緊時,水量會變小;逆時鐘轉鬆時,水量會變大。重複幾次這樣的動作後,我終於看到我的蓮蓬頭有了正常的水量,原來是負責水量的螺絲因為長時間使用,空隙被一些鈣質給填滿,造成水量變小。

為什麼水量變小會影響到水溫呢?因為現在的熱水器都有防空燒裝置,當熱水水量過小的時候就會自動熄火,你需要把熱水關起來重新打開才會讓熱水器重新點火。當你的蓮蓬頭水量過小卻很熱時,你會降低熱水的水量並且提高冷水的水量,此時熱水溫度降低而熱水量低到某種程度的時候就會讓熱水器熄火,接著就是清涼的冷水從蓮蓬頭灑到你的身上,透清涼啊XD


插曲:

當我對蓮蓬頭完全失望時,拿著水盆猛從臉盆撈水沖澡的我,還真想買這款產品,可以將臉盆的水龍頭轉接到蓮蓬頭的工具,《面盆沐浴切換頭》,真是超吸引人的。



Ref
(己解決)浴缸水龍頭及蓮蓬頭純熱水是純冷水出水量的1/3, 是水龍頭內阻塞? 還是熱水水管阻塞? - Mobile01行動版 - http://goo.gl/NTBrl 面盆沐浴切換頭 、水龍頭及水管修理零件 | 水材/防水商品 - 特力屋 - http://goo.gl/uA…

合併多個 Excel 檔到一個工作表中

最近工作遇到一個問題,需要去檢驗近千個檔案的內容是否有問題。檢驗的方式雖然可以透過函數來判斷,但是上千個檔案量光是打開就覺得麻煩,覺得在驗證之前一定要把檔案想辦法合併起來。

巨集合併M Riza 先生提出一個很棒的方法,"Merge multiple excel files into a single spreadsheet (MS Excel 2007)"。

Step by Step開啟 Excel,按下 Alt + F11 叫出巨集編輯器,貼入網站中的 Code
修改第8行的路徑,改成需要合併的 Excel 檔存放路徑
按下執行鍵就 OK 了
心得儘管是 CSV 檔案也能正確合併。
這邊要注意一件事情,Code 當中的 A2 是起始的儲存格,在合併過程中會忽略掉標題列,直接從第二列開始複製;若是你想連標題列都合併起來,請改成 A1。IV 是他的複製欄寬,可以改成自己想要的欄寬。
Range("A2:IV" & Range("A65536").End(xlUp).Row).Copy
值得注意的是,雖然這個方法是給 Excel 2007 使用,但 Excel 2007 開始有個重大變化,就是 Excel 最大列數從 2^16 次方改成了 2^20 次方。這代表你可以處理的資料從 Excel 2003 的 65,536 筆增加至 1,048,576 筆。
心得第二點的發現是因為我合併了所有的檔案,還很慶幸原來只有六萬多筆,最後慚愧地發現原來資料數量有三十萬筆,而 Code 當中卻只設定到 65,536 筆,只需要把 A65536 改成 A1048576 即可。

2^4 代表的是16倍的資料處理量,過去 Excel 2003 只能處理六萬筆資料,如今拜軟體、處理器的提升,我們比起過去的人擁有更大的優勢來處理資料,感謝技術的進步。

JMC ExcelJeeShen Lee 李毅胜先生也寫了一個 Excel 巨集,"JMC Excel – Join, Merge, Combine multiple Excel sheets or Excel workbooks",畫面是我喜歡的簡潔類型,試用版可以一次合併 10 個檔案,如果你想要完整版的話可以寫信給作者花個 $7 購買他的檔案來使用看看。

不…

ASUS 主機板驅動全裝卻還有黃色驚嘆號?也許你少裝了這個…

今天重灌了一台電腦,主機板是 ASUS P9X79 WS ,照例上了 ASUS 的官網下載了相關的驅動程式安裝,因為原始的驅動程式光碟已經毀損無法使用。

等到全部安裝完,連 Windows 7 的更新結束後,裝置管理員內的部份硬體依然出現黃色驚嘆號( yellow exclamation mark ),這顯然代表我有什麼東西沒有裝到。

問題:安裝了所有驅動程式,還是有部份裝置沒被驅動SM匯流排控制器基本系統裝置( Base System Device ) x N 個
解決:你可能真的有東西沒裝到,例如…

我通常安裝的都是置頂的晶片組驅動程式,也就是使用綠色框框的 MEI 驅動程式,安裝完成之後也的確可以正常運作。

MEIIntel(R) Management Engine Interface
我再回頭到官網看一下,奇怪,為什麼舊版本的驅動程式反而容量大許多,新版只有59MB,舊版卻有 255MB。

好奇安裝了一下,黃色驚嘆號竟然全部消失了。該死,原來我一直少裝這款驅動程式。

ChipsetIntel(R) Chipset Software Installation Utility
如果你有相同問題,不妨回頭到官網,找一下 Chipset 驅動程式,就挑最容量大的那個吧!