- ベストアンサー
VBAでグラフ作成!初心者でも簡単に点数の偏差値を視覚化できる方法
- VBA初心者でも簡単にグラフを作成し、点数の偏差値を視覚化する方法を教えます。
- 40名の点数と偏差値が計算されたデータに基づいて、点数や偏差値に応じたグラフを作成することが可能です。
- また、点数入力画面を設ければ、自分の点数に応じた場所に○をプロットすることもできます。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#4です。たびたび済みません。 正規化標準偏差という表現は正しくありませんでした。 正規化した値というべきでしょう。計算方法は#1さんが回答されています。 下記で復習させていただきました。 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1422230404 コードの方ですが、最後にワークシートに移すとサイズ調整が面倒なので、最初にワークシートに移してからサイズを設定するには下記の様に変更すれば良いです。これに伴い、データラベルの移動値などを微調整する必要が出てきます。(変数を増やしているので宣言も必要になります) Set sh = ThisWorkbook.Worksheets(2) 'グラフの作成(データ系列は後で設定) chartObjCount = sh.ChartObjects.Count Set myChart = Charts.Add myChart.Location Where:=xlLocationAsObject, Name:=sh.Name With sh.ChartObjects(chartObjCount + 1) Set myChart = .Chart .Width = 400 .Height = 250 End With myChart.ChartType = xlXYScatter
その他の回答 (4)
- mitarashi
- ベストアンサー率59% (574/965)
#2,#3です。乗りかかった船でVBA化してしまいました。正統的なグラフ作成コードではないと思いますが、ご参考まで。xl2010で試しています。マーカーの色を変える部分は2003等では動かないと思いますが、長くなってしまいますので(言い訳)、#2のリンク先をご参考に修正願います。 'グラフのサイズをデフォルトでやっているので、データラベル位置の再現性のためには指定すべきですが手抜きです。 Sub test() Dim sh As Worksheet Dim myChart As Chart Dim xValueRng1 As Range, xValueRng2 As Range, yValueRng As Range Dim i As Long Set sh = ThisWorkbook.Worksheets(2) Set myChart = Charts.Add myChart.ChartType = xlXYScatter With sh Set xValueRng1 = Range(.Range("D4"), .Range("D" & .Rows.Count).End(xlUp)) Set xValueRng2 = Range(.Range("E4"), .Range("E" & .Rows.Count).End(xlUp)) Set yValueRng = Range(.Range("C4"), .Range("C" & .Rows.Count).End(xlUp)) End With With myChart .SeriesCollection.NewSeries .SeriesCollection(1).XValues = xValueRng1 .SeriesCollection(1).Values = yValueRng .SeriesCollection(1).Name = xValueRng1.Cells(0) .SeriesCollection.NewSeries .SeriesCollection(2).XValues = xValueRng2 .SeriesCollection(2).Values = yValueRng .SeriesCollection(2).Name = xValueRng2.Cells(0) .SeriesCollection(2).MarkerStyle = -4142 .HasLegend = False 'データラベル移動の余地を準備 .PlotArea.Width = .PlotArea.Width - 40 .PlotArea.Left = .PlotArea.Left + 40 End With With myChart.Axes(xlCategory) .MinimumScale = -3 .MaximumScale = 3 .MajorUnit = 1 .HasMinorGridlines = True .MinorUnit = 1 .TickLabelPosition = xlHigh .TickLabels.NumberFormatLocal = "0""σ""" End With With myChart.Axes(xlValue) .MinimumScale = 1 .MaximumScale = xValueRng2.Cells.Count .MajorUnit = 1 .HasMinorGridlines = True .MinorUnit = 1 .TickLabelPosition = xlLow .TickLabels.NumberFormatLocal = """""" End With 'データラベルの位置の調整は微調整が必要かも For i = 1 To yValueRng.Rows.Count With myChart.SeriesCollection(2).Points(i) myChart.SeriesCollection(1).Points(i).Format.Fill.ForeColor.RGB = yValueRng.Cells(i).Offset(0, -1).Interior.Color .HasDataLabel = True .DataLabel.Left = .DataLabel.Left - 60 .DataLabel.Text = yValueRng.Cells(i).Offset(0, -1).Value End With Next i myChart.Location Where:=xlLocationAsObject, Name:=sh.Name End Sub
- mitarashi
- ベストアンサー率59% (574/965)
- mitarashi
- ベストアンサー率59% (574/965)
暇に飽かせてやってみました。 VBAは一切使用せず、グラフの機能と根気だけでやっております。 理解の助けになる様に、添付図はあえて途中段階で止めてあります。 要するに、データラベル表示用の系列を1個加えて、点毎にデータラベルを変更し、位置をY軸の左に移動しています。ラベル表示用の系列のマーカーは当然非表示にします。 本来のY軸の数字は、書式を""にする事で非表示にしています。 散布図の点の色も人力でコツコツと変更しています。 VBAで楽にやりたければ、下記#3、#4がご参考になるかもしれません。 http://okwave.jp/qa/q7524408.html 以上ご参考まで。
図の向きがどうしても横になりますが、手動で出来ました。 もとのdataから平均値を差し引き、それを標準偏差で割った値を散布図にプロットすればよいわけです。 VBAでもできると思います。
お礼
回答ありがとうございます。 散布図にプロットすればうまい具合に出来上がるのですね。 VBAでも試してみたいと思います。 回答ありがとうございました!
お礼
連投での回答ありがとうございます。 説明とプログラムつきでとてもわかりやすかったです! #1さんとあわせて、VBAへ取り組まさせていただきます! また、質問することがあたらよろしくお願いします。 回答ありがとうございました。