人にものを尋ねるのと、生成AIに命令するのと二つを区別できない方のようですね。
回答者は機械じゃないです。人間に対して質問していることを忘れずに。
(1)
80文字以上は折り返して、とのことですが、それは半角換算でということですか?
もちろん、それは可能なのですが(手元にあります)、そのまま実現しても、問題点はあります。
行の最初の文字が、"、"や"。"で始まってしまうことがあります(禁則処理を自前でする必要)。
なおかつ表示や印刷で障害が起きる可能性もあります。
そもそも、そういうことをExcelで実現する場面が想像できません。
もしそうなら、それはWordなどで対応すべき話だと思います。
お薦めは、手動で列幅を調整することです。(自動で禁則処理がされます)
(2)
その上で、
「全体が表示されなくなったり、逆に余白が出来るので、それを行高で調整したい」
と言う話は過去にも結構登場しています。
しかし、単純計算で対応できる万能策は今まで出されていないと思います。
10数年前に議論したときのものを載せておきます。
(ある種の近似計算や微調整を施したものなので、読み取りにくいところはあると思いますし、
場合によっては表示が欠けたり、印刷時に表示と異なるなどという事態になる可能性はあります。
完璧なものは仕組みからして困難であることを承知して下さい。)
=== 以下参考コードです。=======
Rem 結合したセルには、「折り返して全体を表示」設定にして、
Rem お望みの列幅に修正しておいて下さい。
Rem 結合セルを選択した状態で、以下のマクロ実行してください。
Rem
Rem 列幅は現在とほぼ同じで、
Rem 結合セルに全体が表示されるように、各行の行高を調整します。
Sub 結合セルの行高調整()
Dim currentCell As Range, mergeRange As Range
Dim sum_of_ColumnWidth#, sum_of_Width#
Dim sum_of_height#, backup_height#
Dim backup_ColumnWidth#
Dim y1#, y2#
Dim c As Range
Dim ratio#
Dim targetHeight#
Application.ScreenUpdating = False
Set currentCell = ActiveCell
If currentCell.MergeCells Then
Set mergeRange = currentCell.MergeArea
'結合領域のセル幅(ColumnWidthとWidth)の合計をそれぞれ算出
sum_of_ColumnWidth = 0
sum_of_Width = 0
For Each c In mergeRange.Rows.Item(1).Cells
sum_of_ColumnWidth = _
sum_of_ColumnWidth + c.EntireColumn.ColumnWidth
sum_of_Width = sum_of_Width + c.EntireColumn.Width
Next
Rem===================================================
Rem 結合セルの先頭セル(currentCell)を作業領域に使って、
Rem Autofitして、あるべき行高を求める。
'結合領域の高さ(伸縮率計算用)
sum_of_height = mergeRange.Height
'アクティブセルの行高(復元用)
backup_height = currentCell.Height
With currentCell.EntireColumn
'アクティブセルのセル幅(復元用)
backup_ColumnWidth = .ColumnWidth
'アクティブセルの列幅(columnWidth)を、「結合セルの列幅(columnWidth)の合計」と
'同じ幅に設定 (線型近似による微調整を施しています)
.ColumnWidth = sum_of_ColumnWidth
y1 = .Width
.ColumnWidth = sum_of_ColumnWidth + 2
y2 = .Width
.ColumnWidth = sum_of_ColumnWidth _
+ 2 * (sum_of_Width - y1) / (y2 - y1) '設定すべき列幅
'結合をはずし、アクティブセルに対してオートフィットをかける
mergeRange.MergeCells = False
currentCell.EntireRow.AutoFit
targetHeight = currentCell.Height '■これが求める高さ
'復元(変更したのは、アクティブセルの行高、セル幅だけなので、それを元に戻す)
.ColumnWidth = backup_ColumnWidth
currentCell.EntireRow.RowHeight = backup_height
mergeRange.Merge
End With
Rem =====================================================
Rem 結合セル領域の各行の高さを、元の高さの比率で調整する。
'行高の伸縮率
ratio = (targetHeight + 3) / sum_of_height
' 3は遊び(若干詰まる感じなので)
'各行の高さを伸縮させる
For Each c In mergeRange.Columns.Item(1).Cells
c.RowHeight = ratio * c.RowHeight
Next
Else
currentCell.EntireRow.AutoFit '普通にオートフィット
End If
Application.ScreenUpdating = True
End Sub