こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルでセルをクリックするだけで○印を・・・

既出でしたらお許しください。検索してみましたが該当する質問・回答を探せませんでした。

エクセルシート内のセルをクリックするだけでそのセルをオートシェイプで作るような○(楕円可)で囲むVBAについてヒントをください。
これが無理なら、セルの書式を変更して罫線で四角く囲む方法でもOKです。
ちなみに該当するセルにはデータが入っています。いくつかの候補の中から該当するデータを○で囲みたいのです。

以上,ご教示ください。

投稿日時 - 2006-02-25 11:53:27

QNo.1990297

暇なときに回答ください

質問者が選んだベストアンサー

楕円で囲む方法は

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

投稿日時 - 2006-02-25 12:53:36

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(8)

ANo.8

ちょっと気になったので、、、
Worksheet_SelectionChange で処理をするなら、既に同様のシェイプがあるか調べて作成する処理を入れないと、矢印キーでアクティブセルを移動させただけで、同じセル上にシェイプが何個も作られてしまいます。
それによりファイルサイズの異常な増大を招く事になりかねませんので、注意が必要かと。

投稿日時 - 2006-02-25 16:52:15

ANo.7

「囲み文字メーカー」
というアドインを使ってみてはいかがでしょうか
http://www2.moug.net/cgi-bin/softwaredl.cgi?excel+SI2004010501
○以外にも、色々な囲み文字が作れます

mougの会員登録をしないとダウンロードできませんが、
mougには、さまざまなフリーソフトがありますから
会員登録しても損はありませんよ

mougとは・・・
http://www.moug.net/main/wht_mg.htm

参考URL:http://www2.moug.net/cgi-bin/softwaredl.cgi?excel+SI2004010501

投稿日時 - 2006-02-25 14:41:10

ANo.6

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

投稿日時 - 2006-02-25 14:38:05

ANo.5

#4です、少し訂正

sh.OnAction = "Test" → sh.OnAction = "MeDEL"

投稿日時 - 2006-02-25 13:27:42

ANo.4

三択のようにどれか一つだけ選ぶなら、オプションボタンを使った方が簡単だと思いますが、、、、
下記は、セルのダブルクリックで楕円シェイプを作り、その楕円シェイプをクリックすると削除するサンプルです。

'こちらはシートモジュールにコピペ
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

投稿日時 - 2006-02-25 13:20:22

こんにちは。

>セルをクリックする
というイベントはありません。一番近いのは、SelectionChangeイベントですが、これは選択範囲を変更したときに発生するイベントです。

クリック以外(Enter・矢印キー等)で変更したときにも発生しますし、現在アクティブなセルをクリックしたときは発生しません。

使用を見直して、ダブルクリックや右クリックのイベントを使う方がいいでしょう。

>セルをオートシェイプで作るような○(楕円可)で囲む
これはその操作を「マクロの記録」で記録すればコードが得られます。

どうでしょうか。

投稿日時 - 2006-02-25 12:55:17

ANo.1

ダブル罫線で囲むには...

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

投稿日時 - 2006-02-25 12:33:37

あなたにオススメの質問