Excel2000です。
ワークシート、 Sheets("Comment")上のデータにもとづき、自動でセルにコメントを挿入するマクロを書きました。
以下で、正常に作動します。
問題は、TextFrameの自動サイズ調整の部分です。
このままだと、文字列の長さに応じて横にだけ長くなってしまうのです。
かといって、文字列の長さはバラバラなのでサイズを固定するわけにもいきません。
コメントの横幅は一定で、縦の長さだけ文字数に応じて自動で変わるような設定はできないものでしょうか?
Sheets("Comment")上のデータをAlt+Enterでセル内改行させることにより対応はできますが、もっといい方法がないか質問させていただきました。
Lenで文字数を調べ、これに応じて対応させるのは、全角半角が入り混じったデータなので無理そうです。
宜しくお願い申し上げます。
Sub Comment挿入()
Dim sa As String, ad As String, tx As String
With Sheets("Comment")
For i = 2 To 42
sn = .Cells(i, "A").Value 'シート名
ad = .Cells(i, "B").Value 'セルアドレス
tx = .Cells(i, "C").Value 'テキスト
With Sheets(sn).Range(ad)
.AddComment
With .Comment
.Visible = False
.Text Text:=tx
.Shape.Shadow.Visible = msoFalse '影無し
.Shape.Fill.ForeColor.SchemeColor = 42 '背景を水色
.Shape.Line.ForeColor.SchemeColor = 10 '枠線を赤
.Shape.TextFrame.Characters.Font.Name = "MS UI Gothic" 'フォント指定
.Shape.TextFrame.Characters.Font.ColorIndex = 3 'フォント色を赤
.Shape.TextFrame.AutoSize = True '自動サイズ調整
End With
End With
Next i
End With
End Sub
No.2ベストアンサー
- 回答日時:
私も思いつきで。
(アイデアのみですが)セルにコメント用テキストが入力してあるなら、
セル幅を固定したいコメント幅にしておいて、セルの行高自動調整を使ってみてはどうでしょう。
セルの設定を.WrapText = True にして
.Rows.AutoFitメソッドを使って自動設定される .Height にコメントの .Height を合わせるわけです。
(Font種別やサイズなどを合わせる必要がありますし、セルのHeightの最大値が409.5なので文字数が多い場合は困りますけど)
必要ならセル側の設定を戻す処理を行ったり、作業用のダミーシートを使ったりすると良いかもしれません。
この回答への補足
すみません、お礼でサイズが小さいと書きましたが、わたしのコードの誤りでした。
修正したらうまくいきました。
大変失礼いたしました。
ありがとうございます。
ありがとうございます。これはGood Ideaだと思い試してみました。
セル内で折り返して表示させ、行高を自動設定させて
hg = .Cells(i, "C").Height 'セル高
wd = .Cells(i, "C").Width 'セル幅 として取得した数値でコメントのサイズを設定させました。
残念ながら、エクセルのワークシートのセル内文字の見かけ上の配置と実際にプリントしたときの配置が違うせいなのか、サイズが不足してしまいます。
No.3
- 回答日時:
Sub Comment挿入()
Dim sa, sn, ad, tx As String
Dim 開始位置, 壱行文字数, 文字数 As Integer
Dim 作業文字列 As String
壱行文字数 = 15 'ここで1行の文字数を設定
With Sheets("Comment")
For i = 2 To 42
sn = .Cells(i, "A").Value 'シート名
ad = .Cells(i, "B").Value 'セルアドレス
tx = .Cells(i, "C").Value 'テキスト
作業文字列 = StrConv(tx, vbWide)
文字数 = Len(作業文字列)
For 開始位置 = 1 To 文字数 Step 壱行文字数
If 開始位置 = 1 Then
tx = Mid(作業文字列, 開始位置, 壱行文字数)
Else
tx = tx & vbLf & Mid(作業文字列, 開始位置, 壱行文字数)
End If
Next 開始位置
With Sheets(sn).Range(ad)
.AddComment
With .Comment
.Visible = False
.Text Text:=tx
.Shape.Shadow.Visible = msoFalse '影無し
.Shape.Fill.ForeColor.SchemeColor = 42 '背景を水色
.Shape.Line.ForeColor.SchemeColor = 10 '枠線を赤
.Shape.TextFrame.Characters.Font.Name = "MS ゴシック" '等倍フォントへ変更
.Shape.TextFrame.Characters.Font.ColorIndex = 3 'フォント色を赤
.Shape.TextFrame.AutoSize = True '自動サイズ調整
End With
End With
Next i
End With
End Sub
横幅を合わせるには
文字をすべて半角か全角に統一し、尚且つ等倍フォントを使用しなければ無理だと思います
文字数によっては半角のずれが生じるため
ありがとうございます。
これもうまくいきました。ただ、出来ることならコメントの全角半角混在の設定は変えたくないのです。
でもとても勉強になりました。
No.1
- 回答日時:
思い付きのアイデアレベルなので、きちんとテストはしていませんが…
『一度autoで作成してから、同じ面積になるようにwidth固定で幅、高さを再設定する』というのではいかがでしょうか?
(実際には、繰上げ計算しているので、安全側の大きめになるはずです)
簡単な試行をして見た限りでは、まぁ、許容範囲かと…
<widthを100に固定した場合の例>
.Shape.TextFrame.AutoSize = True '自動サイズ調整
の後に以下の2行を追加。
.Shape.Height = Fix(.Shape.Width / 100 + 1) * .Shape.Height
.Shape.Width = 100
元の文章には改行がないと仮定していますが、文章が長くなってくると↑の安全側の評価が累積して余白が大きくなってきますね。
(単純にHeightの倍数を取るとmarginの分を余分に拡大しているかも)
例えば、少し改善するにはHeightの設定を
.Shape.Height = Fix(.Shape.Width / 100 + 1) * (.Shape.Height - .Shape.TextFrame.MarginTop) + .Shape.TextFrame.MarginTop
としてやるとか…
(MarginBottomも同様に扱うと、今度は行数が少ない時に高さ不足して、文字が入りきらなくなってしまうみたい)
幅と高さの計算式は、まだ改善の余地がありそうですが、とりあえずは、ひとつのアイデアの提供ということで…
ありがとうございます。
等幅フォントに変更し
.Shape.Height = Fix(.Shape.Width / 100 + 1) * .Shape.Height
.Shape.Width = 100
でうまくいきました。たしかに文章が長くなってくると余白が大きくなってきますが実用上問題はないです。
助かりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
Excel コメントの線が伸びたとき
Excel(エクセル)
-
エクセルで複数のコメントのサイズ(形)を一括で変える方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル: セルの枠を超えて表示
-
Excel countif関数で取り消し線...
-
Excelでcsvやtxtで保存する時に...
-
エクセルで1つのセルにスクロ...
-
エクセルでセルを上下に結合し...
-
エクセルの入力規則プルダウン...
-
エクセルファイルに _x000D_ と...
-
セル内の一部の文字だけをハイ...
-
エクセル2013で英単語を折り返...
-
エクセルの白黒の反転で困って...
-
セルを結合しても、文字をセル...
-
エクセルのセル外改行は可能で...
-
セルは大きくさせず、中の文字...
-
VBA:結合されたセルに対する「...
-
Excel入力で勝手にエンター押さ...
-
エクセルで半角漢字
-
セルの大きさを個別に変更したい。
-
マウスポインターが白十字のまま
-
エクセルで画像を透過させて画...
-
CSVファイルでテキストの改行の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル: セルの枠を超えて表示
-
Excel countif関数で取り消し線...
-
エクセルファイルに _x000D_ と...
-
Excelでcsvやtxtで保存する時に...
-
セル内の一部の文字だけをハイ...
-
エクセルで1つのセルにスクロ...
-
エクセルの白黒の反転で困って...
-
セルは大きくさせず、中の文字...
-
エクセルの入力規則プルダウン...
-
エクセルでセルを上下に結合し...
-
エクセル2013で英単語を折り返...
-
マウスポインターが白十字のまま
-
Excel入力で勝手にエンター押さ...
-
セルを結合しても、文字をセル...
-
エクセルのセル外改行は可能で...
-
エクセルで画像を透過させて画...
-
エクセル 折り返して全体を表...
-
エクセルで右隣のセルより優先...
-
VBA:結合されたセルに対する「...
-
全セルの末尾に改行(Alt+Enter...
おすすめ情報