[[20160428082605]] 『自動でコメントを表示させたい』(れいれい) ページの最後に飛ぶ

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

 

『自動でコメントを表示させたい』(れいれい)

おせわになります。

 複数シートがあるブックで
 AAAAシートだけ、E10:H100の範囲で
 セルにカーソルを置いたらその列の
 C列に入っている文字列を表示させたいのですが
 可能でしょうか?
 (D10にの場合C10 H85の場合C85の文字列)
 よろしくお願いします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 用語を整理願います。

 >>E10:H100の範囲でセルにカーソルを置いたら

 たとえば F20 にカーソルを置きました。

 >>その列のC列

 F20 ですから 【その列】は F列。その C列って??
 【その行】の間違いですか? つまり F20 にカーソルをおいたら C20 ですか?

 >>(D10にの場合C10 H85の場合C85の文字列)

 D10 って範囲外ではないのですか?

(β) 2016/04/28(木) 09:00


 念のため確認。

 カーソルというのはセルカーソルではなくマウスカーソルでいいのか?
 (コメントと書いているのでそうだと思うが)

(ねむねむ) 2016/04/28(木) 09:05


 >その列の
その行の、の間違い

 >D10の場合
Dは範囲外では?

'ThisWorkbookモジュール
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

    If Sh.Name <> "AAAA" Then Exit Sub
    If Target.Cells.Count <> 1 Then Exit Sub
    If Intersect(Target, Target.Worksheet.Range("E10:H100")) Is Nothing Then Exit Sub
    Dim Msg As String
    Msg = Target.EntireRow.Range("C1").Value
    MsgBox Msg
End Sub

(とおりすがり) 2016/04/28(木) 09:11


 とおりすがりさんとは、ちょっと別のアプローチで。

 AAAA シートのシートタブを右クリック。コードの表示を選んででてくるところに以下を貼り付け。
 右上のXボタンでシートに戻ってください。

 最初に1回だけ、C10からC列データの最後のセルまでを選んで Ctrl/c。そのまま Ctrl/v。

 あとは、カーソルを置けばコメントが表示されます。

 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim r As Range
    Dim c As Range
    Dim a As Range

    Set r = Intersect(Target, Range("C10:C" & Rows.Count))
    If r Is Nothing Then Exit Sub

    For Each c In r
        For Each a In c.EntireRow.Range("E1:H1")
            a.ClearComments
            If Not IsEmpty(c) Then
                a.AddComment
                a.Comment.Text c.Value
            End If
        Next
    Next

 End Sub

(β) 2016/04/28(木) 09:42


みなさま お騒がせして申し訳ありません。
 素人すぎて、列と行の区別がついておりませんでした。
 βさんがおっしゃる通り、【その行】の間違いです。
 F20にカーソル(マウス)を置いたらC20の文字列が
 表示されるようにしたいのです。
 ねむねむさんがおっしゃる通り、マウスカーソルです。
 とおりすがりさん。ありがとうございます。
 教えて頂いた内容で表示できました。
 でも、贅沢ですが、もしマウスを置いた時だけ表示される
 「コメント」のような表示はできないでしょうか?
 (表示を消すのにクリックが必要ないようなもの)
 βさん、教えて頂いたもの試してみます。
 少々お待ちを。
(れいれい) 2016/04/28(木) 10:01

 βさんと同じ方向で。

 ワークシートモジュールに
 Private Sub Workbook_Open()
    Dim WK_RANGE    As Range

    With Worksheets("AAAA")
        .Range("E10:H100").ClearComments
        For Each WK_RANGE In .Range("E10:H100")
            WK_RANGE.AddComment
            WK_RANGE.Comment.Text Text:=.Cells(WK_RANGE.Row, "C").Text

        Next
    End With
 End Sub

 AAAAのシートモジュールに
 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim WK_RANGE    As Range
    Dim COLUMN_CNT  As Integer
    If Intersect(Target, Range("C10:C100")) Is Nothing Then Exit Sub

    For Each WK_RANGE In Intersect(Target, Range("C10:C100"))
        For COLUMN_CNT = 5 To 8
            Cells(WK_RANGE.Row, COLUMN_CNT).ClearComments
            Cells(WK_RANGE.Row, COLUMN_CNT).AddComment
            Cells(WK_RANGE.Row, COLUMN_CNT).Comment.Text Text:=WK_RANGE.Text
        Next
    Next
 End Sub

 ブックを開く際にその時のAAAAシートの内容でコメントを設定、ワークシートモジュールのシートチェンジイベントで
 C列が変更された際にそれに合わせてコメントを変更。

 専門家ではないのであちこちに無駄や気づいていない不具合があるかもしれないが。

(ねむねむ) 2016/04/28(木) 10:14


 βさん、
 >a.Comment.Text c.Value
 だとC列の値が数値の場合にエラーになる。

 >a.Comment.Text c.Text
 にしたほうがいいと思うが。

 追記
 .Value
 だと表示形式が設定されている場合にそれが反映されないというのもあるな。
(ねむねむ) 2016/04/28(木) 10:20

 To ねむねむさん

 あぁ、そうですね!
 ご指摘深謝で〜す。

(β) 2016/04/28(木) 11:16


ねむねむさん
 素人質問ですいません。
 ワークシートモジュールというのは
 「標準モジュール」のことですか?
 「ThisWorkbook」でしょうか?

(れいれい) 2016/04/28(木) 12:23


ねむねむさん
 ThisWorkbookでできました!
 お手数をおかけしました。

 ありがとうございました。
(れいれい) 2016/04/28(木) 12:53

 ちょっと考え漏れていたことがあったので。

 C10:C100までが全て手入力する場合であれば問題はないが式が入力されていて別のセルを編集するとC10:C100が変化する場合は
 私のでもβさんのVBAでも対応できない。
 (私のほうはブックオープン時は大丈夫だがAAAシートが変更された場合には対応できない)

 そのような場合はC10:C100の式がどこを参照しているかという情報が必要になる。
(ねむねむ) 2016/04/28(木) 13:08

コメント返信:

[ 一覧(最新更新順) ]


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