• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excelマクロ・行の高さを自動調整したい)

Excelマクロ・行の高さを自動調整する方法

real beatin(@realbeatin)の回答

回答No.4

#1-2です。#1補足コメント拝見しました。 > うまくいきませんでした。 行高の[自動調整]が出来なかった、ということで宜しいですか? 補足の内容をみて原因となり得る特異点は、ただ一つ、 [結合セル]の行高を[自動調整]しようとしていることです。 Excel本来の仕様として[結合セル]に対しては [自動調整]は機能しません。 なので、Excelの機能に期待せず、自力実装することになります。 簡単ではないですね。 行の高さを計算で求めるのは、パラメータが多過ぎて困難ですから、 作業列を使って、 作業セル(単セル)の実効幅を結合セルの実行幅(計算で求める)に合わせ、 フォントの各設定を合わせ、値をトレースし、 [折り返して全体を表示する]行高[自動調整]を 作業セルでシミュレートした高さを該当行の高さとして確定します。 何が難しいって、[結合セル]が難しいので、 下に書いたマクロは専ら[結合セル]に対して行の高さをすべて Excelの[自動調整]仕様に合わせる、というものです。 [結合セル]以外に対しては全く処理しません(#1-2を参考にして下さい)。 もし、高さを変えたくない[結合セル]があれば、 処理対象セル範囲の指定方法を工夫して除外するようにしてください。 本当は、、、 行高の[自動調整]をしたい[結合セル]が、 何処と何処、、、にあるとかの情報があれば、 もうちょっぴり簡単に書けたかも知れません。 ここに挙げるマクロをお使いのマクロのどのタイミングで実行するか、 ですが、 Sheet1の印刷に関する設定変更等を、ループ中に、 シート毎に処理している場合は、その直前。 '人材番号をA1セルに入力し'た後、 その他、セルやシートの各種設定を、 ループ中に、シート毎に処理している場合は、その後、になります。 以下、こちらの環境では問題なく動いてますが、 もし、何か不足があれば、具体的に書いてくだみてくださいね。 ◆でマークしている3か所は、それぞれ引数をそちらで適宜指定(または確認)してください。 ' ' ====================================== Sub Re8919629() Const S = "Sheet1" ' 要指定◆シート名は正確に◆ Dim rWork As Range ' 作業セル範囲 Dim c As Range ' ループ用の[各セル] Dim cnCol As Long ' 処理件数   If ActiveSheet.Name <> S Then Sheets(S).Select ' 処理対象シートを確実に選択しておく   With ActiveSheet.UsedRange ' 処理対象シートの内、使用中の範囲を捉える     ' ' 要指定◆一時的な作業列としてそれより右すべてが使用可能な列を指定(例ではJ列)◆     ' ' ◆但し、作業列は必ず印刷範囲の外であること◆     ' ' 作業セルを必要な行数に限定した範囲として変数に格納     Set rWork = Columns("J").Resize(.Rows(.Rows.Count).Row)   End With   Application.ScreenUpdating = False ' 処理が遅くならないように描画停止   On Error GoTo ErrH_ ' エラートラップ   ' ' 処理対象セル範囲の[各セル]を総当たりでループ   cnCol = 0 ' 初期化   For Each c In Range("E1:E50") ' 要指定◆処理対象セル範囲をRange型で指定◆余裕をもって大きめに指定してもOK     If c.MergeCells Then ' [各セル]が結合だったら       If c.Address = c.MergeArea(1).Address Then ' [各セル]が結合セル範囲の左上だったら         If Not c.WrapText Then c.WrapText = True ' [各セル][折り返して全体を表示する]設定の徹底         cnCol = cnCol + 1 ' 処理する数をカウント         With rWork.Cells(c.Row, cnCol) ' [各セル]と同じ行 未使用の作業列にあるセルを作業セルとして           .ColumnWidth = (c.MergeArea.Width * 4 / 3 - 5) / 8 ' 作業セルの有効幅を[各セル]に合わせる           .Font.Name = c.Font.Name ' 作業セルのフォント設定各種を[各セル]に合わせる           .Font.Size = c.Font.Size           .Font.Bold = c.Font.Bold           .Value = c.Value ' 作業セルの値を[各セル]の値を定数化したものに設定           .WrapText = True ' 作業セルを[折り返して全体を表示する]設定           .EntireRow.AutoFit ' 作業セルの行高を[自動調整]         End With         c.RowHeight = c.RowHeight ' 作業セルが規定する行高を確定する       End If     End If   Next   rWork.Resize(, cnCol).Clear ' 作業セルをクリア '  rWork.Resize(, cnCol).Delete Shift:=xlShiftToLeft ' 作業セルを削除   ActiveSheet.UsedRange ' 印刷範囲を変えないようにUsedRange を元に戻す。 ErrH_:   If Err Then MsgBox "エラー:" & Err.Number & vbLf & Err.Description ' エラー時のメッセージ   Application.ScreenUpdating = True ' 描画再開 End Sub

sakimi12
質問者

補足

ご丁寧なご回答ありがとうございます。なんだかとても難しそうですね…。 横(列)には結合していますが、縦(行)は結合していないので、問題がないと思っていました。 記述頂いたものをコピペして要指定◆の三か所を、 (1)Const S = "プロフィールシート" (2)Set rWork = Columns("V").Resize(.Rows(.Rows.Count).Row) (3)For Each c In Range("J13:T13") ' ※試しに結合しているセル範囲J13:T13を入力してみました※ と変えて実行してみましたが、「エラー:1004アプリケーション定義またはオブジェクト定義のエラーです」というメッセージが出ました。 ちなみに、行の高さを自動調整したい結合セルは、F9:T9、F13:T13、F21:T21、F22:T22、F23:T23の5か所です。 印刷ボタンに登録したマクロも念のために記します。 もしよろしければ、またご教授ください。 ************************************** Private Sub 印刷開始_Click() Dim 番号 As Integer a = TextBox1.Value n = TextBox2.Value 'プリンタの選択後、印刷またはキャンセル Dim BlnRtn As Boolean BlnRtn = Application.Dialogs(xlDialogPrinterSetup).Show Select Case BlnRtn Case True For 番号 = a To n Sheets("プロフィールシート").Range("A1").Value = 番号 Sheets("プロフィールシート").PrintOut Next 番号 Case False MsgBox "印刷はキャンセルされました。" End Select Unload Me End Sub

関連するQ&A

  • EXCELの「行の高さ」の自動調整について

     EXCEL2013を使っています。  EXCELでセルの配置を横位置:標準、縦位置:下詰め、「折り返して全体を表示する」と設定してあります。  添付図のような場合で行の高さを自動調整したとき、行の高さは、 第1行: 全セルで字数が各列の幅以下なので高さは1行分 第2行: B,C列で字数が列幅を超えているので高さは2行分 となっていますが、 第3行: C列では字数が列幅ギリギリですが改行は入っていません。  それなのに行の高さの自動調整を行うと高さは2行分となってしまいます。改行がないのにあたかも改行が入っているかのように行を余分にとってしまっているわけです。  このような場合1行だけになるように自動調整する方法はないものでしょうか、お伺いします。手操作で調整すればよいのですがデータ量が大変大きくて作業が大変です。  なお、これまでの経験では、ワークシートの上では1行でも、印刷すると2行になっていることがありましたが、今回の場合、印刷メニューで印刷画面を見ると改行は入っていませんし、行の高さは2行となっています。(実際の印刷は実行していません。)

  • EXCEL の行を自動調整にしているのに・・・

    EXCEL で表を作っています。各項目で文の長さがバラバラで、行を「自動調整」にしています。それが、あるときから、なぜか最後の行だけ半分ほど隠れてしまい、表示および、印刷がされなくなってしまう行がでてきました。なぜでしょう??

  • 列の高さを自動調整できるマクロ?

    ■顧客情報一覧のシートと、 顧客情報→個人の顧客を閲覧するシートがあります。 マクロを起動すると、 「一覧」に入力をしてある顧客の行動経歴が、 「閲覧」のシートのセルに反映するようになっています。 ■入力してある行動履歴は、顧客によって、その長さが違います。 ある顧客は、30数行にも渡る長さですが、 べつの顧客は1行しか行動履歴がありません。 その「情報量」に応じて、「行の高さ」が全て表示されるように自動調整してくれるマクロをくみたいと思っています。 どのようにしたらよいのか‥ アドバイスをよろしくお願いいたします。

  • Excel97で自動的に行挿入させるマクロのつくりかた。

    こんにちは。 マクロ超超初心者です。 WN98SE、Excel97です。 やりたいことは、たとえば、 B1に1001 B2に1001 B3に1002 B4に1003    ・    ・    ・ と入っていたとします。 ここで、1001から1002に変わる(又、1002から1003に変わる)とき、その間の行に3行空行を自動的に挿入させたいのですが、どういうマクロの記述をすればできるのでしょうか・・・。 それを新規ブックでもボタンひとつで実行させるにはどのような設定をしたらよいでしょうか。 どなたか教えてください。 よろしくおねがいします。

  • エクセルマクロ 印刷「105~110」などの自動連続印刷の仕方

    エクセルです。今、Vlookup関数で別のシートから呼び出して表示しています。例えば、シート1のA4に「101」と入力するとシート2を参照してデータをもってくるようになってます。 そして、102、103~と打つことによって変化していきます。 また、 101~131まで、一気に自動印刷するマクロはできました。 同様に、 201~231まで、一気に印刷するマクロはできました。 そこで、教えて欲しいのです。 105~110など途中のところを連続印刷するためのマクロはどのようになりますか。 もちろん、105~110などと打つセルをつくる必要はあると思いますが・・・。お願いしますm(_)m

  • エクセルで行の高さ

    WINDOWS XP(Home Premium)でExcel2003を使用しています。 300行のデータに対し、エクセルで行の高さの自動調整をしました。 しかし、高さが一部不充分であり、印刷されると不備が多々あります。 行の高さを  「メニュー・書式(O)→行(R)→自動調整(A)」でおこなわれる高さの 1.2倍~1.5倍くらいの高さにしたいのですが良い方法はありませんか? おそらくマクロやVBAを使えば可能なんだろうなとは思いながら、 コマンドのことやプログラムを組み立てる知識が無いので、 VBAにこれを貼り付けろ、という提案を頂けたらすごく助かります。 よろしくお願いします。

    • ベストアンサー
    • Mac
  • エクセルで、行の高さの自動調整が出来ません

    セルの書式設定で、 折り返して表示させた場合や、 Alt+Enterキーで改行させた場合、 行の自動調整が出来ません。 正確に言えば出来る時と出来ない時があります。 セルの結合などは行っていなくてもそうなります。 OSはMeです。 ご存知の方、教えてくださいね。

  • 【エクセル】 結合セルで行の高さを自動調整する方法

    通常、セルに多数の文字を書き込んでも列幅を変更 したくないときには、セルの書式設定で 「折り返して全体を表示する」 としておけば、列幅を広くすることなく、行の高さ が自動調整されます。 これを、結合セルでやろうとするとどうしても 自動調整してくれません。 結合セルでも、行の自動調整機能が働く方法を 教えてください。 よろしくお願いします。

  • エクセルでマクロを自動的に実行

    表題の通りなんですが、エクセルで、あるセルに指定された数値(語句)が入った場合に、それを自動的に感知して実行するマクロがあればと思うのですが、そういったことってできるのでしょうか。 具体的には、  1、バーコードリーダーで数値をセルに入力  2、その数値に対応する名前をvlookup関数にて表示  3、その名前が入力された時点でマクロが自動的に実行 と言うものです。  3の部分がよく分からずに困っています。できるかどうか分かりませんが、もしできるようであるならその方法を教えていただければありがたいです。どうか、よろしくお願いします。

  • Excelで50行毎に改ページを入れたい

    表題を1行入れて1ページに49行となるように改ページを入れたいのですが、どのようなマクロを組めばできますか? また、行は49行の倍数と成るように印刷範囲を設定しして列は1ページに収まるように設定するにはどうしたらよいか併せて教えていただければ助かります。 例えば、349行 F列まである場合は、縦が7枚×横が1ページとなるように自動で設定したいです。