結合セルは、VBAではあまり取り扱いたくないテーマですが、一応。
Excelの仕様で、結合セルでは列幅行高の自動調整はできません。それでも、結合セル範囲が限定されている場合は、比較的簡単なのですが...
(サンプルシート)
考え方としては、
1)微調整用に.MergeArea.Widthを w に記憶。
2)A1セル幅を変数 n に記憶。
3)結合範囲であるA1:C1までの幅をそれぞれ足していき変数 x に記憶。
4)いったん、結合解除。
5)A1セル幅を記憶しておいた x まで広げる。(結合セル幅にする)
6)各列余白分でギャップが出るのでちょっと調整。
7)AutoFit。
8)再び横方向結合。
9)A1セル幅を記憶しておいた n に戻す。
という流れでいいかと。
(結果)
結合セル範囲が限定的ではなく混在している場合は、結合セルをActiveにしてショートカットキーなどで任意に実行するようにすれば、手作業よりはラクかもしれません。
#(2008.10.09 追記)
#懺悔編あり:D
Excelの仕様で、結合セルでは列幅行高の自動調整はできません。それでも、結合セル範囲が限定されている場合は、比較的簡単なのですが...
Sub pre() 'サンプルシート作成 Const s As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" With Sheets.Add With .Range("A1:C5") .Columns(1).Formula = "=REPT(""" & s & """,ROW())" .Merge across:=True .WrapText = True End With End With End Sub
(サンプルシート)
Sub try1() 'サンプルシートで実行 Dim w As Single Dim n As Single Dim x As Single Dim i As Long With Range("A1:C5") w = .Width n = .Columns(1).ColumnWidth x = n For i = 2 To 3 x = x + .Columns(i).ColumnWidth Next i .UnMerge With .Item(1) .ColumnWidth = x Do Until .Width >= w .ColumnWidth = .ColumnWidth + 0.1 Loop End With .EntireRow.AutoFit .Merge across:=True .Columns(1).ColumnWidth = n End With End Sub
考え方としては、
1)微調整用に.MergeArea.Widthを w に記憶。
2)A1セル幅を変数 n に記憶。
3)結合範囲であるA1:C1までの幅をそれぞれ足していき変数 x に記憶。
4)いったん、結合解除。
5)A1セル幅を記憶しておいた x まで広げる。(結合セル幅にする)
6)各列余白分でギャップが出るのでちょっと調整。
7)AutoFit。
8)再び横方向結合。
9)A1セル幅を記憶しておいた n に戻す。
という流れでいいかと。
(結果)
結合セル範囲が限定的ではなく混在している場合は、結合セルをActiveにしてショートカットキーなどで任意に実行するようにすれば、手作業よりはラクかもしれません。
Sub try2() '"dummy"シートを作成して、結合セルをActiveにして実行。 Dim r As Range Dim w As Single Dim x As Single Dim i As Long Set r = ActiveCell.MergeArea w = r.Width For i = 1 To r.Columns.Count x = x + r.Columns(i).ColumnWidth Next With Sheets("dummy").Range("A1") With .Font .Name = r.Item(1).Font.Name .Bold = r.Item(1).Font.Bold .Size = r.Item(1).Font.Size End With .WrapText = True .Value = r.Item(1).Value .ColumnWidth = x Do Until .Width >= w .ColumnWidth = .ColumnWidth + 0.1 Loop .EntireRow.AutoFit r.RowHeight = .RowHeight / r.Rows.Count End With Set r = Nothing End Sub
#(2008.10.09 追記)
#懺悔編あり:D