- ベストアンサー
積上げ横棒グラフで値と比率を一緒に表示させる方法
- 通常の積上げ横棒グラフで値と比率を同時に表示させる方法について教えてください。
- 過去ログから%表示させるにはVBAを使用する方法がありますが、値も同時に表示させるためにはマクロの知識が必要です。
- また、自動的にデータを更新するためにはVBAに組み込む必要がありますが、項目が追加される可能性がある場合は注意が必要です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>>No.1 この回答へのお礼 >二項目目以降の%値が合致しません。 合計値の初期化を忘れていました。 For i = 1 To np pval = 0 '★要素合計値の初期化 For j = 1 To ns yval = .SeriesCollection(j).values pval = pval + yval(i) Next j For j = 1 To ns With .SeriesCollection(j).Points(i).DataLabel .TEXT = .TEXT & " (" & format(Val(.TEXT) / pval, "0.0%") & ")" End With Next j Next i >VBAでできたら良いなぁと思っています。 思っているだけでは実現できません。 紹介した過去ログの回答コードを参考に応用してみてください。 因みに下記の処でセル参照式をセットしています。 .TEXT = "=" & ws & "!" & Range(xadr)(i).Offset(, 1).Address 上記は .TEXT = "=データシート名!データセル番地" といった内容です。 リンク参照したいデータ表のレイアウトが問題です。 上記の例では元データセルから1列横のセルを指定しています。
その他の回答 (1)
- xls88
- ベストアンサー率56% (669/1189)
取りあえず、データラベルに値と%値を表示する例です。 (例1) Dim yval As Variant, pval As Variant Dim stxt As String Dim ns As Long, np As Long Dim i As Long, j As Long, k As Long With ActiveChart ns = .SeriesCollection.Count np = .SeriesCollection(1).Points.Count For i = 1 To ns With .SeriesCollection(i) .HasDataLabels = True .ApplyDataLabels Type:=xlValue End With Next i For i = 1 To np For j = 1 To ns yval = .SeriesCollection(j).values pval = pval + yval(i) Next j For j = 1 To ns k = k + 1 With .SeriesCollection(j).Points(i).DataLabel .TEXT = .TEXT & " (" & format(Val(.TEXT) / pval, "0.0%") & ")" End With Next j Next i End With >テキストボックスに参照式を入れ込んでデータ一件ごとに貼り付けてみました。 データラベルを使えば良いと思います。 データセルをリンク参照表示するなら =データセル&"("&%値セル&")" といったような式でデータと%値を結合したセルを用意して置きます。 そして上記セルとデータラベルをリンクするようにします。 ≪参考≫ エクセル2007 棒グラフの中に別のデータを表示 http://okwave.jp/qa/q6400372.html >今後項目が追加されてしまうのが予想できてしまうので >自動更新をVBAに組み込むことはできるのでしょうか。 ワークシートのイベントプロシージャを使う事になると思います。 ≪参考≫ Excel(エクセル) VBA入門:ワークシートのイベント http://www.eurus.dti.ne.jp/yoneyama/Excel/vba/vba_event.html
お礼
早速のご回答ありがとうございます。 早速出社し、VBAを実行したのですが、 別シートに参考のために%値をだしておいたものとVBA実行後のデータを参照すると最初の一項目目の%は一致しますが、二項目目以降の%値が合致しません。 それぞれ一項目を100%とした場合の値と%値を同時表示させたいのですがどうしたらよいのでしょうか。 >データラベルを使えば良いと思います。 たしかにそうでした・・・。 やはり一項目ごとに設定すると恐ろしく時間がかかってしまいそうなのでVBAでできたら良いなぁと思っています。 またまたお知恵をお貸しいただけるとうれしいです。
お礼
お礼が遅くなりまして大変申し訳ございません。 いただいたコードで解決いたしました! VBA初心者のため、いただいたコードを解析することから勉強していきます! 本当にありがとうございました!