先日教えて頂きましたマクロを少し改良して
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・ことしの初夢、何だった?
- ・【お題】大変な警告
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAを使って、値...
-
Excelで指定した日付から過去の...
-
TODAY()で設定したセルの日付...
-
特定のセルが空白だったら、そ...
-
Excel vbaで特定の文字以外が入...
-
【EXCEL VBA】Range("A:A").Fi...
-
【Excel VBA】指定行以降をクリ...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel】指定したセルの名前で...
-
VBからEXCELのセルの値を取得す...
-
EXCELで変数をペーストしたい
-
”戻り値”が変化したときに、マ...
-
エクセルVBAでコピーして順...
-
VBA初心者です。結合セルを保持...
-
Excel ユーザーフォームをモー...
-
VBAでセルをクリックする回...
-
Excelのプルダウンで2列分の情...
-
ExcelVBA データを消去すると罫...
-
共有フォルダからのファイル名...
-
セルに画像挿入すると、右セル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
Excelで指定した日付から過去の...
-
i=cells(Rows.Count, 1)とi=cel...
-
【Excel VBA】指定行以降をクリ...
-
特定のセルが空白だったら、そ...
-
VBA実行後に元のセルに戻りたい
-
”戻り値”が変化したときに、マ...
-
Excelのプルダウンで2列分の情...
-
連続する複数のセル値がすべて0...
-
vba 隣のセルに値がある行だけ...
-
エクセルvbaで、別シートの最下...
-
Excel vbaで特定の文字以外が入...
-
EXCELのVBA-フィルタ抽出後の...
-
特定の文字を条件に行挿入とそ...
-
【EXCEL VBA】Range("A:A").Fi...
-
【VBA】シート上の複数のチェッ...
-
DataGridViewの各セル幅を自由...
-
VBAでセル同士を比較して色付け
-
【VBA】指定したセルと同じ値で...
-
セル色なしの行一括削除
おすすめ情報
回答ありがとうございます。
おっしゃる通り、
B列 & E列又はE列 & F列を連結させた際に空白であるか否かの判定をすればよいとおもうのですが
上記のマクロコードをどのように変更したらよいかがわかりません。
出来るだけ詳しくご指導をお願いいたします。
結論ですが
結合されている行セルB、C、Dと行セルEと結合されている行セルE、F、G、H
の行が空白か否かを判断し、文字がある場合は自動調整、空白の場合はセル27間隔での設定を行セル60まで設定できる方法を教えてください。
よろしくお願いいたします。