Excel VBA質問箱 IV

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

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


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

【21029】セルの値をグラフにするには ponpon 05/1/7(金) 23:38 質問[未読]
【21031】Re:セルの値をグラフにするには ponpon 05/1/8(土) 11:06 発言[未読]
【21033】Re:セルの値をグラフにするには ponpon 05/1/8(土) 13:11 発言[未読]
【21034】Re:セルの値をグラフにするには ponpon 05/1/8(土) 14:16 質問[未読]
【21056】Re:セルの値をグラフにするには よろずや 05/1/9(日) 8:04 回答[未読]
【21058】Re:セルの値をグラフにするには ponpon 05/1/9(日) 12:24 質問[未読]
【21059】Re:セルの値をグラフにするには ponpon 05/1/9(日) 12:53 質問[未読]

【21029】セルの値をグラフにするには
質問  ponpon E-MAIL  - 05/1/7(金) 23:38 -

引用なし
パスワード
   明けましておめでとうございます。ponponです。
いつもお世話になってます。
 今回は、個人の成績をグラフ化することに挑戦しています。
マクロの記録等を使って一応完成しましたが、

sheet1は、
   A   B   C   D   E   F  
1 二学期の成績
2 氏名 国語 算数 社会 理科 総合
3 あ 67.7 78.8 81.5 65.5 67.8
4 氏名 国語 算数 社会 理科 総合 
5 い 87.2 88.8 77.9 71.5 67.4  
6 氏名 国語 算数 社会 理科 総合
7 う 77.9 71.5 67.7 78.8 77.9




のようになっています。

これを、
   A   B   C   D   E   F  
1 二学期の成績
2 氏名 国語 算数 社会 理科 総合
3 あ 67.7 78.8 81.5 65.5 67.8
4 い 87.2 88.8 77.9 71.5 67.4  
5 う 77.9 71.5 67.7 78.8 77.9



のように入力しても、グラフができるように作りたいのですが・・いろいろと調べてみたのですがrangeの指定の仕方が分かりません。どなたか教えていただけないでしょうか?
また、グラフがたて一列に並びます。これを縦4列や5列にすることはできないものでしょうか?よろしくお願いします。

以下、コードです。
Sub 参照元の設定()
 Dim i As Integer
 Dim t As Integer
 Dim m As Long
 m = Range("A65536").End(xlUp).Row
 t = 0
 For i = 2 To m Step 2
  With Worksheets("sheet1").ChartObjects.Add(Left:=400, Top:=t + 9, _ Width:=240, Height:=200).Chart
   .SetSourceData Source:=Range(Cells(i, 1), Cells(i + 1, 6)) _
,PlotBy:=xlRows
   .ChartType = xlRadarFilled
   With .Axes(xlValue)
    .MinimumScale = 0
    .MaximumScale = 100
    .MinorUnit = 5
    .MajorUnit = 20
    .Crosses = xlAutomatic
    .ScaleType = xlLinear
    .DisplayUnit = xlNone
   End With
 End With
 t = t + 200
 Next
End Sub

【21031】Re:セルの値をグラフにするには
発言  ponpon E-MAIL  - 05/1/8(土) 11:06 -

引用なし
パスワード
   おはようございます。ponponです。
sheetの表題を一番はじめにする方法は、
unionを使ってうまく処理することができました。
 しかし、グラフを4列五列にする方法が分かりません。
 .Add(Left:=400, Top:=t + 9・・・
     ↑       ↑
  ここに変数を使えばよいということは分かるのですが、ここから先が
 うまい方法が見つかりません。

  Left:=400+P P=Width:=240ずつ4回行ったら、Width:=240*4左に戻して
  Top:=t + 9だけずらして、またLeft:=400+Pを4回、Width:=240*4左に戻して
  また、Top:=t + 9ずらして・・・・となり、データがなくなったところで終了    for nextでできそうな気がするのですが・・・
 もう少し考えてみます。 

>以下、コードです。
Sub 参照元の設定()
 Dim i As Integer
 Dim t As Integer
 Dim m As Long
 m = Range("A65536").End(xlUp).Row
 t = 0
 For i = 2 To m Step 2
  With ActiveSheet.ChartObjects.Add(Left:=400, Top:=t + 9, _ Width:=240, Height:=200).Chart
   .SetSourceData Source:=Union(Range(Cells(2, 1), Cells(2, 6)), _
  Range(Cells(i, 1), Cells(i, 6))), PlotBy:=xlRows
,PlotBy:=xlRows
   .ChartType = xlRadarFilled
   With .Axes(xlValue)
    .MinimumScale = 0
    .MaximumScale = 100
    .MinorUnit = 5
    .MajorUnit = 20
    .Crosses = xlAutomatic
    .ScaleType = xlLinear
    .DisplayUnit = xlNone
   End With
 End With
 t = t + 200
 Next
End Sub

Sub グラフの削除()
  Dim CH As ChartObject
  
  Set allCH = ActiveSheet.ChartObjects
 For Each CH In allCH
    CH.Delete
 Next

End Sub

【21033】Re:セルの値をグラフにするには
発言  ponpon E-MAIL  - 05/1/8(土) 13:11 -

引用なし
パスワード
   こんにちは。ponponです。
> しかし、グラフを4列五列にする方法が分かりません。
> .Add(Left:=400, Top:=t + 9・・・
>     ↑       
  .Add(Left:=400 + ((i - 3) Mod 4) * 200
  これで、0,1,2,3,0,1,2,3,……の繰り返しにすることができました。
 後は、Top:=t + 9の部分なのですが、
 tの値が、0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0……と変化するように
 なれば、うまくいくはずなんですが・・思いつきません。残念。。。
 別な角度から考えた方がいいのかな? 配列???
  
> もう少し考えてみます。

【21034】Re:セルの値をグラフにするには
質問  ponpon E-MAIL  - 05/1/8(土) 14:16 -

引用なし
パスワード
    こんにちは。ponponです。
> .Add(Left:=400, Top:=t + 9・・・
>     ↑       
>  .Add(Left:=400 + ((i - 3) Mod 4) * 200
>  これで、0,1,2,3,0,1,2,3,……の繰り返しにすることができました。
> 後は、Top:=t + 9の部分なのですが、
> tの値が、0,0,0,0,1,0,0,0,2,0,0,0,3,0,0,0……と変化するように
        ↑
  間違いでした。0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0……となるようにです。

> なれば、うまくいくはずなんですが・・思いつきません。残念。。。
> 別な角度から考えた方がいいのかな? 配列???
                    ↑
これでやってみました。
一応できたのですが、スマートではありませんというかもっと他によい方法がありそうな気がするのですが……

以下コードです。

Sub 参照元の設定()
 Dim i As Integer
 Dim t As Integer
 Dim m As Long
 Dim myArray As Variant
 
 myArray = Array(0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, _
  0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
 m = Range("A65536").End(xlUp).Row
 t = 0
 For i = 3 To m
  With ActiveSheet.ChartObjects.Add(Left:=400 + ((i - 3) Mod 4) * 200, _   Top:=t + 9, Width:=200, Height:=200).Chart
   .SetSourceData Source:=Union(Range(Cells(2, 1), Cells(2, 6)), _
     Range(Cells(i, 1), Cells(i, 6))), PlotBy:=xlRows
   .ChartType = xlRadarFilled
   .SeriesCollection(1).Interior.ColorIndex = 4
   .HasLegend = False
  
  
   With .PlotArea
    .Interior.ColorIndex = 35
    .Left = 35
    .Top = 40
    .Width = 130
    .Height = 130
   End With
  
   With .Axes(xlValue)
    .MinimumScale = 0
    .MaximumScale = 100
    .MinorUnit = 5
    .MajorUnit = 20
    .Crosses = xlAutomatic
    .ScaleType = xlLinear
    .DisplayUnit = xlNone
   End With
 
 End With
 t = t + 200 * myArray(i - 3)
 Next
End Sub


Sub グラフの削除()
  Dim CH As ChartObject
  
  Set allCH = ActiveSheet.ChartObjects
 For Each CH In allCH
    CH.Delete
 Next

End Sub

【21056】Re:セルの値をグラフにするには
回答  よろずや  - 05/1/9(日) 8:04 -

引用なし
パスワード
   >  間違いでした。0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0……となるようにです。
((i - 3) Mod 4) * 200
と同じように考えればいいだけのことです。
っていうか、もう解決してるんだろうな。

【21058】Re:セルの値をグラフにするには
質問  ponpon E-MAIL  - 05/1/9(日) 12:24 -

引用なし
パスワード
   ▼よろずや さん:
レスありがとうございます。
 なかなかレスがつかないので、いろいろと考えているうちに
何となくできてしまいました。

>っていうか、もう解決してるんだろうな。
       ↑
 いえいえまだ解決していません。配列を使ったままです。

>((i - 3) Mod 4) * 200
と同じように考える????
  t = t + (i - 3)\4*200
  これで考えると、0,0,0,0,1,1,1,1,2,2,2,2,……
  と変化するし、行き詰まっています。
 今は、誰かが教えてくれることを信じて、他の仕様を考えて作っているところです。
 よろしくお願いします。

【21059】Re:セルの値をグラフにするには
質問  ponpon E-MAIL  - 05/1/9(日) 12:53 -

引用なし
パスワード
   ▼よろずや さん:
>  t = t + (i - 3)\4*200
    ↑
  t = (i - 3)\4*200

tを取り除いて、
 For i = 3 To m  の次に入れました。
 こうすると、tが、0,0,0,0,200,200,200,200,400,400,400,400,……
 変化していき、うまくいきました。
 ありがとうございました。
 
 そこで改めて質問ですが、基本的に先生たちに使ってもらうように考えているために、
 エラー対策はほとんどしていません。
 
 このような時には、どのようなエラー対策が考えられるのでしょうか?
 自分で作って自分で実行すると、なかなか思い浮かびません。
 よろしくお願いします。

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