- ベストアンサー
エクセルでセルをクリックするだけで○印を・・・
既出でしたらお許しください。検索してみましたが該当する質問・回答を探せませんでした。 エクセルシート内のセルをクリックするだけでそのセルをオートシェイプで作るような○(楕円可)で囲むVBAについてヒントをください。 これが無理なら、セルの書式を変更して罫線で四角く囲む方法でもOKです。 ちなみに該当するセルにはデータが入っています。いくつかの候補の中から該当するデータを○で囲みたいのです。 以上,ご教示ください。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
楕円で囲む方法は Private Sub Worksheet_SelectionChange(ByVal Target As Range) x = Target.Column y = Target.Row x1 = Range(Cells(1, 1), Cells(y, x)).Width y1 = Range(Cells(1, 1), Cells(y, x)).Height wid = x1 / x hei = y1 / y x2 = x1 - wid y2 = y1 - hei With ActiveSheet.Shapes.AddShape(msoShapeOval, x2, y2, wid, hei) .Fill.Visible = msoFalse .Fill.Solid .Fill.Transparency = 1# .Line.Weight = 0.75 .Line.DashStyle = msoLineSolid .Line.Style = msoLineSingle .Line.Transparency = 0# .Line.Visible = msoTrue .Line.ForeColor.SchemeColor = 64 .Line.BackColor.RGB = RGB(255, 255, 255) End With Target.Select End Sub
その他の回答 (7)
- papayuka
- ベストアンサー率45% (1388/3066)
ちょっと気になったので、、、 Worksheet_SelectionChange で処理をするなら、既に同様のシェイプがあるか調べて作成する処理を入れないと、矢印キーでアクティブセルを移動させただけで、同じセル上にシェイプが何個も作られてしまいます。 それによりファイルサイズの異常な増大を招く事になりかねませんので、注意が必要かと。
「囲み文字メーカー」 というアドインを使ってみてはいかがでしょうか http://www2.moug.net/cgi-bin/softwaredl.cgi?excel+SI2004010501 ○以外にも、色々な囲み文字が作れます mougの会員登録をしないとダウンロードできませんが、 mougには、さまざまなフリーソフトがありますから 会員登録しても損はありませんよ mougとは・・・ http://www.moug.net/main/wht_mg.htm
- imogasi
- ベストアンサー率27% (4737/17069)
Private Sub Worksheet_SelectionChange(ByVal Target As Range) l = ActiveCell.Left t = ActiveCell.Top h = ActiveCell.Height w = ActiveCell.Width ActiveSheet.Shapes.AddShape(msoShapeOval, l, t, w, h).Select Selection.ShapeRange.Fill.Visible = ms 'Selection.ShapeRange.Fill.Solid Selection.ShapeRange.Fill.Transparency = 0# ActiveCell.Select End Sub
- papayuka
- ベストアンサー率45% (1388/3066)
#4です、少し訂正 sh.OnAction = "Test" → sh.OnAction = "MeDEL"
- papayuka
- ベストアンサー率45% (1388/3066)
三択のようにどれか一つだけ選ぶなら、オプションボタンを使った方が簡単だと思いますが、、、、 下記は、セルのダブルクリックで楕円シェイプを作り、その楕円シェイプをクリックすると削除するサンプルです。 'こちらはシートモジュールにコピペ Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim sh As Shape Cancel = True With Target Set sh = Me.Shapes.AddShape(msoShapeOval, .Left, .Top, .Width, .Height) sh.Fill.Visible = msoFalse sh.OnAction = "Test" End With End Sub 'こちらは標準モジュールにコピペ Sub MeDEL() On Error Resume Next ActiveSheet.Shapes(Application.Caller).Delete End Sub
こんにちは。 >セルをクリックする というイベントはありません。一番近いのは、SelectionChangeイベントですが、これは選択範囲を変更したときに発生するイベントです。 クリック以外(Enter・矢印キー等)で変更したときにも発生しますし、現在アクティブなセルをクリックしたときは発生しません。 使用を見直して、ダブルクリックや右クリックのイベントを使う方がいいでしょう。 >セルをオートシェイプで作るような○(楕円可)で囲む これはその操作を「マクロの記録」で記録すればコードが得られます。 どうでしょうか。
ダブル罫線で囲むには... Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Len(Target.Value & "") > 0 Then Target.Borders.LineStyle = IIf(Target.Borders.LineStyle = xlDouble, xlNone, xlDouble) End If End Sub