プロが教える店舗&オフィスのセキュリティ対策術

先日、下記のマクロの修正を教えて頂きました。
Sub 行調整()
Dim r As Range, workCell As Range
Dim n As Integer, i As Integer, existingWidth As Single
Const C As Integer = 4
Const DefaultRowHeight As Double = 27
Application.ScreenUpdating = False
For Each r In Range("B26:B60") 'MergeArea(1) B~E = C =4
If WorksheetFunction.CountIf(r.Resize(, C), "<>") > 0 Then
'値ありセル
r.Rows.AutoFit
'40行目 最終列取得行
n = Cells(40, Columns.Count).End(xlToLeft).Column + 2
For i = 0 To C - 1
If r.Offset(, i).MergeCells Then
Set workCell = Cells(r.Row, n).Offset(, i)
With workCell
existingWidth = .ColumnWidth
.Column Width = GetMaregeColumnWidth(r.Offset(, i).MergeArea)
.WrapText = True
.Font.Size = r.Offset(, i).MergeArea.Font.Size
.Value = r.Offset(, i).Value
End With
End If
Next
If Not workCell Is Nothing Then
r.RowHeight = r.RowHeight
Cells(r.Row, n).Resize(, C).Clear
Cells(r.Row, n).Resize(, C).ColumnWidth = existingWidth
Set workCell = Nothing
End If
Else
'空白行のみ
r.RowHeight = DefaultRowHeight
End If
Next
Application.ScreenUpdating = True
End Sub

Function GetMaregeColumnWidth(RngMarge As Range) As Long
Dim n As Long, r As Range
For Each r In RngMarge.Columns
n = n + r.ColumnWidth
Next
GetMaregeColumnWidth = n
End Function
このマクロを実行すると「Width」にエラーが出てしまします、解決方法を教えてください。
エラー画像を添付いたします。
又、このコードの最後に「End Sub」は必要ないのでしょうか?
重ねて教えてくください。
よろしくお願いします。

「エクセルのマクロについて教えてください。」の質問画像

A 回答 (2件)

こんにちは


すみません  
コンパイルチェックせずに投稿してしまいました
タイプミスで .ColumnWidth が正解です
(半角スペースは要りません)

>このコードの最後に「End Sub」は必要ないのでしょうか?

Sub 行調整 実行プロシージャ と
結合セルの列幅を算出する Function プロシージャに分かれていますので
このまま 半角スペースを削除すれば機能すると思います
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
上手く行きました。
いつもありがとうございます。

お礼日時:2023/01/11 10:31

>.Column Width =



.Column.Width =

では?

先日の質問で CountIf関数にResizeを必要とする意味が分からなかったですね。
結合しているセルの左端を基準にしている際、結合範囲を取り出したいとの考えでしょうけど、検証してもそもそも右の3つのセルに例え指定して値を代入しても入りませんでした。
CountBlank関数で空白セルを求めると 3 と出ましたし。
Excelのバージョンによって違うのですかね。
古い2019相当の物を使ってますので最新版とは違うのかな?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
参考にさせて頂きます。

お礼日時:2023/01/11 10:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!