- ベストアンサー
エクセルVBA 行の高さ自動設定
エクセル2002のVBA時、行の高さを自動設定することに関して、ご教授願います。 行の高さは Autofit を使用する事となっているのですが、Autofitでは文字の大きさから高さを自動設定するようですが、私は入力されている行数で自動設定をしたいと思っています。 1個のセルに200文字くらい入力された場合、列幅を30ポイント(マージして)行の高さを自動的に取得する方法ではフォントサイズの10ポイントで設定しています。 どうすればよいのでしょうか?良い方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
こんにちは。 以下、的外れだった場合はすみません。 質問者さんが行いたい事は、 『結合されたセルに対して、行の高さの自動調整(Autofit)を行いたい。』 という事でしょうか? その場合ですが、残念ながら、結合されたセルに対して、マクロのAutofitを 実行しても、機能しない(自動調整されない)ようです。 ※当方は、Excel2000で試してみました。 ですが、工夫すれば自動調整を行うことは可能です。 以下のマクロ(サンプル)は、その一例です。 ■マクロの概要 ワークシートのB3とB4のセル(複数行のテキストが格納されている)に対して、 以下の操作を行います。 1)フォント設定: MS Pゴシック、サイズ8 2)配置設定 : 横位置 =標準 縦位置 =上詰め 自動折り返し(=あり) 3)B3:C3をセル結合、B4:C4をセル結合 4)B列、C列の列幅を、15に設定 ・幅の単位は、標準フォントの文字幅基準 ・B列、C列の合計列幅は、30 (=15×2) 5)3行目、4行目の行の高さを自動調整 6)B3:C4のセル範囲に罫線を設定 ■結合セルに対する[行の高さ]の自動調整(Autofit)の方法 1)一旦、セル結合を解除する。 2)結合解除したセル(単一列)の列幅を、希望する列幅に設定する。 3)結合解除したセル(行単位)に、Autofitを行う。 4)3)のセル(行単位)の[行の高さ]を取得して保存しておく。 5)再び、セルの結合を行う。 6)結合セル(列単位)の列幅を、2)で設定した列幅の「列数で割った値」に 設定する。 ※結合セルの合計列幅を、2)の設定列幅と同じにする。 7)結合セル(行単位)の[行の高さ]を、4)で保存しておいた高さに設定する。 ■マクロ(サンプル) 注1)このマクロは、「標準モジュール」に実装するマクロです。 注2)インデント等のため、全角スペースを入れています。 /////↓ここから/////////////////////////////////// '** 結合セルの[行の高さ]の自動調整 ** Sub MyAutoFit() Dim nCW As Long '列幅(結合後の列幅) Dim nRH1 As Long '行の高さ1(3行目用) Dim nRH2 As Long '行の高さ2(4行目用) '結合セル(2列分)の列幅の値を設定 '※幅の単位は、[標準スタイル]の1文字分 ' の幅に相当する nCW = 30 '操作対象のワークシートを指定 With Worksheets("Sheet2") 'B3:C3、B4:C4のセル結合を一旦解除 .Range("B3:C3").MergeCells = False .Range("B4:C4").MergeCells = False 'B3:B4のフォント設定 With .Range("B3:B4").Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 8 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With 'B3:B4の配置を設定 With .Range("B3:B4") .HorizontalAlignment = xlGeneral '横位置(=標準) .VerticalAlignment = xlVAlignTop '縦位置(=上詰め) .WrapText = True '自動折り返し(=あり) .Orientation = 0 '傾き(=0度) .AddIndent = False 'インデント(=なし) .ShrinkToFit = False '縮小表示(=なし) .MergeCells = False 'セル結合(=なし) End With 'B列の列幅を設定 '※B列~C列の結合後の列幅と同じ幅で設定 .Columns("B:B").ColumnWidth = nCW '3行目~4行目の行の高さを自動調整 .Rows("3:4").EntireRow.AutoFit '3行目~4行目の行の高さを取得して保存 nRH1 = .Rows("3:3").RowHeight nRH2 = .Rows("4:4").RowHeight 'B3:C3、B4:C4のセルを再度結合 .Range("B3:C3").MergeCells = True .Range("B4:C4").MergeCells = True 'B列~C列の列幅を設定 '※結合セルが2列のため、その列幅の1/2幅を設定 .Columns("B:C").ColumnWidth = nCW / 2 '3行目~4行目の行の高さを設定 '※保存しておいた行の高さをここで設定 .Rows("3:3").RowHeight = nRH1 .Rows("4:4").RowHeight = nRH2 'B3:C4のセル範囲の罫線を設定 With Worksheets("Sheet2").Range("B3:C4") '対角線の設定(=なし) .Borders(xlDiagonalDown).LineStyle = xlNone .Borders(xlDiagonalUp).LineStyle = xlNone '左端の枠線の設定(=中線の実線) With .Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With '上端の枠線の設定(=中線の実線) With .Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With '下端の枠線の設定(=中線の実線) With .Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With '右端の枠線の設定(=中線の実線) With .Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With '内側の垂直方向の罫線の設定(=なし) .Borders(xlInsideVertical).LineStyle = xlNone '内側の水平方向の罫線の設定(=細線の実線) With .Borders(xlInsideHorizontal) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With End With End With End Sub /////↑ここまで/////////////////////////////////// 添付画像は、上記マクロを実行したExcelシートのキャプチャ画像です。 ※貼れていない、または、見辛かった場合はすみません。 以上です。参考になれば幸いです。
その他の回答 (1)
- wkbqp833
- ベストアンサー率36% (319/886)
印刷のときのことを考えての話ではありませんか? 残念ながらできません。マイクロソフトはあくまでも、Excelは表計算ソフトであり、文章はWordで作ってくれというスタンスです
お礼
回答していただきありがとうございました。 御礼が遅くなりすみません。 いろいろと試行錯誤をしていたら、このような時期となりました。おかげさまで、印刷画面が使いやすいものとなり、感謝しています。 時々、業務を使いやすいものとするため、エクセルを工夫しているのですが、出力では思うようにならず本などを読みながら作成するのですが、指導していただけるので、助かります。 今後ともよろしくお願いいたします。