Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7576 / 13644 ツリー ←次へ | 前へ→

【37996】Excelにてグラフを作成するには 一年生 06/5/24(水) 21:39 質問[未読]
【37998】Re:Excelにてグラフを作成するには Kein 06/5/24(水) 22:10 回答[未読]
【37999】Re:Excelにてグラフを作成するには 一年生 06/5/24(水) 22:31 質問[未読]
【38000】Re:Excelにてグラフを作成するには Kein 06/5/24(水) 23:14 発言[未読]
【38005】Re:Excelにてグラフを作成するには 一年生 06/5/25(木) 5:46 質問[未読]
【38020】Re:Excelにてグラフを作成するには Kein 06/5/25(木) 10:59 回答[未読]
【38021】Re:Excelにてグラフを作成するには Kein 06/5/25(木) 11:04 発言[未読]
【38066】Re:Excelにてグラフを作成するには 一年生 06/5/25(木) 21:21 質問[未読]
【38070】Re:Excelにてグラフを作成するには Kein 06/5/25(木) 22:52 回答[未読]
【38176】Re:Excelにてグラフを作成するには 一年生 06/5/28(日) 17:20 お礼[未読]

【37996】Excelにてグラフを作成するには
質問  一年生 E-MAIL  - 06/5/24(水) 21:39 -

引用なし
パスワード
   こんばんは
Excel勉強中で、新しい問題に局面していますので、
どなたか教えていただきたいです。
よろしくお願いします。

以下のデータを元にして、製造コードを選んで(メッセージ
Boxに入力する。製造コードの重複がない)、
グラフを作成したいです。
データレイアウト
製造コード 製造名   200501  200502  200503 ・・・200512
ABCDEF   あいうえお   10    20    10      50



縦軸:数量、横軸:年月

【37998】Re:Excelにてグラフを作成するには
回答  Kein  - 06/5/24(水) 22:10 -

引用なし
パスワード
   A2 以下の製造コードをダブルクリックするだけで、折れ線グラフを作る
というのはどうかな ?
以下のイベントマクロをシートモジュールに入れて下さい。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _
Cancel As Boolean)
  Dim XVR As Range, VR As Range
  Dim Nm As String
 
  If Intersect(Target, Range("A2", Range("A65536").End(xlUp))) Is _
  Nothing Then Exit Sub
  Set XVR = Range("C1", Range("IV1").End(xlToLeft))
  Set VR = XVR.Offset(Target.Row - 1)
  Nm = Target.Offset(, 1).Text
  Application.ScreenUpdating = False
  With Charts.Add(After:=ActiveSheet)
   .ChartType = xlLineMarkers
   .HasLegend = False
   With .SeriesCollection.NewSeries
     .XValues = XVR
     .Values = VR
   End With
   .SizeWithWindow = True
   .Deselect
   .Name = Nm
  End With
  Application.ScreenUpdating = True
  Set XVR = Nothing: Set VR = Nothing
End Sub

【37999】Re:Excelにてグラフを作成するには
質問  一年生 E-MAIL  - 06/5/24(水) 22:31 -

引用なし
パスワード
   お返事ありがとうございます。
シートモジュールへの入れ方はまだわかりません。
よろしくお願いします。

【38000】Re:Excelにてグラフを作成するには
発言  Kein  - 06/5/24(水) 23:14 -

引用なし
パスワード
   各モジュールにマクロを入れる方法は、↓を参考にして下さい。
http://park11.wakwak.com/~miko/Excel_Note/14-01_macro.htm#14-01-01
* シートモジュールだけでなく、ついでに他のモジュールの使い方も学習してね。

【38005】Re:Excelにてグラフを作成するには
質問  一年生  - 06/5/25(木) 5:46 -

引用なし
パスワード
   Keinさん
正しくマクロを入れましたら、動きましたよ!
感動しました!!

質問1:シートモジュールというのは、このシートなら動きますが、ワークシート全体
に対して、共通のものではないですね。
質問2:グラフの表示区域を
Activeシート(シートモジュールにいれたシート)にさせることは可能でしょうか?
次の製造コードを選択したら、前のグラフをクリアしたい。
質問3:二つ目以降の製造コードを選択した場合は、正しく表示されないみたいです。

【38020】Re:Excelにてグラフを作成するには
回答  Kein  - 06/5/25(木) 10:59 -

引用なし
パスワード
   それでは、現在シートモジュールに入れているマクロを削除し、
あらたに ThisWorkbookモジュール に以下のマクロを入れて下さい。

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, _
ByVal Target As Range, Cancel As Boolean)
  Dim XVR As Range, VR As Range
  Dim MyCh As ChartObject
  Dim Nm As String
 
  If Target.Address = "$A$1" Then
   With Sh.ChartObjects
     If .Count > 0 Then
      .Item(1).Visible = IIf(.Item(1).Visible, False, True)
     End If
   End With
   Cancel = True: Exit Sub
  End If
  If Intersect(Target, Range("A2", Range("A65536").End(xlUp))) Is _
  Nothing Then Exit Sub
  Cancel = True
  Set XVR = Range("C1", Range("IV1").End(xlToLeft))
  Set VR = XVR.Offset(Target.Row - 1)
  Nm = Target.Offset(, 1).Text
  Application.ScreenUpdating = False
  If Sh.ChartObjects.Count > 0 Then
   Set MyCh = Sh.ChartObjects(1)
   If MyCh.Visible = False Then MyCh.Visible = True
   MyCh.Chart.SeriesCollection(1).Delete
  Else
   With Sh.Range("C2:I22")
     Set MyCh = Sh.ChartObjects.Add(.Left, .Top, .Width, .Height)
   End With
  End If
  MyCh.Chart.ChartWizard VR, xlLine, 4, xlRows, , , 0, Nm
  MyCh.Chart.SeriesCollection(1).XValues = XVR
  Application.ScreenUpdating = True
  Set XVR = Nothing: Set VR = Nothing
End Sub

このマクロの機能は
>ワークシート全体に対して、共通
になります。
>グラフの表示区域
は、アクティブシートの C2:I22 のセル範囲と同じ位置・大きさになります。
>製造コードを選択したら、前のグラフをクリア
そして新しくダブルクリックした行のデータをプロットします。
グラフタイトルは、常に"ダブルクリックしたセルの右隣り(B列)の値"です。
あと、既にグラフを表示している場合、データの入力範囲がグラフに隠れて
見えなくなりますから、その場合は A1 をダブルクリックして下さい。
一時的にグラフを非表示に出来ます。もう一度 A1 をダブルクリックすると
表示します。つまり交互に表示状態を切り替えられる、というわけです。
試してみて下さい。

【38021】Re:Excelにてグラフを作成するには
発言  Kein  - 06/5/25(木) 11:04 -

引用なし
パスワード
   追伸。最後のところに・・

  Set XVR = Nothing: Set VR = Nothing: Set MyCh = Nothing
                     ↑これを追加しておいて下さい。
End Sub

【38066】Re:Excelにてグラフを作成するには
質問  一年生  - 06/5/25(木) 21:21 -

引用なし
パスワード
   Keinさん
 問題解決です。
 もし可能であれば、説明文をつけていただきたいです。コードの構成を理解しようと
思っています。

【38070】Re:Excelにてグラフを作成するには
回答  Kein  - 06/5/25(木) 22:52 -

引用なし
パスワード
   Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, _
ByVal Target As Range, Cancel As Boolean)
  Dim XVR As Range, VR As Range
  Dim MyCh As ChartObject
  Dim Nm As String
 
  If Target.Address = "$A$1" Then
  'ダブルクリックしたセルのアドレスが A1 なら

   With Sh.ChartObjects
   'アクティブシート(Shに格納されている)のグラフオブジェクトについて

     If .Count > 0 Then
     'もし一つ以上配置されていれば

      .Item(1).Visible = IIf(.Item(1).Visible, False, True)
      'Indexが 1 (最初に配置されたもの)の表示がされていれば
      '非表示にし、非表示なら表示する

     End If
   End With
   アクティブシートのグラフオブジェクトについての記述はここまで

   Cancel = True: Exit Sub
   'ダブルクリックした際、そのセルが編集状態になるのを停止し
   'マクロの実行を終わる

  End If
  If Intersect(Target, Range("A2", Range("A65536").End(xlUp))) Is _
  Nothing Then Exit Sub
  'ダブルクリックしたセルが A1 でなかった場合、A2〜A列最終入力行まで
  'のセルでなかったらマクロ実行を終わる
 
  Cancel = True
  'ダブルクリックした際、そのセルが編集状態になるのを停止する

  Set XVR = Range("C1", Range("IV1").End(xlToLeft))
  'C1セルから項目が入力されている右端までを、Rangeオブジェクト変数に格納する
  'そこが項目軸範囲となる
 
  Set VR = XVR.Offset(Target.Row - 1)
  '項目軸にする範囲から、ダブルクリックした行より一つ少ない数だけ
  '下へ移動した範囲が、数値軸範囲になる。そこをRangeオブジェクト変数に格納

  Nm = Target.Offset(, 1).Text
  'ダブルクリックしたセルの右隣り(B列)の値をグラフタイトルとするため
  '文字列型変数に格納する

  Application.ScreenUpdating = False
  '画面のブレを抑止する

  If Sh.ChartObjects.Count > 0 Then
  'アクティブシートに既にグラフが配置されていれば

   Set MyCh = Sh.ChartObjects(1)
   'それをオブジェクト型変数に格納する

   If MyCh.Visible = False Then MyCh.Visible = True
   'もし非表示になっていたら、表示する

   MyCh.Chart.SeriesCollection(1).Delete
   '以前にプロットしていた系列を削除する

  Else
  'もしグラフが配置されていなければ

   With Sh.Range("C2:I22")
   'アクティブシートの C2:I11 の範囲で

     Set MyCh = Sh.ChartObjects.Add(.Left, .Top, .Width, .Height)
     'グラフをその範囲に合わせた位置と大きさに挿入する

   End With
  End If
  MyCh.Chart.ChartWizard VR, xlLine, 4, xlRows, , , 0, Nm
  'グラフを作成するメソッド ChartWizard をヘルプで調べれば
  '各引数の意味が分かります。値が空のところは省略可能な引数です

  MyCh.Chart.SeriesCollection(1).XValues = XVR
  'プロットした範囲は数値軸のみなので、項目軸範囲を追加する

  Application.ScreenUpdating = True
  '仮面のブレ抑止を解除

  Set XVR = Nothing: Set VR = Nothing: Set MyCh = Nothing
  'オブジェクト変数と格納したオブジェクトの関係を切断する

End Sub

・・ということです。

【38176】Re:Excelにてグラフを作成するには
お礼  一年生  - 06/5/28(日) 17:20 -

引用なし
パスワード
   Keinさん

ありがとうございました!
今後も指導よろしくお願いします。

7576 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free