先日教えて頂きましたマクロを少し改良して
Sub 行調整()
Dim r As Range
For Each r In Range("B26:B60,E26:E60")
If WorksheetFunction.CountIf(r.Resize(, 4), "<>") > 0 Then
r.Rows.AutoFit
Else
r.RowHeight = 27
End If
Next
End Sub
があります。
マクロを実行すると
B26:B60、E26:E60までの行を文字数により自動で調整でき、空白のセルは27間隔になります。
しかし、E45の部分が文字調整が出来ず、B45の文字数での調整になってしまいます。
解決方法を教えてください。
E45はE45とF45とG45とH45もセルが結合されております。
又、表はA46で終わっておりますが、場面によって行セルを挿入して増やしていく可能性があるため、
行セル60まで設定しております。
よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
こんにちは
確かB列からE列を含む結合セルの行で 空白ならば行の高さを27に
値が有ればAutoFitだったかと思います
その為、ループを減らす意味でRange("B26:B60")をループして
列方向にResizeで範囲を広げてCountIfに与えていたかと・・
つまりは、Range("B26:B60")だったと記憶しています
このコードの実行条件としてフォントの大きさで高さに問題がある場合
セルの書式設定で折り返し設定がされ高さをAutoFitしたい場合に
E列を含む結合セルでも正しく機能すると思います
問題の原因
セル内でAlt+Enterで改行コードが挿入されている事が原因と推測します
書式設定と改行コードが両方設定されている場合、入力可能セルの幅に合わせた文字列操作と改行による操作をしなくてはならなくなると思われます
改行コードがない場合 セル巾に合わせフォントサイズにおける最大文字数を1行目として改行コードを入れるなど・・・入力文字校正が崩れる恐れがありますね(上手く説明できない)
Alt+Enterを使用しなければRange("B26:B60")としてそのまま使えると思いますがAlt+Enterを使用している場合は 列巾を留意して折り返しを使わない等が良いと思います
他のデータからセルにVBAなどで取得してセルを調整しているのなら
文字列操作を行って高さ設定のVBA処理をした方が良いかも知れません
文字列操作はフォントサイズ、1行の最大数、改行の挿入シンボルなどを考える必要があると思います
折り返し設定に影響されていない場合に機能すると思います
Sub 行調整()
Dim r As Range
Dim tmp, n As Integer, i As Integer
For Each r In Range("B26:B60")
If WorksheetFunction.CountIf(r.Resize(, 4), "<>") > 0 Then
r.Rows.AutoFit '折り返し設定とフォントサイズ
For i = 0 To 3
If InStr(r.Offset(, i), vbLf) > 0 Then
If n < UBound(Split(r.Offset(, i), vbLf)) Then
n = UBound(Split(r.Offset(, i), vbLf)) + 1
End If
End If
Next
If n > 0 Then
tmp = r.RowHeight
r.RowHeight = tmp * n '改行コード Alt+Enter
n = 0
End If
Else
r.RowHeight = 27
End If
Next
End Sub
No.1
- 回答日時:
E列が結合セル内にあるか否かを判定すれば宜しいのでは?
それと、
>For Each r In Range("B26:B60,E26:E60")
B列・E列と分ける意味があるのでしょうか?
またB・C・D列の結合セルとF・G・H列の結合セルだけがE列と関わると言うなら、上記の条件式に加え、B列 & E列又はE列 & F列を連結させた際に空白であるか否かの判定をすれば宜しいのでは?
結合セルは左上のセル番地が値のアドレスなのでResizeする必要はないと思いますし、指定するのはE列の範囲だけで宜しいかと。
と、初級レベルなジジィは思ったのですが勘違いかもですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/12/26 14:27
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/12/26 12:05
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/01/11 08:33
- Excel(エクセル) 表示形式、文字列セル(列)に数式を入力するには マクロ 1 2022/09/18 10:53
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/26 13:19
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Excel(エクセル) Excel VBAで、行の高さを、上下1文字分程度高くしたい 3 2023/04/23 00:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAを使って、値...
-
【Excel】指定したセルの名前で...
-
特定のセルが空白だったら、そ...
-
i=cells(Rows.Count, 1)とi=cel...
-
特定の文字を条件に行挿入とそ...
-
VBA コピーして次の値まで貼り...
-
【Excel VBA】指定行以降をクリ...
-
screenupdatingが機能しなくて...
-
EXCELで変数をペーストしたい
-
VBAを使用した時間管理
-
VBAでセルをクリックする回...
-
Excel2003 複数セル1列の入力済...
-
VBA 検索と入力 Excel ブック ...
-
VBAでマクロ実行中はExcelのマ...
-
Excelで指定した日付から過去の...
-
VBA ユーザーフォーム ボタンク...
-
DataGridViewのセル編集完了後...
-
連続する複数のセル値がすべて0...
-
【EXCEL VBA】Range("A:A").Fi...
-
excelのマクロについて教えて下...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
【Excel VBA】指定行以降をクリ...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel】指定したセルの名前で...
-
Excelで指定した日付から過去の...
-
特定の文字を条件に行挿入とそ...
-
Excel VBA、 別ブックの最終行...
-
EXCELで変数をペーストしたい
-
Excelのプルダウンで2列分の情...
-
TODAY()で設定したセルの日付...
-
Excel vbaで特定の文字以外が入...
-
screenupdatingが機能しなくて...
-
DataGridViewの各セル幅を自由...
-
Sub 要具ライフ() ActiveSheet....
-
【EXCEL VBA】Range("A:A").Fi...
-
VBAを使用した時間管理
-
VBAでセルをクリックする回...
-
セル色なしの行一括削除
-
エクセルVBAでコピーして順...
おすすめ情報
回答ありがとうございます。
おっしゃる通り、
B列 & E列又はE列 & F列を連結させた際に空白であるか否かの判定をすればよいとおもうのですが
上記のマクロコードをどのように変更したらよいかがわかりません。
出来るだけ詳しくご指導をお願いいたします。
結論ですが
結合されている行セルB、C、Dと行セルEと結合されている行セルE、F、G、H
の行が空白か否かを判断し、文字がある場合は自動調整、空白の場合はセル27間隔での設定を行セル60まで設定できる方法を教えてください。
よろしくお願いいたします。