こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

EXCEL 散布図の軸について

グラフについてどなたか助けてください。
散布図を作っているのですが、下記の条件でY軸を決めたいのですが
どのように設定すればよいのでしょうか?

データ:A:120,B:121,C:123,D:123,E:125,F:126の場合(Y軸:値 X軸:A-F)

1. データは絶対に0にならないので、0を表示したくない。
2. データの平均値をY軸の中心にして散布させたい。

軸の書式設定で最小値、最大値のチェックを外し自分で最小値と最大値を
入力する方法も考えましたが、データの最大値及び最小値が、変化する場合
再度設定する必要があるのでこの手間を省きたいと考えています。

よろしくお願いします。

投稿日時 - 2007-06-15 01:44:22

QNo.3085927

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(6)

ANo.6

はい。
出来ます。
下記のように 追加してください。
尚、表示形式には、自信がない([h]"°"mm"'"SS"''" を張り付けただけです。)ので、違っていましたら修正してくださいね。
また、マクロの記録で、トレース(記録)して見ると いろいろ出来ますので 試して 見ては、どうでしょうか??。
追加、先の回答で、この 「マクロの保存先」は、作業中のブックにします。
としましたが、
個人用マクロに保存先を選ぶと あなたのPCにマクロが、登録され エクセルのBookに関係なく 個人用マクロ( personal.XLS )に入っている マクロが、実行出来ますよ。

  ActiveChart.Axes(xlValue).Select
With ActiveChart.Axes(xlValue)
.MinimumScale = My_AVG - My_R
.MaximumScale = My_AVG + My_R
.MinorUnitIsAuto = True
.MajorUnitIsAuto = True
.Crosses = xlAutomatic
.ReversePlotOrder = False
.ScaleType = xlLinear
.DisplayUnit = xlNone
End With
' ここから下は、追加部分です。
Selection.TickLabels.NumberFormatLocal = "[h]""°""mm""'""ss""''"""

' この上が、新規追加部分です。" が、両端に1個 づつ多いですが、
' これは、文字列として 設定しないと いけないので削除しては
' いけませんよ。
End Sub ' ここは、いままでの部分です。 ブログラムのしめくくりです。

余談ですが、PCの調子が悪く週末かかりっきりで修復していました とのことですが、

今後調子が、悪くなったら
クリーンアップ センターを利用してください。(他にもいろいろありですよ。)
  http://onecare.live.com/site/ja-JP/center/cleanup.htm

PC にはたくさんの不要なファイルが保存されています。害のないファイルもありますが、PC の処理速度を遅くしたり、PC 上で行われた操作を盗み見る悪質なファイルもあります。

不要なファイルが PC の中に散乱していませんか?
無料のクリーンアップ スキャンを使用して、コンピュータの処理速度を遅くする不要なファイルを検索し、削除することができます。

投稿日時 - 2007-06-26 20:58:18

ANo.5

補足説明のメールが、届いてなくて回答が、遅くなりました。

1.実際のy軸には[h]"°"mm"'"SS"''"の表示形式を使用したいのですが
2.グラフ内のフォントの変更をしたいのですが

回答;
1.y軸の数字の部分を選択して、右クリックメニューから軸の書式設定を選択します。
次に、表示形式をタブから選択してユーザー定義を左の選択メニューから選び [h]"°"mm"'"SS"''"を 種類の直下のボックスに書き込むか、コピーして貼り付けます。 最後に OK ボタンを押して 終わりです。
2.変更したい部分の文字を選択して 上記1 同様にしてフォントのタブを選択します。
ここで、好きなフォントを選択して OK ボタンを押して 終わりです

これらは、マクロの実行後 いつでも変更できます。

投稿日時 - 2007-06-23 22:02:01

お礼

いつもご回答ありがとうございます。PCの調子が悪く週末かかりっきりで修復していました。初めに、ご回答いただいた軸の表示形式の件ですが、現在教えていただいた様には設定してあります。質問の仕方が悪かったですね。この作業を頂いたマクロに組み込むことは可能でしょうか?毎回グラフを作成した後この作業は手間になってしまいます。

投稿日時 - 2007-06-26 01:18:05

ANo.4

一応完成しましたので、 試してください。
右の URLから  http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/index.html

マクロの自動記録と実行を読んで、ください。

読み終わったら

2.メニューバーの【ツール】→【マクロ】→【新しいマクロの記録】を選択します。
【マクロの記録】ダイアログが表示されますので、「マクロ名」「マクロの保存先」を確認して、【OK】をクリックします。

注意; この 「マクロの保存先」は、作業中のブックにします。

この後、マウスを適当にいじっても いじらなくても 【記録】ツールバーの【記録終了】ボタンをクリックします。

4.【Alt】+【F11】でVisual Basic Editor (以下VBEと表記します)を開きます。
(メニューバーからは、【ツール】→【マクロ】→【Visual Basic Editor】を選択します)
標準モジュールのModule1にMacro1が記録されました。

Excel(エクセル) VBA入門:目次 を押して

*****
戻って VBE(Visual Basic Editor/VBエディタ)の使い方 を読みます。

コードの記述、表示、および編集を行います。
プロジェクト エクスプローラでフォーム/モジュールをダブルクリックするか、選択して[コードの表示] ボタンをクリックします

コードの一番上に

Option Explicit の文字が、ありますので、
キーボードの7の上の文字 [']を左端につけて
'Option Explicit とします。
そして、その下の コード(文字を削除します。)

または、コード全部を削除します。

次に 下記 コードをコピーして貼り付けます。

' 使用方法と 注意事項
' データの最初のセルを アクティイブにして 実行する
' データの数は、制限なし
' データの並びは、縦方向、横方向を問わない。


Sub 散布図ぐらふ()
Dim Hx As Long, Vy As Long
Dim My_Cell_Add As String 'アクティイブ セルの Addressを確保
Dim Data_XY As Long ' データ数を確保
Dim Houkou As String ' データが、どの方向に 並んでいるかを保存
Dim myRange As Range
Dim My_MAX As Variant ' 最大値
Dim My_MIN As Variant
Dim My_AVG As Variant
Dim My_R As Variant ' ばらつき幅
Dim My_Sheets As String


My_Sheets = ActiveSheet.Name
ActiveCell.CurrentRegion.Select
Hx = ActiveWindow.RangeSelection.EntireColumn.Count
Vy = ActiveWindow.RangeSelection.EntireRow.Count

If Hx > Vy Then
Data_XY = Hx
Houkou = "H"
Else
Data_XY = Vy
Houkou = "V"
End If

My_Cell_Add = Selection.Cells.Address(fase, False, xlA1, True)


Set myRange = Selection.Cells
My_MIN = Application.WorksheetFunction.Min(myRange)
My_MAX = Application.WorksheetFunction.Max(myRange)
My_AVG = Application.WorksheetFunction.Average(myRange)

If Abs(My_AVG - My_MAX) > Abs(My_AVG - My_MIN) Then
My_R = Abs(My_AVG - My_MAX)
Else
My_R = Abs(My_AVG - My_MIN)
End If

Charts.Add
ActiveChart.ChartType = xlXYScatter

If Houkou = "V" Then
' データが縦になっている
ActiveChart.SetSourceData Source:=Sheets(My_Sheets).Range(My_Cell_Add), PlotBy:= _
xlColumns
Else
' データが横になっている
ActiveChart.SetSourceData Source:=Sheets(My_Sheets).Range(My_Cell_Add), PlotBy _
:=xlRows
End If

ActiveChart.Location Where:=xlLocationAsObject, Name:=My_Sheets
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "タイトル"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "X数値軸"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "y数値軸"
End With

'
ActiveChart.Axes(xlValue).Select
With ActiveChart.Axes(xlValue)
.MinimumScale = My_AVG - My_R
.MaximumScale = My_AVG + My_R
.MinorUnitIsAuto = True
.MajorUnitIsAuto = True
.Crosses = xlAutomatic
.ReversePlotOrder = False
.ScaleType = xlLinear
.DisplayUnit = xlNone
End With


End Sub

貼り付けが、終わったら 保存しましょう。

マクロの自動記録と実行 に戻り
メニューバーの【ツール】→【マクロ】→【マクロ】を選択します。

散布図ぐらふ を選択して 実行ボタンを押します。

以上です。

分らない時は、聞いてください。
しばらくは、締め切らない方が 良いでしょう。

投稿日時 - 2007-06-20 18:42:43

ANo.3

ある程度 作成しました。
検討待ち部分をいじってみてください。
引き続き 修正しますがね。
VBA は、ある程度 解るのでしょうか??。
****************************

' データの最初のセルを アクティイブにして 実行する
' データの数は、制限なし

Sub 散布図ぐらふ()
Dim Hx As Long, Vy As Long
Dim My_Cell_Add As String 'アクティイブ セルの Addressを確保
Dim Data_XY As Integer ' データ数を確保
Dim Houkou As String ' データが、どの方向に 並んでいるかを保存
Dim myRange As Range
Dim My_MAX As Variant ' 最大値
Dim My_MIN As Variant
Dim My_AVG As Variant
Dim My_R As Variant ' ばらつき幅

ActiveCell.CurrentRegion.Select
Hx = ActiveWindow.RangeSelection.EntireColumn.Count
Vy = ActiveWindow.RangeSelection.EntireRow.Count

If Hx > Vy Then
Data_XY = Hx
Houkou = "H"
Else
Data_XY = Vy
Houkou = "V"
End If

If Application.ReferenceStyle = xlR1C1 Then
My_Cell_Add = Selection.Cells.Address(fase, False, xlR1C1, True)
Else
My_Cell_Add = Selection.Cells.Address(fase, False, xlA1, True)
End If


Set myRange = Selection.Cells
My_MIN = Application.WorksheetFunction.Min(myRange)
My_MAX = Application.WorksheetFunction.Max(myRange)
My_AVG = Application.WorksheetFunction.Average(myRange)

If Abs(My_AVG - My_MAX) > Abs(My_AVG - My_MIN) Then
My_R = Abs(My_AVG - My_MAX)
Else
My_R = Abs(My_AVG - My_MIN)
End If

Charts.Add
ActiveChart.ChartType = xlXYScatter

If Houkou = "V" Then
' データが縦になっている
ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("I4:I9"), PlotBy:= _
xlColumns
Else
' データが横になっている
ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range(My_Cell_Add), PlotBy _
:=xlRows
End If

ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "タイトル"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "X数値軸"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "y数値軸"
End With

'
ActiveChart.Axes(xlValue).Select
With ActiveChart.Axes(xlValue)
.MinimumScale = 90 '検討待ち
.MaximumScale = 200 '検討待ち
.MinorUnitIsAuto = True
.MajorUnitIsAuto = True
.Crosses = xlCustom
.CrossesAt = 100 '検討待ち
.ReversePlotOrder = False
.ScaleType = xlLinear
.DisplayUnit = xlNone
End With



End Sub

投稿日時 - 2007-06-19 22:03:30

補足

早速、分からないながら頂いたVBA実行してみました。散布図の枠組み(軸を含み)出来ましたが、難点か問題があります。VBAは分からないので失礼な書き方がありかと思いますが、お許しください。

1. 当初の質問では、分かりやすいようなデータを書きましたが、実際散布されるデータは角度表示(##°##'##")を使用しています。実際の数字は、時間の数値を軸の表示形式で[h]"°"mm"'"SS"''"としていますので、実際のy軸には[h]"°"mm"'"SS"''"の表示形式を使用したいのですが。。

2. MinimumScale = 90 '検討待ち. MaximumScale = 200 '検討待ちにはあるフィールドに入力されているデータでも構いません。(もしかしたらこちらのほうがいいかもしれません。

3. グラフ内のフォントの変更をしたいのですが、教えていただけませんか?

よろしくお願いします。

投稿日時 - 2007-06-20 13:27:10

お礼

VBAありがとうございます。
私はVBAは、分かりません。本日、色々なHPをみてみましたが、簡単に理解できるものではないようですね。。このような聞き方大変申し訳ないとは思いますが、頂いたVBAをどのように活用したらよいでしょうか?
大変申し訳ありません。もう少し教えてください。

投稿日時 - 2007-06-20 03:17:55

ANo.2

はい。
分かりました。
別の困ったさんの後になりますが、
今週中には、仕上げたいと思います。
それまで、待ってください。

投稿日時 - 2007-06-18 19:45:25

お礼

ありがとうございます。
その間も自分でも少し考えてみます。ちなみに私の質問では、質問を簡単にするため、データ量が少なかったのですが、実際のデータ数は50です。マクロになるとは思わなかったので、簡単に質問を書いてしまいました。申し訳ありません。
それではよろしくお願いします。

投稿日時 - 2007-06-18 23:51:15

ANo.1

通常の方法では、無理があるので、マクロで、データをソートして
平均値と最大値、最小値を求め
データの偏りを修正して(データの偏りの大きい方に合わせ)

注釈:平均値が、必ず データの中心にくるとは、断言出来ないので
  このずれを補正しないと いけない。

グラフを作成する方法が、良いかと思います。
マクロでの回答は、だれかが、してくれるでしょう。
わたしが、作成しても良いですが、スタミナがないもので今回は、
見送りにさせて頂きます。
尚、誰も、回答してくれないときは、考えます。

投稿日時 - 2007-06-15 21:20:08

お礼

回答いただいてありがとうございました。出かけていたのでお礼のメッセージが遅くなってしまいました。
前回一度質問を一度書いたのですが、解答いただけなかったのでもう一度投稿してみました。
私には、ハードルが高そうです。現在に至っても他の誰も回答いただけないので出来ましたら、再度お助けいただけないでしょうか?

投稿日時 - 2007-06-18 13:21:08

あなたにオススメの質問