[[20090406165043]] 『セルコメントの大きさ、位置を統一したい。』(shut)  ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『セルコメントの大きさ、位置を統一したい。』(shut)
 セルの幅、列の挿入とかによってコメントが移動してしまって困ります。
 アクティブシートの全てのセルコメントを該当セル近辺に全て同じ大きさに表示し直すには
 どうすれば良いでしょうか?
 位置は各セルの近辺であれば、概略で良いです。
 大きさは、縦、横サイズを指定してどれも同じにしたい。


 現在の状態として
 コメントは全て表示されている状態なのですか?
 全て表示されていない状態なのですか?
 表示されているものと、されていないものが有るのですかね?

 >セルの幅、列の挿入とかによってコメントが移動してしまって困ります。
 初期状態は「セルに合わせて移動やサイズ変更をしない」に成っているので
 移動したり大きさが変わったりする事は無いと思いますが。。。

 今回の「位置」と言うのは
 コメントを表示する
 にした時に表示される位置の事ですよね?

 (HANA)

 HANAさんありがとうございます。(shut)
 コメントは全て表示されている状態です。
 セルに合わせて移動する。サイズ変更無し。にしたいです。(知りませんでした。)
 今回の位置とは、各セルの右下で、どのコメントも同じ感じの位置としたい。
 その後また調べ直しましたら、以下まで出来ました。
 あとは、★のところのみ希望通りではありません。
 Incrementとなっている通り、このコードを実行する度に右上にずれていきます。
 そうではなく、どのコメントも各セルの右下当たりにしたいのですが、わかります
 でしょうか?

 Sub コメント揃え()
    coc = 1
    Do While coc <= ActiveSheet.Comments.Count
         'セルに合わせて移動する。サイズ変更無し。
        ActiveSheet.Comments(coc).Shape.Placement = xlMove
        ActiveSheet.Comments(coc).Shape.Width = 30
        ActiveSheet.Comments(coc).Shape.Height = 15
        ActiveSheet.Comments(coc).Shape.IncrementLeft 20 '★
        ActiveSheet.Comments(coc).Shape.IncrementTop -10 '★
        coc = coc + 1
    Loop
 End Sub

 やっていることが適当ですが、こんなのを動かしてみるのはどうでしょう。

 '------
Sub コメント揃え2()
Dim sh As Object, adr As String
If TypeName(Selection) <> "Range" Then
    Range("A1").Select
End If
adr = Selection.Address
    On Error Resume Next
    For Each sh In Selection.SpecialCells(xlCellTypeComments)
        sh.Comment.Shape.Select True
            Selection.Placement = xlFreeFloating
            Selection.ShapeRange.Width = 30
            Selection.ShapeRange.Height = 15
            Selection.ShapeRange.Left = sh.Left + 60
            Selection.ShapeRange.Top = sh.Top + 15
    Next
Range(adr).Select
End Sub
 '------

 >'セルに合わせて移動する。サイズ変更無し。
 にすると、位置がまたずれると思いますが?
    xlFreeFloating は「移動・サイズ変更無し」です。
 また、既定値が変わっていると思うので
 設定し直しておくのが良いと思います。

 それから、サンプルコードとして抜けているだけかもしれませんが
 変数の宣言(型の指定)は、する習慣をつけておくのが良いと思います。

 (HANA)

HANAさんのコードでOKです。(shut)
 Selection.Placement = xlFreeFloating
 の部分は、
 Selection.Placement = xlMove
 が良いです。私の意味は、個別セルに対しての位置がずれるですからxlMoveでいいです。
 説明の仕方が悪いですね。済みません。
 >変数の宣言(型の指定)は、する習慣をつけておくのが良いと思います。
 承知しました。普段から曖昧です。やはり動かしている時に他の関係でエラーしたりします。
 どうも有り難う御座いました。

 実際にやってみて、それで良いのなら問題ないのかもしれませんが
 「xlMove」にした場合
            Selection.ShapeRange.Left = sh.Left + 60
            Selection.ShapeRange.Top = sh.Top + 15
 ここで設定した位置がずれる
(行の挿入などに依ってコメントのLeft,Top位置が セルのLeft+α,Top+βした位置からずれる)
 と言う事ですよ・・・?

 自分のセルが移動しても、常に +60 と +15 の位置に
 固定したいのではないのですか?

 「xlMove」にして、ずれても良いことにするのなら
 設定する必要も無さそうに思いますが。
 (こちらのエクセルと、挙動が違うのですかね。)

 A1セルにコメントを設定。
 コメントを表示させて、コメントをC4セル辺りに移動。
 「xlMove」にしていた場合
 2行目を挿入すると、コメントはC5セル辺りに移動します。
 「xlFreeFloating」にしていた場合は
 2行目を挿入しても、コメントの位置はC4セル辺りから動きません。

 どちらの設定でも、1行目を挿入した場合は
 コメントが有るセルは2行目に移動し
 それに伴って、コメントの表示位置も一行下になります。

 「セルに合わせて移動しない」は
 「コメントが設定されているセルの位置が移動した場合」 
 と言う事ではありませんが、その辺りは問題ないですかね。。。?

 しつこいようですが、どうも矛盾を感じるので。

 (HANA)

お手数かけます。(shut)
 やりたいのは、行列どう変化させても、画面上で見た時に、恒に
 A1セルのコメントは、右下1pくらいのところに固定であって欲
 しいと言う事です。

 確かにHANAさんがおかしいと思う事が分かりました。
 行に関してはやってませんでした。と言うのも私にとっては行方向は
 そんなにも変化しないもので。
 確かにおっしゃる通り行方向では、「xlFreeFloating」でないと対応
 出来ませんでした。

 列方向なのですが、セル幅変化だけを試していたのですが、列挿入は
 試してませんでした。
 ・セル幅変化に対しては、「xlMove」の方が希望ですが、
 ・セル挿入に対しては、「xlFreeFloating」が良いです。
 また、列で言うと、B2セルにコメントを入れた場合、B列上にその
 コメントを置いて「xlMove」指定が一番良さそうですが。
 色々幅変化、挿入していると、自動でB列から外れたりします。
 以上の状況から、セル幅変化を優先に「xlMove」とした方が良い
 だろうと思ってます。


 列幅の変更があるのですね。
 でしたら、xlMoveとしておくのがご希望に一番近そうですね。

 疑問が解けました。
 コメント、有り難う御座いました。

 (HANA)

説明が悪いやら、あれこれ散漫な希望で(shut)
申し訳御座いません。ありがとうございました。

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.