[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『散布図にセル参照したラベルをつけたい(excel 2016 mac)』(Yuki)
初めて質問させていただきます。アナログ人間です。macはOS majoveです。
散布図にセルを参照したラベルをつけたくて、いろいろ調べたのですが、excell 2016 macでは、ラベルの選択肢にX軸の値、Y軸の値しかなく、セル参照をすることができないように思います。フリーで公開されていたマクロも使おうとしてみましたが、値が多くなるとうまく動きません。何かいい方法はありませんでしょうか。ちなみに散布図にしたい値は1500個で、試してみたマクロは、http://excelcharts.biz/ultimate/scatter/
http://www.appspro.com/Utilities/ChartLabeler.htm
の2つです。
1つ目は、データが3,4個だと動くのですが、100個で試すと止まってしまいます。
2つ目はそもそも動きません。
まる二日格闘しましたが、解決できません。お助けください。
< 使用 Excel:Excel2016mac、使用 OS:MacOSX >
ちなみにコードミスがある。
誤 x1R1C1
正 xlR1C1
Option Explicitを書いておきさえすれば防げる訳だが。
(γ) 2019/11/13(水) 06:23
外部ストレージに置いたファイルは私は決して見る事はありませんが、実現できていないという事は、参照するまでもないものかと思います。 私からの提案は、グラフ機能で散布図を作成するのではなく、マクロを使ってX軸Y軸を計算、1点ずつ円の図形を配置する事です。 図形はクリックするとマクロ実行するようにしておき、1点に関する情報をフォームで表示するようにすれば、ラベルを点数分置く必要は無いでしょう。 円の図形は点数分置きますけど。
(???) 2019/11/13(水) 09:10
(マナ) 2019/11/13(水) 20:00
マクロは、ここを参考にしています。
https://www.moug.net/tech/exvba/0020010.html
使い方
1)下記のコードを、ThisWorkbookモジュールにコピペ
2)グラフを選択し、 Sub SetChtEvent()を実行
3)ラベル表示したい点を、1個ずつクリック
Option Explicit
Private WithEvents myCht As Chart
Sub SetChtEvent() Set myCht = Nothing On Error Resume Next Set myCht = ActiveChart On Error GoTo 0 If myCht Is Nothing Then MsgBox "グラフを選択してから実行してください" End If
End Sub
Private Sub myCht_MouseUp(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long) Dim ElemID As Long, Arg1 As Long, Arg2 As Long Dim ser As Series Dim p As Point
myCht.GetChartElement x, y, ElemID, Arg1, Arg2 If ElemID <> xlSeries Then Exit Sub ' Set ser = myCht.SeriesCollection(Arg1) Set p = ser.Points(Arg2)
If p.HasDataLabel Then p.DataLabel.Delete Else p.HasDataLabel = True p.DataLabel.Font.Size = 32 p.DataLabel.Font.Color = vbRed p.DataLabel.Text = Range(Split(ser.Formula, ",")(1)).Cells(Arg2, 0).Value End If
End Sub
Private Sub myCht_Deactivate() Dim ser As Series
For Each ser In myCht.SeriesCollection On Error Resume Next ser.DataLabels.Delete On Error GoTo 0 Next
End Sub
(マナ) 2019/11/14(木) 20:23
マナさん 拝見しました。すばらしい。これだと数の制約はほぼ無いに等しくなりますね。
ところで、普通は特徴あるポイントに限定してデータラベルを付けることに なるのでしょうけど、 DataLabelとポイントをコネクターで結んだらよかろうとトライしたのですが、 DataLabelというのは普通の図形とちがってコネクターに反応しないんですねえ。
それと、myCht_Deactivateというのは結構、地雷として機能してしまいそうですね。 シートのどこかのセルを選択してしまうと、たちまち苦労したデータラベルが消えちゃいます。 ボタンにマクロを登録するなどして、意識的な操作にしたほうがよいかもしれませんね。
ところで質問者さんはどうされたのですかね。 (γ) 2019/11/15(金) 08:41
>DataLabelというのは普通の図形とちがってコネクターに反応しないんですねえ。
2013以降のバージョンは、デフォルトで引出線付きラベルなのですが Mac版は、2010と同じかもしれませんね。 だとすると、???さんご提案の図形でグラフを表現することになるでしょうか。
>myCht_Deactivateというのは結構、地雷として機能してしまいそう
確かに、そうですね。 (マナ) 2019/11/15(金) 19:46
データラベルのボックスを少し離れたところに移動させたら引き出し線が
表示されました。
# やはりグラフのイベントプロシージャでなんとかしたいですね。
(γ) 2019/11/15(金) 20:22
1)2010やMacでは、ラベルに引き出し線がなさそうなので、図形で描いてみました。 2)ラベルの代わりに、図形の吹き出しも使ってみましたが、イベントが使えず今ひとつでした。 吹き出しならセル参照が使えるメリットがあるのですが…
Private Sub myCht_MouseUp(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long) Dim ElemID As Long, Arg1 As Long, Arg2 As Long Dim ser As Series Dim p As Point Dim n As String Dim sp As Shape Dim dl As DataLabel
myCht.GetChartElement x, y, ElemID, Arg1, Arg2 n = Join(Array("Label", Arg1, Arg2))
If ElemID = xlSeries Then Set ser = myCht.SeriesCollection(Arg1) Set p = ser.Points(Arg2) If p.HasDataLabel Then p.DataLabel.Delete On Error Resume Next myCht.Shapes(n).Delete On Error GoTo 0 Else p.HasDataLabel = True Set dl = p.DataLabel dl.Position = xlLabelPositionRight dl.Font.Size = 18 dl.Font.Color = vbRed dl.Text = Range(Split(ser.Formula, ",")(1)).Cells(Arg2, 0).Value SetLeaderLine p, dl, n End If ElseIf ElemID = xlDataLabel Then Set p = myCht.SeriesCollection(Arg1).Points(Arg2) Set dl = p.DataLabel On Error Resume Next myCht.Shapes(n).Delete On Error GoTo 0 SetLeaderLine p, dl, n End If
End Sub
Sub SetLeaderLine(p As Point, dl As DataLabel, n As String) Dim t As Double, l As Double, w As Double, h As Double Dim endX As Double, endY As Double Dim sp As Shape
l = dl.Left t = dl.Top w = dl.Width h = dl.Height
endY = IIf(p.Top < t, t, IIf(p.Top > t + h, t + h, t + h * 0.5)) endX = IIf(p.Left < l, l, IIf(p.Left > l + w, l + w, l + w * 0.5))
Set sp = myCht.Shapes.AddConnector(msoConnectorStraight, p.Left, p.Top, endX, endY) sp.Name = n
End Sub
(マナ) 2019/11/20(水) 22:43
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.