[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『エクセルグラフ内データのポップアップ表示』(ひろ)
エクセルでグラフを作成し、グラフ中の点にマウスを重ねるとポップアップウインドウが出て値が表示されますが、 データの値ではなく任意の文字列を表示させることは出来ますか? 散布図の各点にマウスを持って行くと、その点の別の列の文字列が表示させるようにしたいのです。 例えば、打率とホームランをX軸とY軸にした散布図を描き、それぞれの点にマウスを持って行くと、 バッターの名前がポップアップで表示されるようにしたいのです。
Excel 2004 for macです。よろしくお願いします
散布図のラベル表示の問題のようですね。 下記のプラグインをインストールすると、任意の文字列(バッターの名前)をラベルとして表示できます。 XY Chart Laberer http://www.appspro.com/Utilities/ChartLabeler.htm (wisemac21)
ありがとうございます。 点(サンプル)の数が多くて、常時ラベルを表示していると、グラフがとても混雑してしまいます。 出来ればポップアップが良いのですが、何か方法がないでしょうか。。。
[wisemac21]さんが示されたラベル表示の方法がダメなら マクロで選手名だけポップアップが可能かもしれませんが データ加工して、基本操作だけの方法です、手間がかかりますが...
詳しくないので↓を参考にしました。昨年のデータのようですが。 http://www.din.or.jp/~nakatomi/record/nendo/index_ys.html
選手名 打率 本塁打 青木 346 20 ラミレス 343 29 谷 318 10 小笠原 313 31 栗原 310 25
↑このようなデータを↓このように加工して
A B C D E F 1 打数 青木 ラミレス 谷 小笠原 栗原 2 346 20 3 343 29 4 318 10 5 313 31 6 310 25
範囲を一度に全て選択するのではなく、 A1:A6とB1:F6を、+Ctrlで分けて選択し、 ウィザード1/4で「散布図」次へ、2/4で「列」にチェックし 完了。 空白データのマーカーがY軸0に出るので「該当マーカー」を 「一つずつ」選択して[データ要素の書式設定]から「マーカーなし」にします。 「列系列」散布図なので各種設定も系列分繰り返す事が多くなります。 選手数が増えると大変ですが。
本塁打、打率(X軸/Y軸)を入れ替えたいなら、データ加工をし直します。
データが毎日変わると思うので、実データを別シートにでも作り グラフ用データはそれを参照させるなどの工夫が必要かもしれません。 選手名のラベル表示も一つずつ設定ですが可能のようです。 きっちりしたグラフを一度作成し、「ユーザー定義」に追加し、 選手数の変化や次回作成時に少しは楽になる気もします。
ポップアップ表示データは選手名以外も表示されますが、基本操作だけではこんなところでしょうかね。 とても手間暇がかかりやっかいですし、データの変化に全て対応してるかどうか未検証です。 参考程度にでも思ってください。 (jun53)
加工したデータの空白セルを =na() で埋め、条件付き書式等で見えなくします。 このようにすると、
>空白データのマーカーがY軸0に出るので「該当マーカー」を >「一つずつ」選択して[データ要素の書式設定]から「マーカーなし」にします。
↑この作業が不必要になるようです。 (jun53)
ちょっと、仕様がちがいますが、「氏名を表示したいプロットをクリックしたら、氏名表示をする」 ではどうでしょうか?
VBAで処理しました。
新規ブックに適当なシートのモジュールに(標準モジュールではありませんよ)
'=================================================================================== Dim WithEvents cht As Chart Private txt As Shape Sub mk_sammple() Dim mkcht As Chart With Me .Range("a1:c1").Value = Array("NAME", "AVE", "HR") With .Range("a2:c27") .Formula = Array("=rept(char(row()+63),5)", "=round(rand(),3)", "=int(rand()*50)") .Value = .Value End With End With Set mkcht = ThisWorkbook.Charts.add With mkcht .ChartType = xlXYScatter .SetSourceData Source:=Me.Range("A1:c27"), PlotBy:=xlColumns .SeriesCollection(1).Delete .SeriesCollection(1).XValues = _ "=" & Me.Name & "!R2C2:R27C2" .Location Where:=xlLocationAsObject, Name:=Me.Name End With Call set_obj ActiveWindow.Visible = False Me.Select ActiveCell.Select End Sub '=========================================================================== Sub set_obj() Dim srs As Series Application.EnableEvents = False Set cht = Me.ChartObjects(1).Chart Set srs = cht.SeriesCollection(1) Application.EnableEvents = True End Sub '=========================================================================== Sub reset_obj() Set cht = Nothing End Sub '=========================================================================== Function edit_addr(add, podr As Long) As String Dim idx As Long, jdx As Long Dim ans() Dim wk As Variant wk = Split(Replace$(Replace$(add, "=SERIES(", ""), "," & podr & ")", ""), ",") jdx = 1 For idx = LBound(wk) To UBound(wk) If TypeName(Application.Evaluate(wk(idx))) = "Range" Then ReDim Preserve ans(1 To jdx) ans(jdx) = wk(idx) jdx = jdx + 1 End If Next If jdx > 1 Then edit_addr = Join(ans(), ",") Else edit_addr = "" End If End Function '==================================================================================== Private Sub cht_Activate() Debug.Print "ok" Application.EnableEvents = False cht.Parent.Select cht.ChartArea.Select cht.SeriesCollection(1).Select Set txt = cht.Shapes.AddTextbox(msoTextOrientationHorizontal, 0, 0, 100, 100) With txt .Fill.ForeColor.SchemeColor = 13 .Fill.Visible = msoTrue .Line.Visible = msoTrue .TextFrame.AutoSize = True .Visible = msoFalse End With Application.EnableEvents = True End Sub '==================================================================================== Private Sub cht_deactivate() On Error Resume Next txt.Delete End Sub '============================================================================================ Private Sub cht_MouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long) Dim paobj As ChartObject Set paobj = cht.Parent With txt .Left = 0.75 * x .Top = 0.75 * y .ZOrder msoBringToFront End With End Sub '====================================================================================== Private Sub cht_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long) Dim srs As Series Dim srsstr As Variant Dim addr As Variant Dim xaddr As String Dim yaddr As String If ElementID = xlSeries Then Set srs = cht.SeriesCollection(Arg1) srsstr = Split(edit_addr(srs.Formula, srs.PlotOrder), ",") xaddr = srsstr(UBound(srsstr) - 1) yaddr = srsstr(UBound(srsstr)) If Arg2 = -1 Then Arg2 = 1 srs.Points(Arg2).Select End If If Arg2 > 0 Then txt.Visible = True txt.TextFrame.Characters.Text = Application.Range(xaddr).Offset(0, -1).Cells(Arg2).Value txt.TextFrame.AutoSize = True
End If End If End Sub
として、mk_sammpleを実行してください。上記のモジュールを記述したシートモジュールに対応する シートに散布図を作成します。名前(A列の文字列)を表示したいプロットをクリックしてください。 近くに表示されるはずです。
グラフではなく、適当なセルクリックで表示は消えます。
検討してみてください。
ichinose
Win2000 Excel2002では上記コードの確認をしていますが、
Macなら????です。
ichinose
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.