[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『文字数が多いものだけ行幅を広げる』(サンパレス)
ある表で、行幅が一定に設定されています。 それで、ある列のセルの文字数が多くて、セルからはみ出す場合のみ、 対応する行の幅を広げることをVBAでやりたいのですが、いかがでしょうか。 Rows.AutoFit とすると、文字数が多い行は広がりますが、 文字数が少ない行は幅が狭くなってしまいます。 よろしくお願いいたします。
< 使用 Excel:Excel2013、使用 OS:Windows8 >
row = Target.row col = Target.Column Cells.Select Cells.EntireColumn.AutoFit Cells.EntireRow.AutoFit Columns(col).ColumnWidth = Columns(col).ColumnWidth * 1 Rows(row).RowHeight = Rows(row).RowHeight * 1 End Sub
シートモジュールに貼付。 どうでしょうか。 (二丁目) 2015/05/16(土) 13:31
Sub test() Dim t As Range Dim w Dim n As Long Dim c As Range
Set t = Range("B5:H15") '表の範囲 w = Array(, 10, 15, 10, 20, 10, 10, 5) '最小設定値
For Each c In t.Columns n = n + 1 n = n + 1 With c .AutoFit .ColumnWidth = WorksheetFunction.Min(.ColumnWidth, w(n)) End With Next
End Sub
(マナ) 2015/05/16(土) 14:07
(マナ) 2015/05/16(土) 14:10
(マナ) 2015/05/16(土) 14:15
あくまで列幅 だとして。
Sub Test2() Dim col As Range Dim sv As Double
Application.ScreenUpdating = False
With ActiveSheet.UsedRange For Each col In .Columns sv = col.ColumnWidth col.AutoFit If col.ColumnWidth < sv Then col.ColumnWidth = sv Next End With
End Sub
(β) 2015/05/16(土) 15:57
お望みのこととは違うと思いますが、こんな方法も。 E列に1行目から数行ぐらいセルからはみ出すぐらいの文字を入れて試してみてください。
Sub test() Dim r As Range Dim c As Range Set r = ActiveSheet.Range(ActiveSheet.Cells(1, 5), ActiveSheet.Cells(1, 5).End(xlDown)) For Each c In r c.HorizontalAlignment = xlCenterAcrossSelection Next c Set r = Nothing End Sub (カリーニン) 2015/05/16(土) 19:51
ありがとうございます。
βさんのコードですが,「あくまで列幅 だとして。」となっていますが, 変動させたいのは,行幅でありまして。
文字数がはみ出す行は,行幅を広げる 文字数がはみ出さないものは,行幅を狭めないで,現状のまま
としたいのですが,どうなりますでしょうか。
質問が分かりにくくて,申し訳ありません。
(サンパレス) 2015/05/17(日) 10:09
横から失礼。
それは、「行の高さ」と普通呼ばれます。
ColumnWidthの代わりに RowHeightを使えばいいですよ。 (ご自分で行の高さを調節する動作をマクロ記録すれば判明するのです)
まったく同じ考え方でできると思います。 ・始めに高さを記憶して置いて、 ・AutoFit ・狭くなってしまっていたら、元に戻す。
ここまでヒントを示されているのですから、 練習のためにご自分でトライされたらいかがですか? それでもできなかったら、他人に頼りましょう。
(γ) 2015/05/17(日) 10:28
ありがとうございます。 できました。 (サンパレス) 2015/05/17(日) 17:44
こんな感じです。 みなさん,どうもありがとうございました。
Sub Test2() Dim col As Range Dim sv As Double Application.ScreenUpdating = False With ActiveSheet.UsedRange For Each col In .Rows sv = col.RowHeight col.AutoFit If col.RowHeight < sv Then col.RowHeight = sv Next End With End Sub
(サンパレス) 2015/05/17(日) 21:32
(γ) 2015/05/17(日) 22:02
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.