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

  • 0
「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.


No comments: