VBAでグラフ作成!初心者でも簡単に点数の偏差値を視覚化できる方法

このQ&Aのポイント
  • VBA初心者でも簡単にグラフを作成し、点数の偏差値を視覚化する方法を教えます。
  • 40名の点数と偏差値が計算されたデータに基づいて、点数や偏差値に応じたグラフを作成することが可能です。
  • また、点数入力画面を設ければ、自分の点数に応じた場所に○をプロットすることもできます。
回答を見る
  • ベストアンサー

VBAでグラフをつくろうと思っています

VBA初心者です。今回VBAでグラフを作ろうと思っています。皆様力をお貸しください。 今回作ろうと思っているのは自分の点数がクラスの中でどの位置(偏差値はどの程度か)にいるのか、視覚的に把握するようなものです。イメージ図を添付しておきます。 ○の部分が自分の所属しているところで、σが標準偏差になります。 仮に40名の点数と偏差値が計算してあるとして、図のような点数や偏差値に対応したグラフを作成することは可能でしょうか? また、点数を入力する画面を設けた場合(これはできました)、自分の点数を入力すればその点数に応じた場所に○をプロットすることはできますでしょうか? 回答よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.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

HAMAregion
質問者

お礼

連投での回答ありがとうございます。 説明とプログラムつきでとてもわかりやすかったです! #1さんとあわせて、VBAへ取り組まさせていただきます! また、質問することがあたらよろしくお願いします。 回答ありがとうございました。

その他の回答 (4)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.4

#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)
回答No.3

#2です。 B列の科目名とグラフのプロットが食い違っていたので修正しました。失礼いたしました。 目盛り数字を消す書式設定は、セル側でなく、グラフ側で行う方が良いので変更しました。 今度は完成形の図を添付いたしました。

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

暇に飽かせてやってみました。 VBAは一切使用せず、グラフの機能と根気だけでやっております。 理解の助けになる様に、添付図はあえて途中段階で止めてあります。 要するに、データラベル表示用の系列を1個加えて、点毎にデータラベルを変更し、位置をY軸の左に移動しています。ラベル表示用の系列のマーカーは当然非表示にします。 本来のY軸の数字は、書式を""にする事で非表示にしています。 散布図の点の色も人力でコツコツと変更しています。 VBAで楽にやりたければ、下記#3、#4がご参考になるかもしれません。 http://okwave.jp/qa/q7524408.html 以上ご参考まで。

noname#192382
noname#192382
回答No.1

図の向きがどうしても横になりますが、手動で出来ました。 もとのdataから平均値を差し引き、それを標準偏差で割った値を散布図にプロットすればよいわけです。 VBAでもできると思います。

HAMAregion
質問者

お礼

回答ありがとうございます。 散布図にプロットすればうまい具合に出来上がるのですね。 VBAでも試してみたいと思います。 回答ありがとうございました!

関連するQ&A

  • パワーポイントへのグラフの挿入

    スライドにグラフを挿入しているのですが、標準偏差の入力の仕方がわかりません。グラフは折れ線グラフです。それぞれの点ごとに一定の標準偏差は取れるのですが、それぞれの点ごとに標準偏差の値が違う場合の入力の仕方がわかりません。エクセルで作ったグラフをそのまま貼り付ければ標準偏差も問題ないのですが、グラフはパワーポイントのものを使用して作りたいです。標準偏差はそれぞれの点で計算済みです。入力の方法を知っている方がいましたら教えてください。

  • エクセル2013でのグラフ作成について

    至急教えていただきたいです。 エクセル2013でグラフを作成しており、散布図に標準偏差を付け加えたものです。 仮にですが添付画像のような図になり、一学期の成績と二学期の成績でグラフを重ねて作成しています。 このとき、横軸の教科名が数字で表示されてしまいます。 グラフの上で右クリック→データの選択→横(項目)軸ラベル→編集と進もうとしますが、最後の編集ボタンが押せません。 どのようにすれば横軸の教科名を入力することができるのでしょうか。 分かりにくい文章で申し訳ありませんが、よろしくお願いいたします。

  • エクセルのグラフ作成について教えて下さい

    エクセルで下記のようなグラフを作成したいのですが、良い方法が思い当たりません。 どなたかご教授いただけませんか? 【作成したいグラフの内容】 ・縦軸 :体重 ・横軸 :妊娠週数(18週0日~42週まで) ・グラフ :グラフの初期表示として妊娠週数の標準体重となるグラフ上に、       各妊娠週数で測定した実測値をプロットしていき、       標準体重の範囲から外れていないかを確認する 【対応出来ていない点】 ・入力としては「18週3日」など1週のうちに何度か入力出来るようにしたい  (標準の体重データは「18週」「19週」毎のデータなので、実測値で「18週3日」目のデータと入力したときに18週と19週目の間にプロットされるようにしたい。) 18週~42週の標準体重のグラフ上に自由に「○週△日」は「□kg」でプロット出来るように作成したいのでが、 横軸の対応として、標準体重は「週」毎、実測値は「1日」単位で入力出来るようにしたいと考えています。 しかし、入力欄としては毎日の入力欄を作成すると縦長のグラフになってしまうので、 入力欄を少なく出来るようなグラフを作成出来たらと考えております。 どなたかご教授頂けないでしょうか?

  • よいグラフソフトを探しています。

    グラフソフトを探しています。 数値解析ではなく、図の作成用です。 たとえば、レポートにJPGファイルとして貼り付けるとか、 プレゼンでPowerPointに貼り付けるとか。 EXCELはややこしく、特に、作った図の大きさを指定するのが難しく、 たとえば、二つのグラフを大きさ指定で並べたい時に、いつも困っています。 あと、直リンさせないで、画像として張り込む方が便利なので。 主に折れ線グラフや散布図で、分析機器の出力データなので点数は非常に多いです。 あと、一つの枠内に、複数のデータをプロットできるもの。 何か、オススメがありましたら教えてください。 市販品でもフリー、シェアウェアでもかまいません。

  • VBAによるリアルタイムグラフ作成

    あらかじめ作成されている散布図のグラフにデータを追加しプロットしていきたいと思い、決められたセルに入力されたデータをVBAでグラフにプロットするところまでは何とか作れました。 追加するデータをセルに入力すると自動的に散布図にプロットする方法についてご教示頂けないでしょうか。 ◯データを入力するセル '   A列 B列 C列 '3行  p1 0.5 1.0 '4行  g1 0.8 0.7 '5行 '6行 ・ ・ ・ A列は、系列名でデータラベルとして使用 B列は、横軸 C列は、縦軸 ◯あらかじめ作っている散布図には、閾値を事前に7つのデータ系列をつかってプロットしていますので、追加されたデータのインデックスは8からになります。 ◯追加するデータ数は未知数 ◯可能でしたら、セルに入力されたデータを消すとき、グラフのデータ系列も一緒に消える よろしくお願いします。 Sub グラフ描画() '   A列 B列 C列 '3行  p1 0.5 1.0 '4行  g1 0.8 0.7 '5行 '6行 Dim chartObj As ChartObject Set chartObj = ActiveSheet.ChartObjects(1) With chartObj.Chart ' データセット .SeriesCollection.NewSeries .FullSeriesCollection(8).Name = "=Sheet1!$A$3" .FullSeriesCollection(8).XValues = "=Sheet1!$B$3" .FullSeriesCollection(8).Values = "=Sheet1!$C$3" ' マーク設定 .FullSeriesCollection(8).Format.Fill.Visible = msoTrue .FullSeriesCollection(8).MarkerStyle = xlMarkerStyleCircle .FullSeriesCollection(8).MarkerSize = 6 .FullSeriesCollection(8).Format.Fill.ForeColor.RGB = RGB(255, 0, 0) .FullSeriesCollection(8).Format.Line.Visible = msoTrue .FullSeriesCollection(8).Format.Line.ForeColor.RGB = RGB(255, 0, 0) ' データラベル設定 .FullSeriesCollection(8).ApplyDataLabels .FullSeriesCollection(8).DataLabels.ShowSeriesName = True .FullSeriesCollection(8).DataLabels.ShowValue = False .FullSeriesCollection(8).HasLeaderLines = False .FullSeriesCollection(8).DataLabels.Position = xlLabelPositionAbove End With End Sub

  • エクセル2007でのグラフ作成

    エクセルのグラフ作成での質問をお願い致します。 エクセル2007を使い、グラフを作りたいのですがどうしても上手くいきません。 問題 5科目の定期テストの結果である。平均と標準偏差(STDEV使用・適切な関数を用いて小数点以下第二位まで表示)を計算し、図と同じグラフを作りなさい。 疑問点 わたしは、平均部分のグラフを作り、誤差範囲の書式設定と言うもので標準偏差の部分を作るのだと思いました。 まず、平均部分ですが、X軸に科目名を入れたい場合、散布図は使えないと調べたら出てきました。 このような図の場合、一度にグラフを作成できるのでしょうか? 誤差範囲の書式設定というものを使うのでしょうか? 作成した表と、作成すべきグラフの画像を添付します。 どうかよろしくお願い致します。

  • エクセルで片対数グラフを書きたいのですが

    添付図のように、エクセルを使って片対数グラフを書きたいです。 図では、□、△、○の3つの異なる条件について、N/N0の時間変化について書かれていますが、この図のように、一枚のグラフに3つもグラフを書くようにするにはどうしたらいいのかがわかりません。 まずエクセルで、数値を代入して、挿入→散布図と押して、直線のグラフ自体は書けるのですが、縦軸を対数目盛にするにはどうしたらいいのかがわかりません。また、x軸とy軸に任意の文字を入力する方法についても教えていただけたらと思います。 まとめると、 (1)3つの異なるグラフを一枚のグラフに表すにはどうすればよいか (2)図のように縦軸が対数になるようにするにはどうすればよいか (3)各軸において任意の文字を入力するにはどうすればよいか について教えてください。お願いします。

  • Excel VBAでグラフの操作をする。

    Excel VBAでグラフの操作をする。 したいことは、アクティブのグラフ(散布図)の仕様(大きさ、色等)を他のグラフにも適応させるということです。 おもに2点質問があります。 (1)マーカー情報の取得を行いたいのですが、  MyMS=Selection.MarkerStyle  (たとえば、xlCircle等を変数に格納したい) としたい場合、MyMSはオブジェクト型になるのでしょうか? つまり Dim MyMS As Object となるのでしょうか? (2)散布図の線の太さを指定するのに、  xlHairline  xlThin  xlMedium  xlThick とありますが、「データ系列の書式設定」では数字の入力が可能です。 その数字で指定または取得はできないのでしょうか?  .weight=xlThin を .weight=1.5 などです。 よろしくお願いします。

  • エクセルのグラフ

     入力した値(その時によって変化する)でグラフを作りたいんです。形としては直交座標で、中心O基準とする、各データのプロット図です。(わかりづらい説明。。)  入力する値は、中心Oからy軸の+方向(北の方向)を基準に、何度(方角)何メーター(距離)と入力します。入力したデータのx軸、y軸座標は出力できるようにしています。  エクセルのグラフ作成(散布図)でやると、データによって(+/-)グラフの形が変わってしまい、また、各データの値を連番で、1,2と入れたいんですが、うまくいきません。また、中心Oから0度、30度、60度、90度、、、という風に方角の罫線も入れたいです。  グラフは今まで扱ったことがなく、超初心者です。  わかりづらい説明ですが。。よろしくお願いしますっ。

  • 標準偏差バーをグラフに入れた時にマイナスの範囲にエラーバーが達する場合

    13人の点数がそれぞれ以下のようにあったとします。 0、0、0、0、1、1、1、2、2、2、3、4、6 平均点 1.7点 標準偏差が1.8 になります。このとき棒グラフの平均値に±1.8の範囲の エラーバーを追加するとグラフのマイナスの範囲に入り込みます。 点数は0点以下はあり得ないのでマイナスの範囲に入るのは変だと思うのですが、このようなときにどのようにグラフを書けばよいのでしょうか?

専門家に質問してみよう