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

解決済みの質問

オートシェイプとセルの値は連動できます?

一覧表に、「前」「中」「後」という項目があって「前」欄に○を打ち込むと、書類雛形の「作業前中後」の「前」だけにオートシェイプの楕円で囲ってくれる、みたいなことできますか?
質問ヘタですいません。

投稿日時 - 2005-07-09 18:48:57

QNo.1502388

すぐに回答ほしいです

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

言われていることを理解できているかわかりませんが、こんな感じになると思います。
お試し下さい。
■一覧表シートにマクロを貼り付けます。
■番号の入力は、一覧表のF1セルとしています。
■書類雛形ですが、
 ・測点は、B1セルとしています。
 ・楕円はあらかじめ描いておき、"楕円 前"、"楕円 中"、"楕円 後"という名前にしてあります。

※ With Worksheets("書類雛型") としたため、
 楕円図形の操作は、DrawingObjects()で行っています。


Sub Worksheet_Change(ByVal TARGET As Excel.Range)

 If TARGET.Address = "$F$1" Then
  If TARGET.Value > 0 Then '1以上の入力
   END_ROW = Range("A65536").End(xlUp).Row '番号列の最下の行
   '入力された番号を検索
   For ii = 2 To END_ROW
    '見つかった
    If Cells(ii, "A").Value = TARGET.Value Then
     INPUT_NO# = TARGET.Value '番号
     SOKUTEN$ = Cells(ii, "B").Value '測点
     '作業状態の検索
     For kk = 3 To 5 'C列~E列
      If Cells(ii, kk).Value = "○" Then
       Select Case kk
        Case 3: WORK_STATUS$ = "前"
        Case 4: WORK_STATUS$ = "中"
        Case 5: WORK_STATUS$ = "後"
       End Select
       Exit For 'For kk を抜ける
      End If
     Next kk
     Exit For 'For ii を抜ける
     End If
   Next ii
  End If
 End If

 '入力した番号が一覧表になかった場合終了
 If INPUT_NO# = 0 Then Exit Sub

 '書類雛型に転記
 With Worksheets("書類雛型")
  '測点
  .Range("B1").Value = SOKUTEN$

  '楕円を全て非表示
  For Each T_OBJ In Array("楕円 前", "楕円 中", "楕円 後")
   .DrawingObjects(T_OBJ).Visible = False
  Next

  '該当する楕円を表示
  Select Case WORK_STATUS$
   Case "前"
    .DrawingObjects("楕円 前").Visible = True
   Case "中"
    .DrawingObjects("楕円 中").Visible = True
   Case "後"
    .DrawingObjects("楕円 後").Visible = True
  End Select
 End With
End Sub

投稿日時 - 2005-07-11 23:52:36

お礼

ありがとうございました!
完璧です!
同僚に自慢してきます^^

投稿日時 - 2005-07-12 09:22:41

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

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

回答(5)

ANo.4

A1に前、B1に中、C1に後と入れる。
F3に「作業」G3に「前」、H3に「中」、I3に「後」と入れる。
Sheet1のSelection_Changeイベントに
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Select Case Target.Column
Case 1
Target = "○"
ActiveSheet.Shapes.AddShape(msoShapeOval, Range("G3").Left, Range("G3").Top, 26#, 16#).Select
Case 2
Target = "○"
ActiveSheet.Shapes.AddShape(msoShapeOval, Range("H3").Left, Range("H3").Top, 26#, 16#).Select
Case 3
Target = "○"
ActiveSheet.Shapes.AddShape(msoShapeOval, Range("I3").Left, Range("I3").Top, 26#, 16#).Select
Case Else
Exit Sub
End Select
Selection.ShapeRange.Fill.Visible = msoFalse
End Sub
を貼り付け。
A列、B列、C列のどこかの行をクリックするとそのセルに○が現れ、対応して、G列、H列、I列の該当の前、中、後に楕円が現れる。
お遊び程度のものですが、改良すれば使えるかもしれない。
現状欠点だらけですが、質問者の意図が十分わからず、手抜きせざるを得ない部分あり、あしからず。

投稿日時 - 2005-07-10 19:38:03

お礼

ありがとうございました。
ABC以外にもクリックすると○が出るのでもう少し勉強して改良していきたいと思います。
ちなみにVBAの参考書を買えば、上記のプログラムぐらい出来るのですか?
私の中でVBAは別世界の話のように思うので手がでません。
食わず嫌い状態です。

投稿日時 - 2005-07-11 10:13:33

ANo.3

VBAになります。
対象となるシートに以下のコードを貼り付けます。
以下の条件で作成してあります。
■入力は、A1またはA2の場合になっています。
■楕円の図形はあらかじめ描いておきます。
 「楕円 1」「楕円 2」という名前とし、それぞれA1とA2に対応しています。


Sub Worksheet_Change(ByVal TARGET As Excel.Range)
 
 Select Case TARGET.Address
  'A1セルの値が○の時、楕円を表示
  Case "$A$1"
   ActiveSheet.Shapes("楕円 1").Select
   With Selection
    If TARGET.Value = "○" Then
     .ShapeRange.Line.Visible = msoTrue '線を表示
    Else
     .ShapeRange.Line.Visible = msoFalse '線を非表示
    End If
   End With
    TARGET.Select

   'A2セルの値が○の時、楕円を表示
   Case "$A$2"
    ActiveSheet.Shapes("楕円 2").Select
    With Selection
     If TARGET.Value = "○" Then
      .ShapeRange.Line.Visible = msoTrue '線を表示
     Else
      .ShapeRange.Line.Visible = msoFalse '線を非表示
     End If
    End With
    TARGET.Select

    'A1,A2以外の時は終了
    Case Else
     Exit Sub
 End Select
End Sub

これで、言われている内容が示現すると思うのですが、不明な点は再度ご質問して下さい。

投稿日時 - 2005-07-10 00:03:13

補足

ありがとうございます。
上記のVBAばっちりでした。

あと、もう少し踏み込んで質問します。

Sheet1→一覧表、Sheet2→書類雛型として、
一覧表のA列に「番号」B列に「測点」C、D、E列に「作業前」「中」「後」で、
例えば番号1は、測点が「公園」作業が、作業中に「○」と入力します。

そこで印刷したい番号を別のセルに入力すると、書類雛型に測点「公園」作業中に楕円で囲む。とするのは可能ですか?
「2」と打込めば2のデータを、「3」とすればそれぞれでるようにしたいのですが。

楕円以外は関数でリンクできるようになったので最後に楕円の貼付けで行き詰まってます。
よろしくおねがいします。

投稿日時 - 2005-07-11 09:47:08

お礼

すみません。補足に打込んじゃいました。

投稿日時 - 2005-07-11 11:03:53

ANo.2

こんばんは。

図のリンク貼り付けで、VBAでなくても出来るとは思いますが、私は、そちらはあまり詳しくありません。個人的には、VBAのほうが確実なような気がしています。

しかし、VBAを掲示しても、セル位置などは、今のご質問のままの文章では、かなり、自分で修正してもらわなくてもなりません。

それと、

>「前」欄に○を打ち込むと

というのは、具体的にどういうことですか?
「○」を打ち込むと、の「○」は文字なのでしょうか?

投稿日時 - 2005-07-09 23:52:17

お礼

ありがとうございました。
是非VBA以外のやり方も知りたいのですが・・
出来る可能性があるというのが解かっただけ収穫でした。

投稿日時 - 2005-07-11 09:46:02

ANo.1

VBAにて実現できます…が、○を入力しただけで、というのは無理のようですね。VBAを動かすためには、ボタンなどをつけなければならないので。

参考URL:http://www.ops.dti.ne.jp/~allergy/vb/vbvba.html#autoshape

投稿日時 - 2005-07-09 22:26:16

あなたにオススメの質問