Excelで行と行の間をダブルクリックすると
セルの高さが自動調整されます。
しかし、結合したセルでは
高さの自動調整ができません。
結合したセルに
「セルの書式設定」-「折り返して全体を表示する」
が適用されているときでも
高さが自動調整されません。
この状態で印刷すると必要な部分が欠けてしまいます。
結合したセルの高さ調整をVBAでできるようにしていきます。
ワークシートを使った簡単な方法を思いつきました。
コードの流れは
ざっくり次の通り
①作業用シート「macro180724a」を作成する
②結合されたセル内の文字列を
作業用シートの結合されていないセルA1に入力する。
③セルA1の幅を結合されたセル全体の幅と同じにする
④セルA1で高さ自動調整をして
セルの高さを取得する
⑤この高さを元の結合されたセルに設定する。
コードはこちら
結合したセルの高さを自動調整するコード:
Sub macro180724a() '結合したセルの高さ調整 'マクロを実行する前に '調整したい
範囲を選択しておく
Application.ScreenUpdating =
False Dim obj As Object Dim i As
Integer Dim c As Integer Dim width1 As
Single Dim rng1 As Range Set rng1 =
Selection Dim sh1 As Worksheet
Sheets.Add.Name = "macro180724a" Set sh1 = Sheets
("macro180724a") With sh1.Cells(1, 1)
.WrapText = True .ShrinkToFit =
False Rows(.Row).EntireRow.AutoFit End
With For Each obj In rng1
'セルの結合あり If obj.MergeCells = True
Then sh1.Range("A1") =
obj.MergeArea.Cells(1, 1).Text For i = 1
To obj.MergeArea.Count If
obj.MergeArea.Item(i).Column > c Then
width1 = width1 + obj.MergeArea.Item
(i).ColumnWidth
c = obj.MergeArea.Item(i).Column
Else
i = obj.MergeArea.Count
End If If i =
obj.MergeArea.Count Then
sh1.Cells(1, 1).ColumnWidth = width1
Rows(sh1.Cells(1,
1).Row).EntireRow.AutoFit
c = 0
width1 = 0 End
If Next i
With obj
.WrapText = True
.ShrinkToFit = False
.RowHeight = sh1.Cells(1, 1).RowHeight
End With
End If Next
Application.DisplayAlerts = False
sh1.Delete Application.DisplayAlerts = True
Application.ScreenUpdating = True End Sub
|
下の画像の状態で上記のコードを実行
実行結果:
上記コードを何回か試しましたが、
入力された文字列やセルの幅によっては
1行余分な高さに設定されることもあるので注意してください。
コメント