セルに楕円を描いたり消したりするマクロ

以前、セルを楕円で囲むマクロという記事を書きました。
これはセルを右クリックするとそのセルを囲むような楕円を描画するというマクロです。
今回、「もう一度、右クリックしたら、その楕円を削除するマクロは考えられないか」というコメントをいただきました。
そこで少し考えて作り直したのが次のコードです。

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True '既定の右クリックの操作を実行しない。
    flg = 0
    For Each myshape In ActiveSheet.Shapes
        If myshape.Top = Target.Top And myshape.Left = Target.Left Then
            myshape.Delete
            flg = 1
        End If
    Next
    If flg = 0 Then
        With ActiveSheet.Shapes.AddShape(msoShapeOval, _
            Target.Left, _
            Target.Top, _
            Target.Width, _
            Target.Height)
            .Fill.Visible = msoFalse
            .Line.Weight = 0.75
        End With
    End If
End Sub

楕円を描くときは、その場に描いて終わりですが、消すときは、どの楕円を消せばいいのか分かりません。
そこで、右クリックしたときに、ワークシート上にある図形をすべて検査し、図形の座標(左端と上端の位置)と右クリックしたセルの座標が同じ場合だけ、その図形すなわちセルに描かれた楕円を削除する、という方法を使っています。
そして「flg」という変数を用意し、削除をした場合には「1」をセットします。
「0」の場合は、削除の処理をしなかったことになりますので、楕円を描画します。

なお、コードの先頭に「Cancel = True」と書いています。こうすると通常の右クリックによるメニューが表示されません。

コメント

  1. みき より:

    こちらのコードを使用してやりたいことが劇的に向上しました!
    ただ、複数の指定範囲セルにしか適用できないようにしたいのですが
    追加でどのようにすればよいでしょうか?どうかご教授お願い致します。

    ダブルクリックでするやり方は色々見かけましたが右クリックで出来るのが凄くいいです!

  2. stabucky より:

    >みきさん
    ご利用ありがとうございます。
    「複数の指定範囲セルにしか適用」というのはセルが一つだけの場合は楕円を描画しないということですか。

  3. みき より:

    お返事ありがとうございます。
    すみません説明が不足でした。
    例えば以下の3つの範囲では右クリックで丸が出るようにして
    A1:B10
    D1:E10
    G1:H10

    それ以外の所では右クリックしても丸が出ないようにしたいという事です。
    現状では全範囲で右クリックで丸が出るので場所を制限したいのです。

    A2, B8,D5をそれぞれ右クリックしたら丸が出る
    C4を右クリックしても丸が出ない

    このような説明で分かりますでしょうか。
    宜しくお願い致します。

  4. stabucky より:

    >みきさん
    Cancel = True と flg = 0 の間に次のコードを挿入してください。
    If Intersect(Target, Range(“A1:B10”)) Is Nothing And Intersect(Target, Range(“D1:E10”)) Is Nothing And Intersect(Target, Range(“G1:H10”)) Is Nothing Then
    Exit Sub
    End If
    これで指定された三つの範囲以外では処理をしません。
    Rangeを書き換えれば範囲を変えられます。
    もっときれいな書き方があるかもしれませんが一応動きます。

  5. みき より:

    返信遅くなり申し訳ありません。
    希望通りに動作しました。
    本当にありがとうございます。
    今後もサイト運営頑張ってください。

  6. stabucky より:

    >みきさん
    確認ありがとうございます。
    意図通り動いたようでよかったです。

タイトルとURLをコピーしました