Excel VBA質問箱 IV

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

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


11054 / 13646 ツリー ←次へ | 前へ→

【17531】グラフコピー ヒデアキ 04/9/1(水) 19:28 質問[未読]
【17536】Re:グラフコピー Kein 04/9/1(水) 20:33 回答[未読]
【17546】Re:グラフコピー ヒデアキ 04/9/2(木) 7:42 お礼[未読]
【17544】Re:グラフコピー shousuke 04/9/2(木) 1:43 回答[未読]
【17547】Re:グラフコピー ヒデアキ 04/9/2(木) 7:43 お礼[未読]
【17583】Re:グラフコピー ヒデアキ 04/9/2(木) 18:19 質問[未読]
【17590】Re:グラフコピー Kein 04/9/2(木) 23:16 回答[未読]
【17598】Re:グラフコピー ヒデアキ 04/9/3(金) 8:39 質問[未読]
【17639】Re:グラフコピー Kein 04/9/3(金) 20:13 回答[未読]
【17652】Re:グラフコピー ヒデアキ 04/9/4(土) 9:21 質問[未読]
【17669】Re:グラフコピー Kein 04/9/4(土) 17:04 回答[未読]
【17701】Re:グラフコピー ヒデアキ 04/9/5(日) 20:31 お礼[未読]
【17765】Re:グラフコピー ヒデアキ 04/9/7(火) 14:06 質問[未読]
【17776】Re:グラフコピー Kein 04/9/7(火) 16:07 回答[未読]
【17781】Re:グラフコピー ヒデアキ 04/9/7(火) 17:06 質問[未読]
【17784】Re:グラフコピー Kein 04/9/7(火) 18:03 回答[未読]
【17794】Re:グラフコピー ヒデアキ 04/9/7(火) 22:25 お礼[未読]
【17863】Re:グラフコピー ヒデアキ 04/9/8(水) 22:39 質問[未読]
【17865】Re:グラフコピー Kein 04/9/9(木) 1:41 回答[未読]
【17903】Re:グラフコピー ヒデアキ 04/9/9(木) 22:17 質問[未読]
【17910】Re:グラフコピー Kein 04/9/10(金) 2:16 回答[未読]
【17954】Re:グラフコピー ヒデアキ 04/9/10(金) 22:53 お礼[未読]
【18251】Re:グラフコピー ヒデアキ 04/9/19(日) 18:05 質問[未読]
【18255】Re:グラフコピー Kein 04/9/19(日) 19:41 回答[未読]
【18286】Re:グラフコピー ヒデアキ 04/9/20(月) 13:51 質問[未読]
【18294】Re:グラフコピー Kein 04/9/20(月) 22:21 回答[未読]
【18329】Re:グラフコピー ヒデアキ 04/9/21(火) 16:17 発言[未読]
【18333】Re:グラフコピー Kein 04/9/21(火) 16:40 回答[未読]
【18429】Re:グラフコピー ヒデアキ 04/9/23(木) 17:49 お礼[未読]

【17531】グラフコピー
質問  ヒデアキ  - 04/9/1(水) 19:28 -

引用なし
パスワード
   こんにちは。はじめまして。
早速ですが質問です。

ActiveSheet.ChartObjects("グラフ 86").Activate
オブジェクトの後に("グラフ 86")ではなく変数など
他のものを割り当てられないでしょうか?

【17536】Re:グラフコピー
回答  Kein  - 04/9/1(水) 20:33 -

引用なし
パスワード
   >変数など他のもの
の意味が分かりかねますが、インデックスも使えますし、それを変数に入れてから
渡してもオッケーです。例えば・・

With ActiveSheet.ChartObjects
  For i = 2 To .Count
   .Item(i).Top = _
   .Item(i - 1).Top + .Item(i - 1).Height + 5
  Next i
End With

などとすれば、上端の位置を設定できます。

【17544】Re:グラフコピー
回答  shousuke WEB  - 04/9/2(木) 1:43 -

引用なし
パスワード
   名前を変えたいってことですか?

であれば、そのグラフがActivateされているときに
with selection
    .name="これ"
end with

で出来ますよ。

【17546】Re:グラフコピー
お礼  ヒデアキ  - 04/9/2(木) 7:42 -

引用なし
パスワード
   ありがとうございます。早速試してみます。


▼Kein さん:
>>変数など他のもの
>の意味が分かりかねますが、インデックスも使えますし、それを変数に入れてから
>渡してもオッケーです。例えば・・
>
>With ActiveSheet.ChartObjects
>  For i = 2 To .Count
>   .Item(i).Top = _
>   .Item(i - 1).Top + .Item(i - 1).Height + 5
>  Next i
>End With
>
>などとすれば、上端の位置を設定できます。

【17547】Re:グラフコピー
お礼  ヒデアキ  - 04/9/2(木) 7:43 -

引用なし
パスワード
   ありがとうございます。早速試してみます。


▼shousuke さん:
>名前を変えたいってことですか?
>
>であれば、そのグラフがActivateされているときに
>with selection
>    .name="これ"
>end with
>
>で出来ますよ。

【17583】Re:グラフコピー
質問  ヒデアキ  - 04/9/2(木) 18:19 -

引用なし
パスワード
   すいません。また質問があります。
初心者なのでマクロをよくわかってません。
よろしくお願いします。

Worksheets("MeasData").Activate      '"MeasData"からグラフをコピーする
ActiveSheet.ChartObjects("グラフ 13").Activate
ActiveChart.ChartArea.Select
ActiveChart.ChartArea.Copy
ActiveWindow.Visible = False
  
Sheets("HistRead").Select   'コピーしたものを"HistRead"に貼り付ける
Cells(1,1).Select
ActiveSheet.Paste
ActiveSheet.ChartObjects("グラフ 22").Activate
ActiveWindow.Visible = False
  
WorkSheets("HistRead").Activate   

元データを"HistRead"からに変更したいのですがここから先がうまくいきません。元データを変えたいグラフについて名前を指定してあげないといけないようで、困ってます。
               ↓ここを指定しないといけない
ActiveSheet.ChartObjects(???).Activate
ActiveChart.ChartArea.Select
Application.CutCopyMode = False
ActiveChart.SeriesCollection(1).XValues = "=HistRead!R16C3:R25C3"
ActiveChart.SeriesCollection(1).Values = "=HistRead!R16C6:R25C6"
ActiveChart.SeriesCollection(1).Name = "=HistRead!R15C6"
ActiveChart.SeriesCollection(2).XValues = "=HistRead!R16C3:R25C3"
ActiveChart.SeriesCollection(2).Values = "=HistRead!R16C9:R25C9"
ActiveChart.SeriesCollection(2).Name = "=HistRead!R15C9"
ActiveChart.SeriesCollection(3).XValues = "=HistRead!R16C3:R25C3"
ActiveChart.SeriesCollection(3).Values = "=HistRead!R16C12:R25C12"
ActiveChart.SeriesCollection(3).Name = "=HistRead!R15C12"
ActiveChart.SeriesCollection(4).XValues = "=HistRead!R16C3:R25C3"
ActiveChart.SeriesCollection(4).Values = "=HistRead!R16C15:R25C15"
ActiveChart.SeriesCollection(4).Name = "=HistRead!R15C15"

【17590】Re:グラフコピー
回答  Kein  - 04/9/2(木) 23:16 -

引用なし
パスワード
   シートを変更しても、プロットするデータのセル範囲は変更しない、ということなら

Sub Ch_Copy()
  Dim i As Integer
  Dim Fom As String, NewFm As String
 
  Sheets("MeasData").ChartObjects("グラフ 13").Duplicate _
  .Chart.Location xlLocationAsObject, "HistRead"
  With Sheets("HistRead")
   With .ChartObjects(.ChartObjects.Count).Chart
     For i = 1 To .SeriesCollection.Count
      Fom = .SeriesCollection(i).Formula
      NewFm = Replace(Fom, "MeasData", "HistRead")
      .SeriesCollection(i).Formula = NewFm
     Next i
   End With
   .Activate
  End With
End Sub

というようなコードで出来ます。コピーは負担が大きいのか、処理時間が
かかりますから、上のように Duplicate を使って下さい。

【17598】Re:グラフコピー
質問  ヒデアキ  - 04/9/3(金) 8:39 -

引用なし
パスワード
   回答ありがとうございます。

もう一つ質問なんですが、
グラフを"HistRead"のある特定のセルに
移動させることってできますか?


▼Kein さん:
>シートを変更しても、プロットするデータのセル範囲は変更しない、ということなら
>
>Sub Ch_Copy()
>  Dim i As Integer
>  Dim Fom As String, NewFm As String
> 
>  Sheets("MeasData").ChartObjects("グラフ 13").Duplicate _
>  .Chart.Location xlLocationAsObject, "HistRead"
>  With Sheets("HistRead")
>   With .ChartObjects(.ChartObjects.Count).Chart
>     For i = 1 To .SeriesCollection.Count
>      Fom = .SeriesCollection(i).Formula
>      NewFm = Replace(Fom, "MeasData", "HistRead")
>      .SeriesCollection(i).Formula = NewFm
>     Next i
>   End With
>   .Activate
>  End With
>End Sub
>
>というようなコードで出来ます。コピーは負担が大きいのか、処理時間が
>かかりますから、上のように Duplicate を使って下さい。

【17639】Re:グラフコピー
回答  Kein  - 04/9/3(金) 20:13 -

引用なし
パスワード
   例えば B3 セルの左上端にグラフの左上端を合わせるなら・・

Sub Ch_Copy()
  Dim i As Integer
  Dim Lp As Single, Tp As Single
  Dim Fom As String, NewFm As String
 
  Sheets("MeasData").ChartObjects("グラフ 13").Duplicate _
  .Chart.Location xlLocationAsObject, "HistRead"
  With Sheets("HistRead")
   Lp = .Range("B3").Left: Tp = .Range("B3").Top
   With .ChartObjects(.ChartObjects.Count)
     .Left = Lp: .Top = Tp
     For i = 1 To .Chart.SeriesCollection.Count
       Fom = .Chart.SeriesCollection(i).Formula
       NewFm = Replace(Fom, "MeasData", "HistRead")
       .Chart.SeriesCollection(i).Formula = NewFm
     Next i
   End With
   .Activate
  End With
End Sub

ついでに大きさを、B3:G16 に合わせるなら

Dim Wp As Single, Hp As Single

を追加宣言し

With Sheets("HistRead")
  With Range("B3:G16")
   Lp = .Left: Tp = .Top: Wp = .Width: Hp = .Height
  End With
  With .ChartObjects(.ChartObjects.Count)
   .Left = Lp: .Top = Tp: Width = Wp: .Height = Hp


というように、幅と高さも指定すれば良いでしょう。

【17652】Re:グラフコピー
質問  ヒデアキ  - 04/9/4(土) 9:21 -

引用なし
パスワード
   おはようございます。

Kein さんありがとうございました。
もうひとつ質問があります。

"HistRead"にグラフをコピーしてデータを参照する場所を違うセルあるいは
違うレンジにすることはできますか?


▼Kein さん:
>例えば B3 セルの左上端にグラフの左上端を合わせるなら・・
>
>Sub Ch_Copy()
>  Dim i As Integer
>  Dim Lp As Single, Tp As Single
>  Dim Fom As String, NewFm As String
> 
>  Sheets("MeasData").ChartObjects("グラフ 13").Duplicate _
>  .Chart.Location xlLocationAsObject, "HistRead"
>  With Sheets("HistRead")
>   Lp = .Range("B3").Left: Tp = .Range("B3").Top
>    With .ChartObjects(.ChartObjects.Count)
>     .Left = Lp: .Top = Tp
>      For i = 1 To .Chart.SeriesCollection.Count
>        Fom = .Chart.SeriesCollection(i).Formula
>        NewFm = Replace(Fom, "MeasData", "HistRead")
>        .Chart.SeriesCollection(i).Formula = NewFm
>      Next i
>    End With
>   .Activate
>  End With
>End Sub
>
>ついでに大きさを、B3:G16 に合わせるなら
>
>Dim Wp As Single, Hp As Single
>
>を追加宣言し
>
>With Sheets("HistRead")
>  With Range("B3:G16")
>   Lp = .Left: Tp = .Top: Wp = .Width: Hp = .Height
>  End With
>  With .ChartObjects(.ChartObjects.Count)
>   .Left = Lp: .Top = Tp: Width = Wp: .Height = Hp
>
>
>というように、幅と高さも指定すれば良いでしょう。

【17669】Re:グラフコピー
回答  Kein  - 04/9/4(土) 17:04 -

引用なし
パスワード
   初めからそのように説明して下さい。

Sub Ch_Copy()
  Dim Lp As Single, Tp As Single
  Dim PltR As Range
 
  Sheets("MeasData").ChartObjects("グラフ 13").Duplicate _
  .Chart.Location xlLocationAsObject, "HistRead"
  With Sheets("HistRead")
   Lp = .Range("B3").Left: Tp = .Range("B3").Top
   Set PltR = .Range("C2:E16")
   With .ChartObjects(.ChartObjects.Count)
     .Left = Lp: .Top = Tp
     .Chart.SetSourceData PltR
   End With
   .Activate
  End With
End Sub

【17701】Re:グラフコピー
お礼  ヒデアキ  - 04/9/5(日) 20:31 -

引用なし
パスワード
   Kein さんありがとうございました。
おかげさまでシートが完成しました。

また質問させていただくと思いますが、
そのときはよろしくお願い致します。

▼Kein さん:
>初めからそのように説明して下さい。
>
>Sub Ch_Copy()
>  Dim Lp As Single, Tp As Single
>  Dim PltR As Range
> 
>  Sheets("MeasData").ChartObjects("グラフ 13").Duplicate _
>  .Chart.Location xlLocationAsObject, "HistRead"
>  With Sheets("HistRead")
>   Lp = .Range("B3").Left: Tp = .Range("B3").Top
>   Set PltR = .Range("C2:E16")
>    With .ChartObjects(.ChartObjects.Count)
>     .Left = Lp: .Top = Tp
>     .Chart.SetSourceData PltR
>    End With
>   .Activate
>  End With
>End Sub

【17765】Re:グラフコピー
質問  ヒデアキ  - 04/9/7(火) 14:06 -

引用なし
パスワード
   お世話になります。ヒデアキです。

問題が出てきました。
参照範囲をかえた後、グラフの系列を
削除したいのですが、エラーが出てしまいます。

書いているものは以下です。
よろしくお願いします。

Sub Ch_Copy()
  Dim Lp As Single, Tp As Single
  Dim PltR As Range

  Sheets("MeasData").ChartObjects("グラフ 13").Duplicate _
  .Chart.Location xlLocationAsObject, "HistRead"
  With Sheets("HistRead")
   Lp = .Range("AK11").Left: Tp = .Range("AK11").Top
   Set PltR = .Range("C15:Q25")
   With .ChartObjects(.ChartObjects.Count)
     .Left = Lp: .Top = Tp

     .Chart.SetSourceData PltR
   

  ActiveChart.ChartArea.Select
  
  ActiveChart.SeriesCollection(2).Delete
  ActiveChart.SeriesCollection(2).Delete
  ActiveChart.SeriesCollection(3).Delete
  ActiveChart.SeriesCollection(3).Delete
  ActiveChart.SeriesCollection(4).Delete
  ActiveChart.SeriesCollection(4).Delete
  ActiveChart.SeriesCollection(5).Delete
  ActiveChart.SeriesCollection(5).Delete


  End With
   .Activate
  End With
 
    
   

【17776】Re:グラフコピー
回答  Kein  - 04/9/7(火) 16:07 -

引用なし
パスワード
   インデックスが付いているものは、削除・挿入とも逆順でやるのがセオリーです。
従って

For i = 5 To 2 Step -1
  ActiveChart.SeriesCollection(i).Delete
Next i

などとします。

【17781】Re:グラフコピー
質問  ヒデアキ  - 04/9/7(火) 17:06 -

引用なし
パスワード
   返信ありがとうございます。

このように書いてみたのですが、
SeriesクラスのDeleteメソッドが失敗しました、と
でてしまいます。
自分の書き方がおかしいからでしょうか?

すいませんよろしくお願い致します。

Sub Ch_Copy()
  Dim Lp As Single, Tp As Single
  Dim PltR As Range
  Dim i As Integer

  Sheets("MeasData").ChartObjects("グラフ 15").Duplicate _
  .Chart.Location xlLocationAsObject, "HistRead"
  With Sheets("HistRead")
   Lp = .Range("AW11").Left: Tp = .Range("AW11").Top
   Set PltR = .Range("T15:AF25")
   With .ChartObjects(.ChartObjects.Count)
     .Left = Lp: .Top = Tp

     .Chart.SetSourceData PltR
   
   ActiveChart.ChartArea.Select
 

    For i= 5 To 2 Step -1
      ActiveChart.SeriesCollection(i).Delete
    Next i
  
  End With
   .Activate
   End With


▼Kein さん:
>インデックスが付いているものは、削除・挿入とも逆順でやるのがセオリーです。
>従って
>
>For i = 5 To 2 Step -1
>  ActiveChart.SeriesCollection(i).Delete
>Next i
>
>などとします。

【17784】Re:グラフコピー
回答  Kein  - 04/9/7(火) 18:03 -

引用なし
パスワード
   With .ChartObjects(.ChartObjects.Count)
  .Left = Lp: .Top = Tp
  .Chart.SetSourceData PltR
 For i= 5 To 2 Step -1
   .Chart.SeriesCollection(i).Delete
  Next i
End With

で、どうでしょーか ?
それよりも、予めプロットする範囲だけを変数に入れた方が良いと思います。
>Set PltR = .Range("T15:AF25")
を、Union メソッドを使って

Set PltR = Union(.Range("T15:AF16"), .Range("T21:AF25"))

のように変更してみて下さい。そうすれば系列を削除しなくて済みます。

【17794】Re:グラフコピー
お礼  ヒデアキ  - 04/9/7(火) 22:25 -

引用なし
パスワード
   こんばんは!
いつもありがとうございます。
さっそくチャレンジしてみます。


▼Kein さん:
>With .ChartObjects(.ChartObjects.Count)
>  .Left = Lp: .Top = Tp
>  .Chart.SetSourceData PltR
>  For i= 5 To 2 Step -1
>   .Chart.SeriesCollection(i).Delete
>  Next i
>End With
>
>で、どうでしょーか ?
>それよりも、予めプロットする範囲だけを変数に入れた方が良いと思います。
>>Set PltR = .Range("T15:AF25")
>を、Union メソッドを使って
>
>Set PltR = Union(.Range("T15:AF16"), .Range("T21:AF25"))
>
>のように変更してみて下さい。そうすれば系列を削除しなくて済みます。

【17863】Re:グラフコピー
質問  ヒデアキ  - 04/9/8(水) 22:39 -

引用なし
パスワード
   お世話になります。

やはりこのマクロだと
.Chart.SeriesCollection(i).Delete でエラーが出てしまいます。

3列を一つのセルに結合したものからグラフの元データを
参照しているため余計なものまでグラフに反映されてしまいます。
やはり結合を解除したり、グラフを1列のものにしとほうがいいのでしょうか?

もう一つ質問なのですが、
Lp = .Range("AW11").Left: Tp = .Range("AW11").Topのグラフの
ポジション変更なんですが、たとえば変数 a を使って
a= Worksheets("MeasData").Cells(8, 77)として
Lp = .Range("AW11").Left: Tp = .Range("AW11").Topに使うこと
ってできますか?
一応書いてるマクロを記載します。

Sheets("MeasData").ChartObjects("グラフ 15").Duplicate _
  .Chart.Location xlLocationAsObject, "HistRead"
 
 With Sheets("HistRead")
   Lp = .Range("AW11").Left: Tp = .Range("AW11").Top
   Set PltR = .Range("T15:AF25")
 
  With .ChartObjects(.ChartObjects.Count)
    .Left = Lp: .Top = Tp
      .Chart.SetSourceData PltR
 For i= 5 To 2 Step -1
       .Chart.SeriesCollection(i).Delete
  Next i
    
    End With
    .Activate
   End With

【17865】Re:グラフコピー
回答  Kein  - 04/9/9(木) 1:41 -

引用なし
パスワード
   >エラーが出てしまいます
ならば先にレスしたように系列の削除は止めて、Unionメソッドで複数範囲を
まとめるコードでやってみて下さい。その場合も
>3列を一つのセルに結合
は、解除しておいた方がいいです。どんな処理にせよ、セル結合はマクロとの
相性が悪すぎるので、コーディングに慣れた人は結合を嫌います。
>たとえば変数 a を使って
>a= Worksheets("MeasData").Cells(8, 77)として
この変数は、何のために用意しようとしているのでしょーか ? それが分かった方が
回答しやすいかと思いますが、少なくとも a は Rangeオブジェクト型で宣言して
いるとみなせば、Set ステートメントを使わないといけません。即ち

With Sheets("HistRead")
  Set a = .Cells(8, 77)
  Lp = a.Left: Tp = a.Top

というように書くことになります。

【17903】Re:グラフコピー
質問  ヒデアキ  - 04/9/9(木) 22:17 -

引用なし
パスワード
   ありがとうございます。
ヒデアキです。

>ならば先にレスしたように系列の削除は止めて、Unionメソッドで複数範囲を
>まとめるコードでやってみて下さい。

すいません抜けてました。
説明のようにやってみたらうまくいきました。
セルの結合の方もしない型にしました。

>たとえば変数 a を使って
>a= Worksheets("MeasData").Cells(8, 77)として
>この変数は、何のために用意しようとしているのでしょーか ? それが分かった方が
>回答しやすいかと思いますが、

すいません説明不足でした。
データをいくつか取って履歴を残そうとしているので、
1つ目は10行目のところ。2つ目のデータは20行目のところ・・・と
したいのですが、このようにデータの番号によってコピーしたグラフを
順番に貼り付けることはできますか?

説明不足があって申し訳ありません。
よろしくお願いいたします。


▼Kein さん:
>>エラーが出てしまいます
>ならば先にレスしたように系列の削除は止めて、Unionメソッドで複数範囲を
>まとめるコードでやってみて下さい。その場合も
>>3列を一つのセルに結合
>は、解除しておいた方がいいです。どんな処理にせよ、セル結合はマクロとの
>相性が悪すぎるので、コーディングに慣れた人は結合を嫌います。
>>たとえば変数 a を使って
>>a= Worksheets("MeasData").Cells(8, 77)として
>この変数は、何のために用意しようとしているのでしょーか ? それが分かった方が
>回答しやすいかと思いますが、少なくとも a は Rangeオブジェクト型で宣言して
>いるとみなせば、Set ステートメントを使わないといけません。即ち
>
>With Sheets("HistRead")
>  Set a = .Cells(8, 77)
>  Lp = a.Left: Tp = a.Top
>
>というように書くことになります。

【17910】Re:グラフコピー
回答  Kein  - 04/9/10(金) 2:16 -

引用なし
パスワード
   >履歴を残そうとしている
の意味は分かりませんが
>1つ目は10行目のところ。2つ目のデータは20行目のところ
それなら・・

Sub Ch_Copy()
  Dim Lp As Single, Tp As Single
  Dim CCnt As Long
  Dim PltR As Range
 
  Sheets("MeasData").ChartObjects("グラフ 13").Duplicate _
  .Chart.Location xlLocationAsObject, "HistRead"
  With Sheets("HistRead")
   CCnt = .ChartObjects.Count
   Lp = .Columns(2).Left: Tp = .Cells(CCnt * 10, 2).Top
   Set PltR = Union(.Range("C2:E16"), .Range("H2:J16"))
   With .ChartObjects(CCnt)
     .Left = Lp: .Top = Tp
     .Chart.SetSourceData PltR
   End With
   .Activate
  End With
End Sub

などと「グラフの数 * 10」の行で Top 位置を決めたらどうでしょーか ?

【17954】Re:グラフコピー
お礼  ヒデアキ  - 04/9/10(金) 22:53 -

引用なし
パスワード
   Kein さん
ありがとうございます!
早速やってみますね。


▼Kein さん:
>>履歴を残そうとしている
>の意味は分かりませんが
>>1つ目は10行目のところ。2つ目のデータは20行目のところ
>それなら・・
>
>Sub Ch_Copy()
>  Dim Lp As Single, Tp As Single
>  Dim CCnt As Long
>  Dim PltR As Range
> 
>  Sheets("MeasData").ChartObjects("グラフ 13").Duplicate _
>  .Chart.Location xlLocationAsObject, "HistRead"
>  With Sheets("HistRead")
>   CCnt = .ChartObjects.Count
>   Lp = .Columns(2).Left: Tp = .Cells(CCnt * 10, 2).Top
>   Set PltR = Union(.Range("C2:E16"), .Range("H2:J16"))
>   With .ChartObjects(CCnt)
>     .Left = Lp: .Top = Tp
>     .Chart.SetSourceData PltR
>   End With
>   .Activate
>  End With
>End Sub
>
>などと「グラフの数 * 10」の行で Top 位置を決めたらどうでしょーか ?

【18251】Re:グラフコピー
質問  ヒデアキ  - 04/9/19(日) 18:05 -

引用なし
パスワード
   お久しぶりです。ヒデアキです。
PCが故障中で作業ができませんでした。

Keinさんへ

Set PltR = Union(.Range("C2:E16"), .Range("H2:J16"))
ここで質問ですが、グラフの参照範囲もグラフの位置の変更と同様に
1つ目のデータ範囲は10行目から15行目まで。2つ目のデータ範囲は20行目から25行目までのところというふうにできませんか?

ご返信よろしくお願いいたします


>>履歴を残そうとしている
>の意味は分かりませんが
>>1つ目は10行目のところ。2つ目のデータは20行目のところ
>それなら・・
>
>Sub Ch_Copy()
>  Dim Lp As Single, Tp As Single
>  Dim CCnt As Long
>  Dim PltR As Range
> 
>  Sheets("MeasData").ChartObjects("グラフ 13").Duplicate _
>  .Chart.Location xlLocationAsObject, "HistRead"
>  With Sheets("HistRead")
>   CCnt = .ChartObjects.Count
>   Lp = .Columns(2).Left: Tp = .Cells(CCnt * 10, 2).Top
>   Set PltR = Union(.Range("C2:E16"), .Range("H2:J16"))
>   With .ChartObjects(CCnt)
>     .Left = Lp: .Top = Tp
>     .Chart.SetSourceData PltR
>   End With
>   .Activate
>  End With
>End Sub
>
>などと「グラフの数 * 10」の行で Top 位置を決めたらどうでしょーか

【18255】Re:グラフコピー
回答  Kein  - 04/9/19(日) 19:41 -

引用なし
パスワード
   高さの設定だけでよいのですね ?

Sub Ch_Copy()
  Dim Lp As Single, Tp As Single, Hp As Single
  Dim CCnt As Long
  Dim PltR As Range
 
  Sheets("MeasData").ChartObjects("グラフ 13").Duplicate _
  .Chart.Location xlLocationAsObject, "HistRead"
  With Sheets("HistRead")
   CCnt = .ChartObjects.Count
   With .Cells(CCnt * 10, 2)
     Lp = .Left: Tp = .Top: Hp = .Resize(5).Height
   End With
   Set PltR = Union(.Range("C2:E16"), .Range("H2:J16"))
   With .ChartObjects(CCnt)
     .Left = Lp: .Top = Tp: .Height = Hp
     .Chart.SetSourceData PltR
   End With
   .Activate
  End With
End Sub

幅も設定するなら Wp = .Resize(, ?).Width を追加し、With .ChartObjects(CCnt)
のブロック内で .Width = Wp とします。 "?" は任意の列数。変数 Wp の宣言も
追加を忘れずに。

【18286】Re:グラフコピー
質問  ヒデアキ  - 04/9/20(月) 13:51 -

引用なし
パスワード
   お世話になります。ヒデアキです。

申し訳ありません。質問の仕方が悪かったです。

>CCnt = .ChartObjects.Count
>   With .Cells(CCnt * 10, 2)
このようにグラフの場所を変えたように、
グラフの元データの参照範囲も変えたいのですが、
Rangeだとうまくいきません。

アドバイスよろしくお願致します。


▼Kein さん:
>高さの設定だけでよいのですね ?
>
>Sub Ch_Copy()
>  Dim Lp As Single, Tp As Single, Hp As Single
>  Dim CCnt As Long
>  Dim PltR As Range
> 
>  Sheets("MeasData").ChartObjects("グラフ 13").Duplicate _
>  .Chart.Location xlLocationAsObject, "HistRead"
>  With Sheets("HistRead")
>   CCnt = .ChartObjects.Count
>   With .Cells(CCnt * 10, 2)
>     Lp = .Left: Tp = .Top: Hp = .Resize(5).Height
>   End With
>   Set PltR = Union(.Range("C2:E16"), .Range("H2:J16"))
>   With .ChartObjects(CCnt)
>     .Left = Lp: .Top = Tp: .Height = Hp
>     .Chart.SetSourceData PltR
>   End With
>   .Activate
>  End With
>End Sub
>
>幅も設定するなら Wp = .Resize(, ?).Width を追加し、With .ChartObjects(CCnt)
>のブロック内で .Width = Wp とします。 "?" は任意の列数。変数 Wp の宣言も
>追加を忘れずに。

【18294】Re:グラフコピー
回答  Kein  - 04/9/20(月) 22:21 -

引用なし
パスワード
   >グラフの元データの参照範囲も変えたい
最初のグラフはどこ、次のグラフはどこ、と何行・何列おきになるかも含めて
具体的にセル範囲を書いて下さい。

【18329】Re:グラフコピー
発言  ヒデアキ  - 04/9/21(火) 16:17 -

引用なし
パスワード
   レスありがとうございます。
いつもすいません。

最初は"BI12"から"BM22"の範囲を参照。
次は12列目の"BI34"から"BM44"のデータ範囲を参照しています。
行間隔は11行です。
列は変わりません。
この間隔で下の行に続いていきます。

よろしくお願いします。


▼Kein さん:
>>グラフの元データの参照範囲も変えたい
>最初のグラフはどこ、次のグラフはどこ、と何行・何列おきになるかも含めて
>具体的にセル範囲を書いて下さい。

【18333】Re:グラフコピー
回答  Kein  - 04/9/21(火) 16:40 -

引用なし
パスワード
   >最初は"BI12"から"BM22"の範囲を参照。
>次は12列目の"BI34"から"BM44"のデータ範囲
"項目軸の範囲も含めて" ですか ?

Sub Ch_Copy()
  Dim Lp As Single, Tp As Single, Hp As Single
  Dim CCnt As Long, TopR As Long
  Dim PltR As Range
 
  Sheets("MeasData").ChartObjects("グラフ 13").Duplicate _
  .Chart.Location xlLocationAsObject, "HistRead"
  With Sheets("HistRead")
   CCnt = .ChartObjects.Count
   With .Cells(CCnt * 10, 2)
     Lp = .Left: Tp = .Top: Hp = .Resize(5).Height
   End With
   If CCnt = 1 Then
     TopR = 12
   Else
     TopR = (CCnt - 1) * 22 + 12
   End If
   Set PltR = .Range("BI" & TopR).Resize(11, 5)
   With .ChartObjects(CCnt)
     .Left = Lp: .Top = Tp: .Height = Hp
     .Chart.SetSourceData PltR
   End With
   .Activate
  End With
End Sub

単純な算数の問題だから、項目軸範囲が別であっても、応用して自分で改造して
みて下さい。Unionメソッドで連結する書き方は、既に回答していますから、
出来るはずです。

【18429】Re:グラフコピー
お礼  ヒデアキ  - 04/9/23(木) 17:49 -

引用なし
パスワード
   ありがとうございます。
さっそくチャレンジしてみます。
お礼の返信遅くなって申し訳ありません。


▼Kein さん:
>>最初は"BI12"から"BM22"の範囲を参照。
>>次は12列目の"BI34"から"BM44"のデータ範囲
>"項目軸の範囲も含めて" ですか ?
>
>Sub Ch_Copy()
>  Dim Lp As Single, Tp As Single, Hp As Single
>  Dim CCnt As Long, TopR As Long
>  Dim PltR As Range
> 
>  Sheets("MeasData").ChartObjects("グラフ 13").Duplicate _
>  .Chart.Location xlLocationAsObject, "HistRead"
>  With Sheets("HistRead")
>   CCnt = .ChartObjects.Count
>   With .Cells(CCnt * 10, 2)
>     Lp = .Left: Tp = .Top: Hp = .Resize(5).Height
>   End With
>   If CCnt = 1 Then
>     TopR = 12
>   Else
>     TopR = (CCnt - 1) * 22 + 12
>   End If
>   Set PltR = .Range("BI" & TopR).Resize(11, 5)
>   With .ChartObjects(CCnt)
>     .Left = Lp: .Top = Tp: .Height = Hp
>     .Chart.SetSourceData PltR
>   End With
>   .Activate
>  End With
>End Sub
>
>単純な算数の問題だから、項目軸範囲が別であっても、応用して自分で改造して
>みて下さい。Unionメソッドで連結する書き方は、既に回答していますから、
>出来るはずです。

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