
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 6 2022/06/08 12:55
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル: セルの枠を超えて表示
-
Excel入力で勝手にエンター押さ...
-
エクセルでセルを上下に結合し...
-
Excel countif関数で取り消し線...
-
セルは大きくさせず、中の文字...
-
セル内の一部の文字だけをハイ...
-
CSVファイルでテキストの改行の...
-
結合していないセルから結合し...
-
エクセル2013で英単語を折り返...
-
Excelにおける行の高さの限界値
-
エクセルで文字を打つと下に、...
-
エクセルで特定の列のセルだけ...
-
マウスポインターが白十字のまま
-
エクセルで画像を透過させて画...
-
全セルの末尾に改行(Alt+Enter...
-
エクセルにおいてセル内の文字...
-
エクセルで右隣のセルより優先...
-
エクセルのコメントで自動サイ...
-
表1つのセルに2つの項目を入力...
-
マウスを使わずにセルにカーソ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル: セルの枠を超えて表示
-
Excel countif関数で取り消し線...
-
セル内の一部の文字だけをハイ...
-
セルは大きくさせず、中の文字...
-
エクセルでセルを上下に結合し...
-
マウスポインターが白十字のまま
-
エクセルで1つのセルにスクロ...
-
エクセルファイルに _x000D_ と...
-
エクセル2013で英単語を折り返...
-
Excelでcsvやtxtで保存する時に...
-
エクセルの白黒の反転で困って...
-
セルを結合しても、文字をセル...
-
Excel入力で勝手にエンター押さ...
-
CSVファイルでテキストの改行の...
-
エクセルの入力規則プルダウン...
-
エクセルで画像を透過させて画...
-
全セルの末尾に改行(Alt+Enter...
-
セルを結合して中央揃えを行う...
-
マウスを使わずにセルにカーソ...
-
エクセルのセル外改行は可能で...
おすすめ情報