- ベストアンサー
Excel VBA 範囲内での○囲み
範囲内(例えばC9:H9,C10:H10,D11:H11・・・・・)にある数値(セル)を選ぶとセル内の数値を○で囲むようにしたいのですが(前出のコードを参考に○を表示は出来るようになりました)、でも....範囲内で他のセルを選択(ダブルクリックで選択)した場合、前の○を消すことが出来ません。範囲内で新たに○囲みをすると、以前の○を自動的に消すことは可能でしょうか? まだまだVBAに関しては初心者なものでまったく思いつきません。 まさしく丸投げになりますが、教えていただけないでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>初心者なもので よくこんな問題考えましたね。難しいと思うよ。 他の回答者が、もっと良いプログラムを載せてくれると良いが。 エクセルのシートのイベント・プロシージュアーでは、仕掛けが不足と思う。 ダブルクリックを採用すると、イベントがBeforeしかなく、丸の付くセルが一ステップ前のセルにづれる。また、そのセルがデータ入力状態になってしまうで不適で、Selection_Changeを使った。 2セル以上範囲指定すると2セルにまたがった円を書くやDELでどうなるかなど問題が出そう。 E1セルを1にすると、まる付けモードに入る。そうしないと常に このモードだと使えないから。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Cells(1, "E") <> 1 Then Exit Sub l = Target.Left t = Target.Top w = Target.Width h = Target.RowHeight ActiveSheet.Shapes.AddShape(msoShapeOval, l, t, w, h).Select Selection.ShapeRange.Fill.Visible = msoFalse 'Selection.ShapeRange.Fill.Solid Selection.ShapeRange.Fill.Transparency = 0# For Each ov In ActiveSheet.Ovals If ov.Top = t And ov.Left <> l Then ov.Delete End If Next End Sub これを改良できるかな。 C9:H9などの範囲指定はやってません。 #1さんの Set rng = Range("C9:H9,C10:H10,D11:H11") If Intersect(Target, rng) Is Nothing Then Exit Sub などを入れてください。
その他の回答 (1)
- merlionXX
- ベストアンサー率48% (1930/4007)
こんな感じでしょうか? クリックの場合はどんどん○がついていきます。 ダブルクリックの場合は他の○は消えます。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Set rng = Range("C9:H9,C10:H10,D11:H11") If Intersect(Target, rng) Is Nothing Then Exit Sub rng.ClearContents Target.Value = "○" End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) Set rng = Range("C9:H9,C10:H10,D11:H11") If Intersect(Target, rng) Is Nothing Then Exit Sub Target.Value = "○" End Sub
補足
早速の回答ありがとうございます。 すみません、質問の仕方がまずかったです! 実は、丸はオートシェイプでセル内を囲むようになっております。 また、選択範囲は5択になっており、選択範囲内の新たなセルをダブルクリックすると排他的な処理で範囲内に残っている○囲みを消せればと考えております。(手動で一つずつ消すのではなく、新たなセルを○で囲めば、範囲内の古い○囲みが自動的に消えるような処理をしたい。)
お礼
おはようございます! 昨夜は遅くまでありがとうございました。 やはり相当難しいのですねぇ。。。。 書いていただいたコードを参考にさせていただき出来るだけ頑張ってみます。 ありがとうございました。