プロが教えるわが家の防犯対策術!

昨日質問させて頂いたのですが、会社のパソコンではネットは使えない為、マクロ以外の方法でと質問させて頂きましたが、こちらのサイトにはアクセス制限がかかっておらずコピーペースト可能でしたので再度質問させて頂きます。

ちなみにマクロは今回初めて使う為、完全初心者です。
マクロ入門サイトをいくつか読んでみましたが、よくわかりませんでした…

本題ですが、例えばエクセルのシートに

1.いちご
2.りんご
3.みかん

という選択肢があり、2番のりんごを選択したいとします。

『2』という数字の書かれたセルをダブルクリックすると、『2』という数字が○で囲まれるようにする事は出来ないものでしょうか?

会社で使うファイルなのですが、そのファイルにはこういった選択肢がいくつもあるので、シート上のどのセルをクリックしても、クリックした箇所が○で囲まれるようになればと思います。

コピーする為の式が貼り付けられているのを見かけますが、ああいった式を貼り付けた場合、囲む○の大きさや形状はどの段階で指定するのでしょうか?
(ちなみに今回使用したい○のサイズや形状は、どこのセルをクリックしても同じもので構いませんが、行からはみ出ない大きさの○に設定したいです)

一応私が調べたサイトでは、Altキーを押しながら[F11]キーを押す⇒標準モジュールの右側に式を貼り付けると書いてありましたが、その後どのようにその画面を終了するのか、またその後どのように実行するのかが書かれてありませんでした

会社のパソコンはEXCEL2013です。

マクロのコードを貼り付けて、実際に使ってみるまでの流れも教えて頂けませんでしょうか?
素人でもわかりやすいサイトがあればそちらでも構いません。

どうかよろしくお願い致します。

教えて!goo グレード

A 回答 (2件)

このような要求は昔からよくありました。

結構大変です。

それは、セルに入力された文字がどのようになっているか分からないからです。何もないシートに図形を挿入しようとすると、例えば、

  1.単一セルなのか結合セルなのか
  2.フォントの種類やフォントサイズは
  3.行高とセル内での上・中・下の位置は
  4.左・中・右揃えは
  5.どこに「○」を付ける
  6.セル内の文字は数値?文字列?
  7.表示した「○」を消したいことは?

くらいがはっきりすると制約付きでモジュールを作れます。



この質問の場合はほとんど未定の場合なわけで、次のようにします。

ア.実際に使用するシートに「○」を書いてください。

イ.解答したモジュールをそのシートのコードウィンドウに貼り付けて下さい。
(ALT-F11でVBE画面に移動し、メニューから、表示>プロジェクトエクスプローラーを選択し、Sheet1に「〇」があるならプロジェクトエクスプローラーのSheet1(Sheet1)をダブルクリックして表示された右の広い画面に貼り付けます。(Wordやメモ帳などと同じ感覚です))

これで終了です。当然ですが、ダブルクリックするたびに図形が現れたり消えたりします。「○」は図形のマルです。(別の形でも構いません)表示された図形を動かせないようにシートに保護をかけるべきかもしれません。このあたりは検討してください。

シートに帰ります。

この後、「〇」がうまく配置できたか検証します。「ア」で重要な点は、「○」の左上を該当セル内に納めることです。

うまく「○」が置けていれば、そのセルをダブルクリックすれば「○」は消えます。消えなければ位置を修正してください。必要な箇所に「○」を配置して、テストでダブルクリックして表示を全部消してしまいます。全部消えればテストと初期化が終了です。

最初に「○」を貼り付けてもらうことで、モジュール側で行うことが劇的に減少します。このようなシートを使うことの現実味も出てきます。

しかし、実務ではあまり使いません。この後、(アンケートのように)「○」を集計したいなどの追加要求が出てきたりします。「○」を付けて印刷したりしてその場限りで使うにはいいかもしれません。試してみてください。


Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Dim shp As Shape 'オートシェイプ
  For Each shp In Shapes
    With shp
      If Not (Application.Intersect( _
        Range(.TopLeftCell.Address), Target) Is Nothing) Then
        .Line.Visible = Not (.Line.Visible)
      End If
    End With
  Next
  Cancel = True
End Sub
「セルをクリック⇒そのセルに入力された文字」の回答画像2
    • good
    • 13
この回答へのお礼

ご丁寧にありがとうございます。

挿入して下さっていた一番下の画像にあるような感じで○を付けるのが理想だったのですが、単一セルか結合セルかによっても変わってくるのですね。素人の私には難しすぎました…(笑)

まずは他の方法で代用し、自分なりにマクロについて勉強してみた上で、教えて頂いたものをやってみようと思います。

お礼日時:2014/06/25 04:45

こんばんは!


なかなか回答がつかないようなので・・・

>『2』という数字の書かれたセルをダブルクリックすると、
>『2』という数字が○で囲まれるようにする事は出来ないものでしょうか?

単純にセルを塗りつぶすだけの方が簡単なのですが、
ご要望が「丸囲い文字」というコトですね。

ExcelではWordのような囲い文字の設定はないようですし、
丸囲い数字は環境依存文字になってしまいますので、
オートシェイプの丸をセル上に表示させる方法はどうでしょうか?
尚、セル内の数字の位置がバラバラだとずれてしまいますので、数字そのものも中央揃えにしています。
セルをダブルクリックすると、数値が入っているセルに関してだけ「丸囲い文字」もどきにしています。
(文字列セルは何も反応しません)
そして、すでに丸のオートシェイプがあるセルをダブルクリックすると
その丸は消えるようにしてみました。

画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り、好みのセルをダブルクリックしてみてください。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'この行から
Dim c As Range, myShp As Shape, myFlg As Boolean
Set c = Target
If IsNumeric(c) And c <> "" Then
Cancel = True
c.HorizontalAlignment = xlCenter
For Each myShp In ActiveSheet.Shapes
If myShp.Top >= c.Top And myShp.Top + myShp.Height <= c.Top + c.Height And _
myShp.Left >= c.Left And myShp.Left + myShp.Width <= c.Left + c.Width Then
myFlg = True
Exit For
ElseIf myShp.Left > c.Left + c.Width And myShp.Top > c.Top + c.Height Then Exit For
End If
Next myShp
If myFlg = True Then
myShp.Delete
Else
With ActiveSheet.Shapes.AddShape(msoShapeOval, c.Left + (c.Width - c.Height) / 2, _
c.Top + c.Height / 40, c.Left + c.Height, c.Top + (c.Height / 20) * 19)
.Width = c.Height - c.Height / 20
.Height = c.Height - c.Height / 20
.Fill.Visible = msoFalse
With .Line
.ForeColor.RGB = vbBlack
.Weight = 0.7
End With
End With
End If
End If
End Sub 'この行まで

※ セル幅がセルの高さより広いという前提です。
※ すでにオートシェイプが表示されているセルでダブルクリックする際、
オートシェイプ上でダブルクリックしないようにしてください。

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 4
この回答へのお礼

クリックすると、そのセルにオートシェイプで作った○が乗るようになればなぁと思ったのですが、なかなか難しいのですね。
自宅のパソコンではエクセルが使えないので、会社に行ったら早速試してみたいと思います。

お忙しい中わざわざ考えて頂き本当にありがとうございました(^^)

お礼日時:2014/06/23 23:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング