Excel VBA質問箱 IV

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

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


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

【34890】マクロについて教えて下さい-その1 ぷーちゃん 06/2/15(水) 22:48 質問[未読]
【34903】Re:マクロについて教えて下さい-その1 kobasan 06/2/16(木) 0:12 回答[未読]
【34908】Re:マクロについて教えて下さい-その1 ぷーちゃん 06/2/16(木) 0:50 発言[未読]
【34915】Re:マクロについて教えて下さい-その1 ぷーちゃん 06/2/16(木) 2:05 お礼[未読]
【34912】Re:マクロについて教えて下さい-その1 Kein 06/2/16(木) 1:13 回答[未読]
【34914】Re:マクロについて教えて下さい-その1 ぷーちゃん 06/2/16(木) 1:38 発言[未読]
【34917】Re:マクロについて教えて下さい-その1 Kein 06/2/16(木) 2:22 発言[未読]
【34918】Re:マクロについて教えて下さい-その1 ぷーちゃん 06/2/16(木) 2:44 発言[未読]
【34929】Re:マクロについて教えて下さい-その1 Kein 06/2/16(木) 13:17 回答[未読]
【34933】Re:マクロについて教えて下さい-その1 ぷーちゃん 06/2/16(木) 14:06 発言[未読]
【34935】Re:マクロについて教えて下さい-その1 Kein 06/2/16(木) 14:13 回答[未読]
【34938】Re:マクロについて教えて下さい-その1 ぷーちゃん 06/2/16(木) 14:26 お礼[未読]
【34916】Re:マクロについて教えて下さい-その1 ぷーちゃん 06/2/16(木) 2:14 お礼[未読]

【34890】マクロについて教えて下さい-その1
質問  ぷーちゃん  - 06/2/15(水) 22:48 -

引用なし
パスワード
   以下は、グラフ809を選択した時に表示されたグラフ範囲に対して、1行下にドラッグして、グラフ範囲を1行広げた自動実行のプログラムです。
これを改造?して、次にマクロを実行した時に、このグラフ範囲が更に1行下に広がるようししたいのです。つまり、マクロを実行する度に、下にグラフ範囲が1行づつ広がっていくようにしたいのです。

Sub Macro2()
' Macro2 Macro
' マクロ記録日 : 2006/2/15 ユーザー名 : -
'
'
  ActiveSheet.ChartObjects("グラフ 810").Activate
  ActiveChart.ChartArea.Select
  ActiveChart.SetSourceData Source:=Sheets("<指 標>").Range("C40:C130,K40:K130") _
    , PlotBy:=xlColumns
End Sub

どなたかわかる方、教えて下さい。
よろしくお願い致します。

【34903】Re:マクロについて教えて下さい-その1
回答  kobasan  - 06/2/16(木) 0:12 -

引用なし
パスワード
   ▼ぷーちゃん さん 今晩は。

Z1を作業エリアにしています。

41行から130行まで変化するようにしています。

これでどうでしょうか。

>以下は、グラフ809を選択した時に表示されたグラフ範囲に対して、1行下にドラッグして、グラフ範囲を1行広げた自動実行のプログラムです。
>これを改造?して、次にマクロを実行した時に、このグラフ範囲が更に1行下に広がるようししたいのです。つまり、マクロを実行する度に、下にグラフ範囲が1行づつ広がっていくようにしたいのです。
>
Sub Macro2()
Dim LastRow As Long
Dim data範囲 As String
  '最終行を設定
  if Range("z1").Value <41 then Range("z1").Value = 41
  If Range("z1").Value < 131 Then
    Range("z1").Value = Range("z1").Value + 1
  Else
    Range("z1").Value = 41
  End If
  
  LastRow = ActiveSheet.Range("z1").Value     '最終行
  data範囲 = "C40:C" & LastRow & ",K40:K" & LastRow
  
>  ActiveSheet.ChartObjects("グラフ 810").Activate
>  ActiveChart.ChartArea.Select
>  ActiveChart.SetSourceData Source:=Sheets("<指 標>").Range("C40:C130,K40:K130") _
>    , PlotBy:=xlColumns
>End Sub

【34908】Re:マクロについて教えて下さい-その1
発言  ぷーちゃん  - 06/2/16(木) 0:50 -

引用なし
パスワード
   ▼kobasan さん:
>Sub Macro2()
>Dim LastRow As Long
>Dim data範囲 As String
>  '最終行を設定
>  if Range("z1").Value <41 then Range("z1").Value = 41
>  If Range("z1").Value < 131 Then
>    Range("z1").Value = Range("z1").Value + 1
>  Else
>    Range("z1").Value = 41
>  End If
>  
>  LastRow = ActiveSheet.Range("z1").Value     '最終行
>  data範囲 = "C40:C" & LastRow & ",K40:K" & LastRow
>  
>>  ActiveSheet.ChartObjects("グラフ 810").Activate
>>  ActiveChart.ChartArea.Select
>>  ActiveChart.SetSourceData Source:=Sheets("<指 標>").Range("C40:C130,K40:K130") _
>>    , PlotBy:=xlColumns
>>End Sub


すいません。試してみたのですが、129行から130行へグラフ範囲を広げることはできましたが、その次にマクロを実行しても131行へ変化しませんでした。
よくわかってなくてすいません。

【34912】Re:マクロについて教えて下さい-その1
回答  Kein  - 06/2/16(木) 1:13 -

引用なし
パスワード
   こんな感じかな ?

Sub Macro2()
  Dim LstR As Long
  Dim PltR As Range
  
  With Sheets("<指 標>")
   LstR = .Range("C65536").End(xlUp).Row
   Set PltR = _
   Union(.Range("C40:C" & LstR), .Range("K40:K" & LstR))
  End With
  ActiveSheet.ChartObjects("グラフ 810") _
  .SetSourceData Source:=PltR, PlotBy:=xlColumns
  Set PltR = Nothing
End Sub

【34914】Re:マクロについて教えて下さい-その1
発言  ぷーちゃん  - 06/2/16(木) 1:38 -

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

>Sub Macro2()
>  Dim LstR As Long
>  Dim PltR As Range
>  
>  With Sheets("<指 標>")
>   LstR = .Range("C65536").End(xlUp).Row
>   Set PltR = _
>   Union(.Range("C40:C" & LstR), .Range("K40:K" & LstR))
>  End With
>  ActiveSheet.ChartObjects("グラフ 810") _
>  .SetSourceData Source:=PltR, PlotBy:=xlColumns
>  Set PltR = Nothing
>End Sub


すいません。下記のところで、
  ActiveSheet.ChartObjects("グラフ 810") _
  .SetSourceData Source:=PltR, PlotBy:=xlColumns
実行時エラー438
「オブジェクトはこのプロパティまたはメッソッドをサポートしていません」
となってしまいます。

【34915】Re:マクロについて教えて下さい-その1
お礼  ぷーちゃん  - 06/2/16(木) 2:05 -

引用なし
パスワード
   ▼kobasan さん:
>Z1を作業エリアにしています。
>
>41行から130行まで変化するようにしています。
>
>Sub Macro2()
>Dim LastRow As Long
>Dim data範囲 As String
>  '最終行を設定
>  if Range("z1").Value <41 then Range("z1").Value = 41
>  If Range("z1").Value < 131 Then
>    Range("z1").Value = Range("z1").Value + 1
>  Else
>    Range("z1").Value = 41
>  End If
>  
>  LastRow = ActiveSheet.Range("z1").Value     '最終行
>  data範囲 = "C40:C" & LastRow & ",K40:K" & LastRow
>  
>>  ActiveSheet.ChartObjects("グラフ 810").Activate
>>  ActiveChart.ChartArea.Select
>>  ActiveChart.SetSourceData Source:=Sheets("<指 標>").Range("C40:C130,K40:K130") _
>>    , PlotBy:=xlColumns
>>End Sub


できました! 以下のようにしたら、130行を基点にして、マクロを実行する毎に下の行へグラフ範囲を広げていけるようになりました。

 Dim LastRow As Long
 Dim data範囲 As String
  '最終行を設定
  If Range("z1").Value < 129 Then Range("z1").Value = 129
  If Range("z1").Value < 999 Then
    Range("z1").Value = Range("z1").Value + 1
  Else
    Range("z1").Value = 41
  End If
 
  LastRow = ActiveSheet.Range("z1").Value     '最終行
  data範囲 = "C40:C" & LastRow & ",K40:K" & LastRow
  
  
  ActiveSheet.ChartObjects("グラフ 810").Activate
  ActiveChart.ChartArea.Select
  ActiveChart.SetSourceData Source:=Sheets("<指 標>").Range("C40:C" & LastRow & ",K40:K" & LastRow) _
  , PlotBy:=xlColumns

感謝です! 本当にありがとうございました。

【34916】Re:マクロについて教えて下さい-その1
お礼  ぷーちゃん  - 06/2/16(木) 2:14 -

引用なし
パスワード
   ▼Kein さん:
>Sub Macro2()
>  Dim LstR As Long
>  Dim PltR As Range
>  
>  With Sheets("<指 標>")
>   LstR = .Range("C65536").End(xlUp).Row
>   Set PltR = _
>   Union(.Range("C40:C" & LstR), .Range("K40:K" & LstR))
>  End With
>  ActiveSheet.ChartObjects("グラフ 810") _
>  .SetSourceData Source:=PltR, PlotBy:=xlColumns
>  Set PltR = Nothing
>End Sub


kobasanさんに教えて頂いた方法で、うまくいきました。
keinさんにも教えて頂き、感謝しております。ありがとうございました。

【34917】Re:マクロについて教えて下さい-その1
発言  Kein  - 06/2/16(木) 2:22 -

引用なし
パスワード
   ActiveSheet.ChartObjects("グラフ 810") _
.Chart.SetSourceData Source:=PltR, PlotBy:=xlColumns

と、修正してみて下さい。

【34918】Re:マクロについて教えて下さい-その1
発言  ぷーちゃん  - 06/2/16(木) 2:44 -

引用なし
パスワード
   ▼Kein さん:
>ActiveSheet.ChartObjects("グラフ 810") _
>.Chart.SetSourceData Source:=PltR, PlotBy:=xlColumns
>
>と、修正してみて下さい。


これを実行すると、データの最後までグラフ範囲が広がってしまいます。
現在のグラフ範囲の最後である130行を基点にして、マクロを実行する毎に
1行づつ下にグラフ範囲を広げていきたいのです。
私の説明が解りにくかったようで、すいません。

【34929】Re:マクロについて教えて下さい-その1
回答  Kein  - 06/2/16(木) 13:17 -

引用なし
パスワード
   では、こんなコードでどうでしょーか ?

Sub Ch_Plot_Resize()
  Dim Se As Series
  Dim Ary As Variant
  Dim MyR1 As Range, MyR2 As Range
 
  Set Se = ActiveSheet.ChartObjects("グラフ 810") _
  .Chart.SeriesCollection(1)
  Ary = Split(Se.Formula, ",")
  Set MyR1 = Range(Ary(1)).Resize(Range(Ary(1)).Rows.Count + 1)
  Set MyR2 = Range(Ary(2)).Resize(Range(Ary(2)).Rows.Count + 1)
  Se.XValues = MyR1: Se.Values = MyR2
  Set MyR1 = Nothing: Set MyR2 = Nothing: Set Se = Nothing
End Sub

【34933】Re:マクロについて教えて下さい-その1
発言  ぷーちゃん  - 06/2/16(木) 14:06 -

引用なし
パスワード
   ▼Kein さん:
>では、こんなコードでどうでしょーか ?
>
>Sub Ch_Plot_Resize()
>  Dim Se As Series
>  Dim Ary As Variant
>  Dim MyR1 As Range, MyR2 As Range
> 
>  Set Se = ActiveSheet.ChartObjects("グラフ 810") _
>  .Chart.SeriesCollection(1)
>  Ary = Split(Se.Formula, ",")
>  Set MyR1 = Range(Ary(1)).Resize(Range(Ary(1)).Rows.Count + 1)
>  Set MyR2 = Range(Ary(2)).Resize(Range(Ary(2)).Rows.Count + 1)
>  Se.XValues = MyR1: Se.Values = MyR2
>  Set MyR1 = Nothing: Set MyR2 = Nothing: Set Se = Nothing
>End Sub


できました! ありがとうございます。
このコードで、グラフが4列で構成されている場合は、どのようになるのでしょうか?
つまり、一番左の列がX軸で、残りの3列がY軸上に表示されるようなグラフの場合です。
よく解ってなくてすいません。

【34935】Re:マクロについて教えて下さい-その1
回答  Kein  - 06/2/16(木) 14:13 -

引用なし
パスワード
   系列が複数あるなら、それらをループ処理していけば良いのです。

Sub Ch_Plot_Resize2()
  Dim Se As Series
  Dim Ary As Variant
  Dim MyR1 As Range, MyR2 As Range
 
  For Each Se In ActiveSheet.ChartObjects("グラフ 810") _
  .Chart.SeriesCollection
   Ary = Split(Se.Formula, ",")
   Set MyR1 = Range(Ary(1)).Resize(Range(Ary(1)).Rows.Count + 1)
   Set MyR2 = Range(Ary(2)).Resize(Range(Ary(2)).Rows.Count + 1)
   Se.XValues = MyR1: Se.Values = MyR2
   Set MyR1 = Nothing: Set MyR2 = Nothing
  Next
End Sub

というように。

【34938】Re:マクロについて教えて下さい-その1
お礼  ぷーちゃん  - 06/2/16(木) 14:26 -

引用なし
パスワード
   ▼Kein さん:
>系列が複数あるなら、それらをループ処理していけば良いのです。
>
>Sub Ch_Plot_Resize2()
>  Dim Se As Series
>  Dim Ary As Variant
>  Dim MyR1 As Range, MyR2 As Range
> 
>  For Each Se In ActiveSheet.ChartObjects("グラフ 810") _
>  .Chart.SeriesCollection
>   Ary = Split(Se.Formula, ",")
>   Set MyR1 = Range(Ary(1)).Resize(Range(Ary(1)).Rows.Count + 1)
>   Set MyR2 = Range(Ary(2)).Resize(Range(Ary(2)).Rows.Count + 1)
>   Se.XValues = MyR1: Se.Values = MyR2
>   Set MyR1 = Nothing: Set MyR2 = Nothing
>  Next
>End Sub
>
>というように。


できました! 親切に教えて頂き感謝しております。
これを機に、VBAの勉強をしていきたいと考えています。
本当に、ありがとうございました。

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