人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

マイクロソフト エクセル2003で、ある一定人数を超えるごとに
料金のランクが上がっていく階段状グラフ(ステップグラフ)を作ろうと
しています。

データは以下のようなかたちで、aとbの料金プランごとに
ステップグラフを作って比較したいと思ってます。
過去の質問を調べると表の挿入⇒散布図でできるとあったのですが、
そのやり方でやった場合、10人から25人の間はa商品であれば
10円でグラフを横線にしたいのですが、散布図にすると右斜め上の
直線になってしまいます。
人数の値を連続で記載してaとbの値を入力せずに、ステップグラフが
できる方法はないでしょうか?


人数 0.5 2.5 5 10 25 50(人)
a 5 5 5 10 20 40(円)
b 3 4 5 8 10 20(円

●質問者: dankan
●カテゴリ:科学・統計資料
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● Silvanus
ベストアンサー

マクロを使っても良いのであれば、こんな感じでいかがでしょうか。
エラー処理も何も施していない、芸の無い代物ですが…。

Option Explicit
Option Base 0

Sub AddChargeStepGraph_dankan()

Dim rngSrc As Range
Dim intCnS As Integer
Dim intCnD As Integer
Dim intNoS As Integer
Dim intNoD As Integer
Dim arrDtX() As Variant
Dim arrDtY() As Variant

Set rngSrc = Selection

intNoS = rngSrc.Rows.Count - 1
intNoD = rngSrc.Columns.Count - 1

ReDim arrDtX(intNoD * 2) As Variant
ReDim arrDtY(intNoD * 2) As Variant

ActiveSheet.Shapes.AddChart.Select
 With ActiveChart
 .ChartType = xlXYScatterLinesNoMarkers
 .SetSourceData Source:=rngSrc
 .SetElement (msoElementChartTitleAboveChart)
 .SetElement (msoElementPrimaryCategoryAxisTitleAdjacentToAxis)
 .SetElement (msoElementPrimaryValueAxisTitleRotated)
 .ChartTitle.Text = WorksheetFunction.Index(rngSrc, 1, 1)
 .Axes(xlCategory).AxisTitle.Text = "人数"
 .Axes(xlValue, xlPrimary).AxisTitle.Text = "料金"
 For intCnS = 1 To intNoS
 With .SeriesCollection(intCnS)
 arrDtX(0) = 0
 arrDtY(0) = 0
 For intCnD = 1 To intNoD
 arrDtX(intCnD * 2 - 1) = _
 WorksheetFunction.Index( _
 rngSrc, 1, 1 + intCnD)
 arrDtY(intCnD * 2 - 1) = _
 arrDtY(intCnD * 2 - 2)
 arrDtX(intCnD * 2) = _
 arrDtX(intCnD * 2 - 1)
 arrDtY(intCnD * 2) = _
 WorksheetFunction.Index( _
 rngSrc, 1 + intCnS, 1 + intCnD)
 Next
 .XValues = arrDtX
 .Values = arrDtY
 End With
 Next
 End With
rngSrc.Select

End Sub

【使い方】
1. ご質問文の中に書かれていた様な形式の表を用意する。
・一行目が人数、二行目以降は料金プラン
・二行目以降の最左列は料金プラン名
・一行目の最左列はグラフ名になる様にしました
2. 下図の様に表を選択する。

3. 上記のマクロ「AddChargeStepGraph_dankan」を実行する。

この方式では、作成された「グラフ」と「料金表(セルの数値)」の
リンクは切れていますので、料金表の数値を変更したり
表そのものを削除する等しても、グラフには変化はありません。
当方はExcel2010上でマクロを作成し、Excel98-2003互換形式(.xls)で
保存する際に注意・警告メッセージが出ないことを確認しましたので
恐らくExcel2003上でも動くと思うのですが
もし期待通りに動作しない場合はその旨お知らせ下さい。


dankanさんのコメント
ありがとうございます!バッチリできました。こんな素敵なマクロつくって頂き本当に助かりました!!!

Silvanusさんのコメント
BA賞有難うございます。お役に立てた様で何よりです。 既にお気付きかもしれませんが、料金プランの数は 例の様な2つだけでなく、それより多いものにも対応できます。 因みに、横軸(人数)の値の記述が異なる料金表を合わせて 一つのグラフにしたい場合、(手元に無いExcel2003では確認してませんが) 2つのグラフのうち一方を選択した状態でコピー、その後に 残る一方のグラフを選択した状態でペイストすると 一つのグラフ上に異なる横軸の値をもつ料金表のステップ線を 載せることができます。 お使いになる機会は無いかも知れませんが、ご参考までに。

dankanさんのコメント
最初はちゃんとマクロがエラーなく動作したのですが、なぜか久しぶりにマクロを使うと「コンパイルエラー 変数が定義されていません」が表示され、「.SetElement (msoElementChartTitleAboveChart)」が原因になっているようです。 最初は問題なかったのですが、なぜ2回目はこのようなエラーが出るか、ご教示いただけないでしょうか? 重ね重ねお手数をおかけして申しわけありません。

Silvanusさんのコメント
「コンパイルエラー 変数が定義されていません」と出る、ということは マクロの内容が変わってしまっている様に思います。 改めて、上記の回答に貼ってあるマクロをコピーしてVBAにペイストし 実行してみて下さい。もし同じ現象が生じた場合は エラーがでている画面のスクリーンショット(VBA)を撮ってみせて下さい。 でないと、こちらとしても対処できません。こちらでは 何回繰り返し実行しても「変数未定義」のエラーは出て来ませんので。 他のエラーなら、マクロ実行時の選択状況によって生じることはありますが。

dankanさんのコメント
回答ありがとうございます。同じマクロをはって実行したエラーが出ましたので、スクリーンショットを以下にアップしました。もとになる表は特に修正していない状況です。 https://dl.dropbox.com/u/494728/error.JPG あとソースの上から3行目「Sub AddChargeStepGraph_dankan()」のところが黄色なって、エラーの原因としてソフトが指摘しているような状況です。 お手数をお掛けして申し訳ありませんが、何か解決方法があればご教示いただけると助かります。

Silvanusさんのコメント
mso…の定数が未定義になってしまってるんですね…。 前回上手く行った時と、Excelのバージョンが違う(今回のものが古い) ってことはないですか? ".SetElement"で始まる三行の括弧内を 下記の様に数字にして実行したらどうなりますか? .SetElement (2) .SetElement (301) .SetElement (309)

dankanさんのコメント
前回も今回もエクセル2003なので、バージョンは一緒になります。 教えて頂いた修正を行って試してみましたが、今度は違うエラーが以下のようにでてしまいました。 https://dl.dropbox.com/u/494728/error2.JPG 何度もお手数おかけして申し訳ありませんが、エラーの解決手段があれば教えて頂けると幸いです。

Silvanusさんのコメント
最初の".SetElement"の行からの6行(".Axes(xlValue, …"まで)を 削除したら、流石に動きますよね?グラフタイトルや軸タイトルはありませんが。 代替のコードを書きますので、暫くお待ち下さい。

Silvanusさんのコメント
上のコメントで削除をお願いした範囲を、下記の10行に置換して下さい。 .HasTitle = True .ChartTitle.Text = WorksheetFunction.Index(rngSrc, 1, 1) With .Axes(xlCategory) .HasTitle = True .AxisTitle.Text = "人数" End With With .Axes(xlValue, xlPrimary) .HasTitle = True .AxisTitle.Text = "料金" End With

dankanさんのコメント
ありがとうございます。 ご指示頂いたとおりに書き換えたところ、無事にグラフが描画できました。何度も何度も助けて頂き本当にありがとうございました!

Silvanusさんのコメント
何で一旦動いていたものが動かなくなったのかが気になりますが、 とにかくお困りだったことが解決されて良かったです! ではでは。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ