「Excel 自動將所有欄/列 印到同一張紙時,列高總是不足以顯示所有的文字。」
「嗯,因為自動調整列高的功能在縮放時會失效。」
「那我該怎麼辦。」
「你就先用 len() 算出儲存格內的字數,換算合適的行數,最後利用篩選逐一調整各數值的列高。」
以上的對話,是幾年前我在幫一個打字人員列印報告時遇到的,當時想出的解決方法就是增加一個欄位,專門顯示適當的行數,再手動用篩選功能調整欄高,不然可能印出來的成品就會有被截掉的風險。
最近我又遇到類似的問題,不過這一回,我用了巨集。
我手頭上有一張表格,其中 D 欄會填入件數,件數越多則行高需要越大,好讓檢查人員可以有足夠的空間填寫他們的意見,例如:
最近我又遇到類似的問題,不過這一回,我用了巨集。
我手頭上有一張表格,其中 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
參考資料
- 「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.
- 「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.
- 「Excel VBA Range Object」. 引見於 2015年5月21日. http://www.excel-easy.com/vba/range-object.html.