Excel VBA質問箱 IV

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

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


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

【58767】グラフのデータ範囲 基礎勉強中 08/11/8(土) 1:15 質問[未読]
【58768】Re:グラフのデータ範囲 りん 08/11/8(土) 9:27 回答[未読]
【58769】Re:グラフのデータ範囲 ponpon 08/11/8(土) 9:31 発言[未読]
【58770】Re:グラフのデータ範囲 kanabun 08/11/8(土) 9:46 発言[未読]
【58772】Re:グラフのデータ範囲 基礎勉強中 08/11/8(土) 20:10 お礼[未読]

【58767】グラフのデータ範囲
質問  基礎勉強中  - 08/11/8(土) 1:15 -

引用なし
パスワード
   こんばんは。
グラフのデータ範囲指定を汎用性を持たせたいと思い、マクロ中でコメントアウトしてある部分をFor文で処理したいのですが、コンパイルエラーが出ます。どうかアドバイスをお願いします。
・データ範囲はB2:D20→E2:G20→H2:J20→K2:M20。(step2? step3?)


Sub Macro2()
'
' Macro2 Macro
'

'
Dim i As Long
Dim j As Long


i = 0

For i = 2 To 13 Step 2
  Range(Cells(A2, A20), Cells((0 + i), 2), ((2 + i)), 20)).Select  →ここでコンパイルエラー
  Range("B2").Activate
  ActiveSheet.Shapes.AddChart.Select
  ActiveChart.SetSourceData Source:=Range("Sheet1!$A$2:$A$20,Sheet1!$B$2:$D$20" _
    )
  ActiveChart.ChartType = xlLineMarkers
'  Range("A2:A20,B2:D20").Select
'  Range("E2").Activate
'  ActiveSheet.Shapes.AddChart.Select
'  ActiveChart.SetSourceData Source:=Range("Sheet1!$A$2:$A$20,Sheet1!$B$2:$D$20" _
'    )
'  Range("A2:A20,E2:G20").Select
'  Range("E2").Activate
'  ActiveSheet.Shapes.AddChart.Select
'  ActiveChart.SetSourceData Source:=Range("Sheet1!$A$2:$A$20,Sheet1!$E$2:$G$20" _
'    )
'  ActiveChart.ChartType = xlLineMarkers
'  Range("A2:A20,H2:J20").Select
'  Range("H2").Activate
'  ActiveSheet.Shapes.AddChart.Select
'  ActiveChart.SetSourceData Source:=Range("Sheet1!$A$2:$A$20,Sheet1!$H$2:$J$20" _
'    )
'  ActiveChart.ChartType = xlLineMarkers
'  Range("A2:A20,K2:M20").Select
'  Range("K2").Activate
'  ActiveSheet.Shapes.AddChart.Select
'  ActiveChart.SetSourceData Source:=Range("Sheet1!$A$2:$A$20,Sheet1!$K$2:$M$20" _
'    )
'  ActiveChart.ChartType = xlLineMarkers
Next i
End Sub

【58768】Re:グラフのデータ範囲
回答  りん E-MAIL  - 08/11/8(土) 9:27 -

引用なし
パスワード
   基礎勉強中 さん、おはようございます。

Rangeに関する部分だけ。
>コンパイルエラーが出ます。どうかアドバイスをお願いします。

>  Range(Cells(A2, A20), Cells((0 + i), 2), ((2 + i)), 20)).Select  →ここでコンパイルエラー
CellsやRangeの引数の数があっていませんね。

また、Cellsの引数はCells(行,列)です。

離れた範囲を選択したい場合は、
Application.Union(一つめの範囲,二つ目の範囲,・・・)を使用します。

Application.Union(Range("A2:A20"), Range(Cells(2, i), Cells(20, i + 2))).Select

Application.Union(Range(Cells(2, 1), Cells(20, 1)), Range(Cells(2, i), Cells(20, i + 2))).Select

Application.Union(Range(Cells(2, "A"), Cells(20, "A")), Range(Cells(2, i), Cells(20, i + 2))).Select

こんな感じです。
CellsやUnionの詳細はヘルプで見てくださいね。

【58769】Re:グラフのデータ範囲
発言  ponpon  - 08/11/8(土) 9:31 -

引用なし
パスワード
   ▼基礎勉強中 さん:

>  Range(Cells(A2, A20), Cells((0 + i), 2), ((2 + i)), 20)).Select  →ここでコンパイルエラー

よく見てませんが、
Cellsの使い方が間違っていると思います。
  Cells(行、列)です。

>Cells(A2, A20)
>Cells((0 + i), 2), ((2 + i)), 20))

こんな使い方はないと思います。

CellsとRangeがごっちゃになっているのでは?

【58770】Re:グラフのデータ範囲
発言  kanabun  - 08/11/8(土) 9:46 -

引用なし
パスワード
   ▼基礎勉強中 さん:

>・データ範囲はB2:D20→E2:G20→H2:J20→K2:M20。(step2? step3?)

データ範囲 [B2:D20] は 先頭セルと縦横サイズであらわすと、
     Range("B2").Resize(19,3)
ということですね。
     Cells(2,2).Resize(19,3)
という表現でもいいですね。

↓こういう風に整理してみると、変化する部分が 列位置だけということが
 分かります。

'1番目のグラフ 範囲 B2:D20 先頭セル Cells(2,2)  大きさ 19行×3列
'2番目のグラフ 範囲 E2:G20 先頭セル Cells(2,5)  大きさ 19行×3列
'3番目のグラフ 範囲 H2:J20 先頭セル Cells(2,8)  大きさ 19行×3列
'4番目のグラフ 範囲 K2:M20 先頭セル Cells(2,11) 大きさ 19行×3列

変化するのは 列位置(最初は 2列目、以後 +3列づつ右方向にシフト)なので
これを単純に変数で 変化させれば(+3)いいと思います。

↓サンプルです(Shapes.AddChart というメソッドがなかったので、
       ChartObjects.Add で埋め込みグラフを作成しています)

Sub Try1()
  Dim n As Long, nCol As Long
  Dim rngX As Range
  Dim rngY As Range
  Dim Pos As Range
  
  With ActiveSheet
    Set rngX = .Range("A2:A20")
    Set Pos = .Range("B22").Resize(13, 10) '埋め込みグラフの位置
    nCol = 2      '◆最初の列位置
    For n = 1 To 3
      Set rngY = .Cells(2, nCol).Resize(19, 3)
      With .ChartObjects.Add(Pos.Left, Pos.Top, Pos.Width, Pos.Height).Chart
        .SetSourceData Source:=Union(rngX, rngY)
        .ChartType = xlLineMarkers
      End With
      nCol = nCol + 3 '◆次の列位置
      Set Pos = Pos.Offset(14) '次のグラフ位置
    Next
  End With
  
End Sub

【58772】Re:グラフのデータ範囲
お礼  基礎勉強中  - 08/11/8(土) 20:10 -

引用なし
パスワード
   りんさん、ponponさん、kanabunさん
ありがとうございました。
Cells,Range,Unionについて大変勉強になりました。

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