列幅の自動調節
普通は調節したい列の右側をダブルクリックで調節するか
Columns("b").AutoFit
これだと一番長い文字列に合わせられるけど
短い文字列の幅に合わせたいときもある!
B列の幅の調節でB3の「いいい」に合わせたいとき
Range("b3").Columns.AutoFit
これを実行するとピッタリになる
B3とB4の文字列に合わせたいとき
Range("b3:b4").Columns.AutoFit
このときはB3より長い文字列のB4の方に合わせられる
こんな感じで指定したセル範囲の文字列に合わせることもできる
これを使って
セル幅があっていない範囲をテキストボックス化すると
見やすいものができる
いいねえ
セル範囲の大きさ、余白、文字の配置
これらを調整してセル範囲そっくりなテキストボックスを作ってみたい
文字の配置は前回までで終わっているので
テキストボックスの余白設定
図形の書式設定からできる
マクロだと
テキストボックスの
TextFrame2の4つのMarginプロパティに値を指定する
この値はセンチメートルじゃなくてポイントかなあ
0.25cmは7.2,0.13cmは3.6になる
選択したテキストボックスの余白を初期値にするマクロ
Sub yohaku()
Dim s As Shape
Set s = Selection.ShapeRange.Item(1)
With s.TextFrame2
.MarginBottom = 3.6
.MarginLeft = 7.2
.MarginRight = 7.2
.MarginTop = 3.6
End With
End Sub
文字を選択状態にするとどこから余白扱いになっているのかわかりやすい
余白0にしたところ
真ん中は文字の左と0を選択した状態、これだと左右の余白0ってのがわかる
右側の全選択したものは右側が枠の外側になっている、これは改行文字の分が外側に出ていて、改行文字は文字範囲には含まれないってことかなあ
上下の余白も0なんだけど余白があるようにみえるのは、行間のぶんが余白に見えているのかも
テキストボックスの行間の設定
段落からできる
試しに全行選択して行間を1行から2行に変更してみる
たしかに2倍くらいに広がった、文字の下側より上側のほうが広がっているなあ
一番下を見ると余白を無視して枠の外側に出ているように見える
行間、固定値
行間を固定値にしたら間隔の数値が19.2ptと表示されて
この数値を変更できるようになった
19.2から40に変更
さっきの行指定とは少し違う感じ
行間を倍数指定
倍数指定したら初期値が3だったのでそのままOK押したら
大きく広がった、3行分て意味かなあ
それにしても上下均等じゃなくて文字の上側が大きく広がる
段落前後の間隔
段落前を24pt
段落後を24pt
これらの行間隔を
マクロの場合はどこを指定すればいいのか
テキストボックス全体に指定するなら
TextFrame2.TextRange.ParagraphFormatの中にある
行(段落)単位で指定するとき、1行(段落)目なら
TextFrame2.TextRange.Paragraphs.Item(1).ParagraphFormat
SpaceAfterが段落後
SpaceBeforeが段落前
SpaceWithinが行間と間隔
LineRuleAfter、LineRuleBefore、LineRuleWithinの3つは指定数値をポイント単位にするか行単位にするかの切り替え用でmsoTrueかmsoFalseどちらかの値を指定
例えばLineRuleAfter = msoTrueのときSpaceAfter = 1は
段落後に1行分のスペースって意味になる
LineRuleAfter = msoFalseのときSpaceAfter = 1は
段落後に1ポイント分のスペースって意味になる
Sub 選択したテキストボックスの行間を07行にするマクロ()
Dim s As Shape
Set s = Selection.ShapeRange.Item(1)
With s.TextFrame2.TextRange.ParagraphFormat
.LineRuleWithin = msoTrue
.SpaceWithin = 0.7
End With
End Sub
Sub 選択したテキストボックスの行間を15pointにするマクロ()
Dim s As Shape
Set s = Selection.ShapeRange.Item(1)
With s.TextFrame2.TextRange.ParagraphFormat
.LineRuleWithin = msoFalse
.SpaceWithin = 15
End With
End Sub
Sub 選択したテキストボックスの段落前空間を1行にするマクロ()
Dim s As Shape
Set s = Selection.ShapeRange.Item(1)
With s.TextFrame2.TextRange.ParagraphFormat
.LineRuleBefore = msoTrue
.SpaceBefore = 1
End With
End Sub
これは1行を指定しても表示はポイントに変換される
Sub 選択したテキストボックスの2行目の行間隔を50pointにするマクロ()
Dim s As Shape
Set s = Selection.ShapeRange.Item(1)
With s.TextFrame2.TextRange.Paragraphs.Item(2).ParagraphFormat
.LineRuleWithin = msoFalse
.SpaceWithin = 50
End With
End Sub
以上で設定方法はわかったので設定値を調整してできたのが
ほぼ同じだけど少しズレていて
テキストボックスの背景を透明にしてセルに重ねてみると
'マージン(余白)設定
With myTB.TextFrame2
.MarginBottom = 0
.MarginLeft = WorksheetFunction.RoundUp(myCells(1).Height / 10, 0)
.MarginRight = .MarginLeft ' 2
.MarginTop = 0
End With
'行間調整、セルの高さを再現
With myTB.TextFrame2.TextRange
For i = 1 To .Paragraphs.Count
With .Paragraphs(i).ParagraphFormat
.LineRuleWithin = msoFalse
.SpaceWithin = myCells.Rows(i).Height * 0.98
End With
Next
End With
セルの高さを基準に余白と行間隔を設定している
何か根拠があるわけじゃなくて調整しただけだからフォントやフォントサイズが違うともっとズレるかも
今回ので3,4,5,6ができるようになったけど…見やすいのは列幅調整だけの2番かなあ、次に列幅調整と行間隔調整した6番。調整しまくっている3、4番はみやすさで言ったらイマイチだねえ
余白が大事なのがわかったw
4番を作るマクロのエクセルファイル
セル範囲のテキストボックス化は気が済んだので、次はどんなふうにアドインに入れるかだなあ
関連記事、前回
選択セル範囲を図形のテキストボックスにするマクロその4、フォントの取り消し線、下付き上付き文字、下線 ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
http://blogs.yahoo.co.jp/gogowaten/14705381.html
http://blogs.yahoo.co.jp/gogowaten/14705381.html
これまで5回に渡って作ってきたマクロをアドインに登録した
午後ツールその55、選択セル範囲を図形のテキストボックスにする、印刷用の点線を消すマクロを追加 ( Windows ) - 午後わてんのブログ - Yahoo!ブログ
http://blogs.yahoo.co.jp/gogowaten/14715274.html
http://blogs.yahoo.co.jp/gogowaten/14715274.html