前回の
複数行のセルの値をまとめて1つのテキストボックスにするマクロ ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
http://blogs.yahoo.co.jp/gogowaten/14674215.html
http://blogs.yahoo.co.jp/gogowaten/14674215.html
つづき
選択セル範囲の左の1列をまとめて1つのテキストボックスにする
行ごとのフォントとフォントサイズと
文字ごとの色に対応した
前回と違うのは- 行ごとのフォントとフォントサイズに対応
- 文字ごとの色に対応
- 背景色は左上のセルと同じにするようにした、塗りつぶしなしやグラデーションの場合は白背景になる
- テキストボックスのサイズとプロパティのオブジェクトの位置関係はセルに合わせて移動もサイズ変更もしないに変更した
今回のマクロ
AddTextBoxFromCellsValue3を実行するとテキストボックスを作成する
'背景色設定、左上のセルの色が単色ならその色にする
If tlCell.Interior.ColorIndex <> xlColorIndexAutomatic And _
tlCell.Interior.ColorIndex <> xlColorIndexNone Then
.Fill.ForeColor.Rgb = tlCell.Interior.Color
End If
テキストボックスの背景色にする色は左上のセルの塗りつぶしの色に合わせる
このとき塗りつぶしの色が単色ならそのままでいいから
テキストボックス.Fill.ForeColor.Rgb = セル.Interior.Color
これでOK
塗りつぶしなしやグラデーションだった場合は白にしたい
この判定はセル.Interior.ColorIndexの値を見て判定した
塗りつぶしなしのときは
xlColorIndexAutomatic
グラデーションのときは
xlColorIndexNone
なのでどちらかだったときは背景色無指定(白背景)
テキストボックスの中の文字列は1行ごとにParagraphっていうプロパティ?になっている、型はTextRange2
この場合だとParagraphが4つ
取得はDim ps as TextRange2
Set ps = Shape.TextFrame2.TextRange.Paragraphs
これで4行全部取得できて
この中の1行目取得なら
Dim p as TextRange2
Set p = ps(1)
Paragraphのフォントカラーの指定
1行目全部を白にするなら
p.Font.Fill.ForeColor.RGB = RGB(255, 255, 255)
3文字目だけを白にするならCharactersを使って
p.Characters(3, 1).Font.Fill.ForeColor.RGB = RGB(255, 255, 255)
今回は使わないけど
2文字目から4文字分(2~5文字目)を白にするなら
p.Characters(2, 4).Font.Fill.ForeColor.RGB = RGB(255, 255, 255)
セルの文字色取得
全部同じ色なのか2色以上あるのかの判定
2色以上あるときはRange.Font.Colorの値がNullになっているので
If IsNull(Range.Font.Color) Then
こんな感じでIsNullを使って判定できる
全部同じ色なら
p.Font.Fill.ForeColor.RGB = Range.Font.Color
これでOK
2色以上のときは1文字ごとに色を取得、設定するので
これもCharactersを使って
2文字目の色指定なら
p.Characters(2, 1).Font.Fill.ForeColor.Rgb _
= Range.Characters(2, 1).Font.Color
ヤフーブログに直接載せられるアニメーションGIFは横幅560ピクセル以下なのかも、712x632のものを載せようとしたら以下のメッセージ
もしかして縮小表示ができないだけかも、ってことで縮小表示にならないように右側を削って幅560ピクセルにしたらうまく載せられた
次回(関連記事)
図形のテキストボックスのタブ文字、タブ位置とかのメモ、選択セル範囲を1つのテキストボックスにするマクロ ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
http://blogs.yahoo.co.jp/gogowaten/14686706.html
http://blogs.yahoo.co.jp/gogowaten/14686706.html