チョコミントアイス

Excelで2点間の距離をグラフ上に表示したいと思っています。

具体的には、添付画像のように、人が(X1、Y1)から、(X2、Y2)へ移動した座標をグラフ上にプロットして、人毎に直線で結びたいと思っています。

実際のデータは、人が100人以上居るので、線を書くことは現実ではないです。

良い方法をご存知の方、どうぞご教示お願いします。

「Excelで2点間の距離をグラフ上に表示」の質問画像

A 回答 (3件)

グラフ ウイザドを使用して、散布図を作成すると、おおむねご希望通りのグラフを作成することができます。


残念なのは、直線の始点と終点の区別ができないことです。

グラフ ウイザドを開き、「散布図」→「データポイントを直線でつないだ散布図」を選択して次へ、
グラフの元データ入力ウインドウで、「系列」タブを選択し、「系列」ボックスの下にある「追加」ボタンを押します。
「名前ボックス」の右端にあるボタンを押して、名前入力ボックスを展開し、その状態で最初の人物の名前が記述されたセルをマウスで左クリックします。名前ボックスの中に、選択されたセルのアドレスが表示されたら、名前入力ボックスの右上にある「×」ボタンを押して、閉じます。
同様に、Xの値の範囲、Yの値の範囲をマウス操作で入力します。X/Yの値は2つあるので、二つのセルをドラッグして選択します。
ここまで終わったら「追加」ボタンを押して、二番目の人物について、名前、Xの値、Yの値を入力します。
以下、同じように最後の人物のデータ入力が終わるまで、「追加」と「入力」を繰り返します。
最後の人物のデータ入力が終わったら、「次へ」ボタンを押します。
「グラフオプション」ウインドウが開きますので、ここで、「目盛線」タグをクリックし、X軸、Y軸の「目盛線」をチェックし、「次へ」
ここで、「新しいシート」または、「オブジェクト」が選択できます。「オブジェクト」を選択すると、作業中のエクセルシートに埋め込まれた形でグラフが作成されます。
「完了」を押します。

グラフ ウイザドの操作には、1人のデータを入力するのに10秒、100人では1000秒(約17分)かかります。このくらいの時間でできるなら、大したことはないと考えるか、わずらわしいと考えるか人により違いますが、簡単にグラフを作るためのマクロを作ってみましたので参考にしてください。

データは、Sample3という名前のシートに次のようなルールで作成されているものとします。
・B2に最初の人物の名前
・C2にX1の値、D2にY1の値
・C3にX2の値、D3にY2の値
・B4に二番目の人物の名前
・C4にX1の値、D4にY1の値
・C5にX2の値、D5にY2の値
以下、同様に最後の人物のデータまで続きます。

Sub グラフ作成()
Worksheets("Sample3").Select
Charts.Add
With ActiveChart
.ChartType = xlXYScatterLines
.SetSourceData Source:=Sheets("Sample3").Range("C2:D3"), _
PlotBy:=xlColumns
.SeriesCollection(1).Name = Worksheets("Sample3").Range("B2")

RR = 4
For i = 2 To 100 Step 1

RRange1 = "C" & RR & ":" & "C" & RR + 1
RRange2 = "D" & RR & ":" & "D" & RR + 1
RRange3 = "B" & RR
If Worksheets("Sample3").Range(RRange3).Value = "" Then Exit For

.SeriesCollection.NewSeries
.SeriesCollection(i).XValues = Worksheets("Sample3").Range(RRange1)
.SeriesCollection(i).Values = Worksheets("Sample3").Range(RRange2)
.SeriesCollection(i).Name = Worksheets("Sample3").Range(RRange3)
RR = RR + 2
Next
.Location Where:=xlLocationAsObject, Name:="Sample3"
End With

With ActiveChart.Axes(xlCategory)
.HasMajorGridlines = True
.HasMinorGridlines = False
End With

With ActiveChart.Axes(xlValue)
.HasMajorGridlines = True
.HasMinorGridlines = False
End With
End Sub

このマクロで作成したグラフを画像としてのせておきます。
「Excelで2点間の距離をグラフ上に表示」の回答画像2
    • good
    • 0
この回答へのお礼

ありがとうございます!
御礼が遅くなりまして申し訳ありません。

恥ずかしながら、今回の件でグラフのデータの選択の使い方をやっと理解しました。
確かに始点と終点が確かに分かりませんが、ほぼ私の意図する図ができました。

17分程度だったら、手でも良いのかもしれませんが、
それをミスしないですべて作業する集中力が私には無さそうです。

頂いたマクロで出来ましたので、そちらを利用させていただこうと思います。

お礼日時:2013/06/05 17:20

VBAコードを書いた好事家が他にもいらっしゃいますが、折角なので投稿しておきます。

系列一個だけで済ませているところが、#2さんとの相違点です。データの配置等は画像をご参照下さい。○を始点、◇を終点としています。ご参考まで。
Sub test()
Dim myChartObj As ChartObject
Dim targetRange As Range
Dim mySeries As Series
Dim i As Long
Dim myPoint As Point

Set myChartObj = ActiveSheet.ChartObjects.Add(50, 50, 250, 250)
With Sheets(1)
Set targetRange = Range(.Range("A3"), .Range("A" & .Rows.Count).End(xlUp)).Resize(, 3)
End With
With myChartObj.Chart
Set mySeries = .SeriesCollection.NewSeries
mySeries.XValues = targetRange.Columns(2)
mySeries.Values = targetRange.Columns(3)
.ChartType = xlXYScatter
.HasLegend = False
.Axes(xlCategory).HasMajorGridlines = True
End With
With mySeries
.MarkerStyle = xlMarkerStyleCircle
.MarkerSize = 10
.MarkerBackgroundColor = vbWhite
.MarkerForegroundColor = vbBlack
For i = 2 To .Points.Count Step 2
Set myPoint = .Points(i)
myPoint.Format.Line.Visible = msoTrue
myPoint.Format.Line.ForeColor.RGB = vbBlack
myPoint.Format.Line.Weight = 1.75
myPoint.MarkerStyle = xlMarkerStyleDiamond
myPoint.ApplyDataLabels
myPoint.DataLabel.Text = targetRange.Cells(i, 1).Value
myPoint.DataLabel.Format.TextFrame2.TextRange.Characters.Font.Fill.ForeColor.RGB = vbBlue
Next i
End With
End Sub
「Excelで2点間の距離をグラフ上に表示」の回答画像3
    • good
    • 0
この回答へのお礼

ありがとうございます!
御礼が遅くなりまして申し訳ありません。

VBAでグラフごと書いてしまう作戦ですね!
グラフとは言うものの、今回は2座標間の線分でしたので、
この方法でかなり良い感じで作成できました!

今回#2さんとBAを悩みましたがBAは#2さんとさせて頂きます。
BAを2人選べれば良いのですが、、、すいません。
本当にありがとうございました。

お礼日時:2013/06/05 17:27

例として言えば


「飛行経路を上から見る」
こんな感じの線群を
エクセルグラフ上で再現したい。
そう言うことでいいのですかね?

対象物が横方向成分X1→X2と、移動したとき
同時にY1→Y2と、移動してるわけですが
これを数式に直せば
Xの単位区間毎のYの値か求められますよね?

例として
5,7→8.12
と、移動したとします
X成分は5,6,7,8と、4単位成分分増えてます。
この際にY成分は7,8,9,10,11,12と、6単位成分分増えてます。
なのでXが1単位成分増えるとYが1.5単位成分分増えると解りますよね?

つまり、Y=1.5X+aですね。
Xの値が0の時のYの値がaです。 …よね?
7=1.5×5+aなので
a=7-1.5×5
a=7-7.5
a=-0.5ですよね?
Y=1.5X-0.5
これに幾つかXの値を入れて
対応するYの値を求め
ひょうにすれば、グラフのもとデータが作れると思いますが

もし、
X1→X2,Y1→Y2より自動計算で関数を求め
X-Yの表を作り、グラフ化したい。
と、言うことならば
数学のコーナーで予備知識を仕入れられる方がいいと思いますよ?


如何でしょうか?
お役に立てていたならば幸いです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
お礼が遅くなりまして申し訳ございません。

考え方について、とても参考になりました!
ありがとうございました。

お礼日時:2013/06/05 17:06

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報