• 締切済み

EXCEL 散布図の軸について

グラフについてどなたか助けてください。 散布図を作っているのですが、下記の条件でY軸を決めたいのですが どのように設定すればよいのでしょうか? データ:A:120,B:121,C:123,D:123,E:125,F:126の場合(Y軸:値 X軸:A-F) 1. データは絶対に0にならないので、0を表示したくない。 2. データの平均値をY軸の中心にして散布させたい。 軸の書式設定で最小値、最大値のチェックを外し自分で最小値と最大値を 入力する方法も考えましたが、データの最大値及び最小値が、変化する場合 再度設定する必要があるのでこの手間を省きたいと考えています。 よろしくお願いします。

みんなの回答

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.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 の中に散乱していませんか? 無料のクリーンアップ スキャンを使用して、コンピュータの処理速度を遅くする不要なファイルを検索し、削除することができます。

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.5

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

rufy01
質問者

お礼

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

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.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 貼り付けが、終わったら 保存しましょう。 マクロの自動記録と実行 に戻り メニューバーの【ツール】→【マクロ】→【マクロ】を選択します。 散布図ぐらふ を選択して 実行ボタンを押します。 以上です。 分らない時は、聞いてください。 しばらくは、締め切らない方が 良いでしょう。

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.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

rufy01
質問者

お礼

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

rufy01
質問者

補足

早速、分からないながら頂いたVBA実行してみました。散布図の枠組み(軸を含み)出来ましたが、難点か問題があります。VBAは分からないので失礼な書き方がありかと思いますが、お許しください。 1. 当初の質問では、分かりやすいようなデータを書きましたが、実際散布されるデータは角度表示(##°##'##")を使用しています。実際の数字は、時間の数値を軸の表示形式で[h]"°"mm"'"SS"''"としていますので、実際のy軸には[h]"°"mm"'"SS"''"の表示形式を使用したいのですが。。 2. MinimumScale = 90 '検討待ち. MaximumScale = 200 '検討待ちにはあるフィールドに入力されているデータでも構いません。(もしかしたらこちらのほうがいいかもしれません。 3. グラフ内のフォントの変更をしたいのですが、教えていただけませんか? よろしくお願いします。

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.2

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

rufy01
質問者

お礼

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

  • Nayuta_X
  • ベストアンサー率46% (240/511)
回答No.1

通常の方法では、無理があるので、マクロで、データをソートして 平均値と最大値、最小値を求め データの偏りを修正して(データの偏りの大きい方に合わせ) 注釈:平均値が、必ず データの中心にくるとは、断言出来ないので   このずれを補正しないと いけない。 グラフを作成する方法が、良いかと思います。 マクロでの回答は、だれかが、してくれるでしょう。 わたしが、作成しても良いですが、スタミナがないもので今回は、 見送りにさせて頂きます。 尚、誰も、回答してくれないときは、考えます。

rufy01
質問者

お礼

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

関連するQ&A