【Excel VBA】結合セルにおいて,取得した値に応じてセルの高さを自動で調整するコードについて伺います。「様式」シートにおいてB10セルからL10セルはセル結合してあり,その結合セルは別シートに入力してある関数の戻り値(vlookup関数で文章を取得しています)をセルリンクによって取得します。結合セルの幅は,848ピクセルです。別シートの戻り値が変わるたびに,「様式」シートの結合セルにおいて,結合セル全体の幅(848ピクセル),文字サイズは変えずにセルリンクで取得した値(文章)の行数に応じて,その結合セルの高さが自動で変わるVBAコードについて伺います。なお,結合セルの高さは372ピクセル以上になるように考えております。AIにコード作成を依頼するなどして以下の回答が来ましたが,「.WordWrap = True」の部分でデバックが起こり,止まってしまいます。どのように修正したらよいか,ご教示いただけますようお願いいたします。Private Sub Worksheet_Change(ByVal Target As Range)If Not Intersect(Target, Me.Range(\u0026quot;B10:L10\u0026quot;)) Is Nothing Then AdjustMergedCellHeightEnd SubPrivate Sub Worksheet_Calculate()AdjustMergedCellHeightEnd SubPrivate Sub AdjustMergedCellHeight()Dim rng As RangeDim txt As StringDim lineCount As LongDim rowHeight As DoubleDim tempSheet As WorksheetDim tempTextBox As ShapeApplication.EnableEvents = False' 対象セル範囲(結合セル)Set rng = Me.Range(\u0026quot;B10:L10\u0026quot;)' 値を安全に取得txt = rng.Cells(1, 1).ValueIf Len(txt) = 0 Then' 空の場合は最小高さを設定rng.RowHeight = 280Exit SubEnd If' 一時的なテキストボックスを使用して行数を推定Set tempSheet = ThisWorkbook.Worksheets.Add(Type:=xlWorksheet)Set tempTextBox = tempSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 0, 0, rng.Width, 1000)With tempTextBox.TextFrame.Characters.Text = txt.Characters.Font.Size = rng.Font.Size.Characters.Font.Name = rng.Font.Name.Characters.Font.Bold = rng.Font.Bold.Characters.Font.Italic = rng.Font.Italic.AutoSize = False.WordWrap = True.Width = rng.Width' テキストの高さを取得lineCount = .Characters.Count / 20 + 1 ' 概算の行数rowHeight = .HeightEnd With' 一時シートを削除Application.DisplayAlerts = FalsetempSheet.DeleteApplication.DisplayAlerts = True' 行高さ(最低280ポイント ≒ 372ピクセル)rowHeight = Application.Max(280, rowHeight)' 行の高さを設定rng.RowHeight = rowHeightApplication.EnableEvents = TrueEnd Sub

ExcelWord

1件の回答

回答を書く

1265697

2026-06-06 05:25

+ フォロー

一応、提示させていただきます。但し、下記前提です。

◆「AdjustMergedCellHeight」だけです。

◆以下のブロックは、よく理解できないので、そのままです。

' 値を安全に取得

txt = rng.Cells(1, 1).Value

If Len(txt) = 0 Then

' 空の場合は最小高さを設定

rng.rowHeight = 280

Exit Sub

End If



◆提示コード

Private Sub AdjustMergedCellHeight()

Const r列幅最大 As Double = 255

Const r行高最大 As Double = 409

Const r行高省略 As Double = 280



Dim rng As Range

Dim txt As String

Dim lineCount As Long

Dim rowHeight As Double

Dim wb As Workbook, ws As Worksheet



Application.EnableEvents = False



' 対象セル範囲(結合セル)

Set rng = Me.Range(\u0026quot;B10:L10\u0026quot;)



' 値を安全に取得

txt = rng.Cells(1, 1).Value

If Len(txt) = 0 Then

' 空の場合は最小高さを設定

rng.rowHeight = 280

Exit Sub

End If



''別ブックで行の高さを取得

Application.ScreenUpdating = False

With Workbooks.Add

With .Sheets(1).Range(\u0026quot;B1\u0026quot;)

.Value = rng.Value ''値・属性の設定

.Font.Bold = rng.Font.Bold

.Font.Size = rng.Font.Size

.Font.Name = rng.Font.Name

.Font.Bold = rng.Font.Bold

.Font.Italic = rng.Font.Italic

.WrapText = True



.EntireColumn.ColumnWidth = r列幅最大

'.EntireColumn.AutoFit

.EntireRow.rowHeight = r行高最大

.EntireRow.AutoFit

rowHeight = .rowHeight + 5 ''微調整

End With

Application.DisplayAlerts = False

.Close False

Application.DisplayAlerts = True

End With

Application.ScreenUpdating = True



''行の高さを設定

With Range(\u0026quot;B10\u0026quot;)

If rowHeight \u0026lt; r行高省略 Then

.EntireRow.rowHeight = r行高省略

ElseIf rowHeight \u0026lt; r行高最大 Then

.EntireRow.rowHeight = rowHeight

Else

.EntireRow.rowHeight = r行高最大

End If

End With

Application.EnableEvents = True

End Sub

うったえる有益だ(0)シェアするブックマークする

関連質問

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有