縦積上グラフの合計値をデータラベルの形で既存のグラフに表示するマクロを作成しました。
現状では行方向に県名(要素)、列方向に男/女人口(系列)を並べ、女人口の隣の列に各県の男女の合算人口を並べて”1”で参照させています(データラベルにしたいのでValueをTEXT値にしています)。
マクロでは、既存グラフの要素数を取得して、同数の要素(値は全てゼロ)をもつ配列を新系列に加え、上でTEXT化した合計値をデータラベルの.TEXTに設定するという方法をとっています。
現状の行列の配置の場合には下のマクロが期待通りの実行結果を返してくれますが、既存グラフのデータ範囲の設定で行/列の向きを逆にし、性別毎の合計値を①で参照させた場合には”2”のように要素数と”1”で取得したデータ数が一致しないという結果が返ります。
”3”付近で間違いをしている気もするのですが、どなたかご指摘いただけますと幸甚です。
Sub Test()
Dim newRange As Range
Dim newSC As Variant ' Σ系列の配列変数
Dim SCcnt As Integer ' SeriesCollectionの変数
Dim SC1Value As Variant ' SeriesCollection(1)の配列
Dim i As Integer
Dim A1 As String 'A1形式→R1C1形式の変換に使用
Dim R1 As String 'A1形式→R1C1形式の変換に使用
Dim R1withSheetname As String 'A1形式→R1C1形式の変換に使用
Set newRange = Application.InputBox(Prompt:="合計欄の参照を選択してください。", Type:=8) '”1”
newSC = newRange
With ActiveChart
SCcnt = .SeriesCollection.Count
SC1Value = .SeriesCollection(1).Values '要素数を取得 '”3”
If UBound(newSC) <> UBound(SC1Value) Then
'”2”
MsgBox ("(注意)選択したデータの個数が系列1のデータ個数と不一致。" & vbCr & vbCr & _
"選択範囲のデータ個数:" & (UBound(newSC) - LBound(newSC)) & vbCr & vbCr & _
"系列1のデータ個数:" & UBound(SC1Value))
End If
.SeriesCollection.NewSeries
SCcnt = SCcnt + 1
With .SeriesCollection(SCcnt)
.Values = newSC
.Name = "Σ"
End With
.PlotArea.Select
.ApplyDataLabels AutoText:=True, ShowValue:=True
For i = 1 To UBound(newSC) '系列数を取得
'R1C1形式に変換
A1 = newRange(i).Address
R1 = Application.ConvertFormula(Formula:=A1, _
fromReferenceStyle:=xlA1, _
toReferenceStyle:=xlR1C1, ToAbsolute:=xlAbsolute)
R1withSheetname = "=" & ActiveSheet.Name & "!" & R1
With .SeriesCollection(SCcnt)
.DataLabels.Select
.Points(i).DataLabel.Select
With Selection
.Text = R1withSheetname
.Position = xlLabelPositionInsideBase
End With
End With
Next i
End With
End Sub
No.2ベストアンサー
- 回答日時:
>(データラベルにしたいのでValueをTEXT値にしています)。
newSC = newRange
で、値化していることを言っているのですか?
>マクロでは、既存グラフの要素数を取得して、
>同数の要素(値は全てゼロ)をもつ配列を新系列に加え、
>上でTEXT化した合計値をデータラベルの.TEXTに設定する
提示されたコードと一致していないと思います。
追加した系列(NewSeries)の値(Values)には、InputBoxで指定した合計値セルデータ(newSC)をセットされています。
ということで、(値は全てゼロ)にはならないですね。
>現状の行列の配置の場合には下のマクロが期待通りの実行結果を返してくれますが、
>既存グラフのデータ範囲の設定で行/列の向きを逆にし、
>性別毎の合計値を①で参照させた場合には
>”2”のように要素数と”1”で取得したデータ数が一致しない
>という結果が返ります。
配列の次元数の問題ではないでしょうか。
UBoundの第2引数に次元番号を指定すればどうなるでしょうか。
例えば
If UBound(newSC, 2) <> UBound(SC1Value) Then
あるいは
If newRange.Count <> UBound(SC1Value) Then
としても良いかも知れません。
Excel VBAメモ:UBound関数と多次元配列
http://note.phyllo.net/?eid=539332
Selectしなくても可能です。
R1C1変換もしなくても可能です。
Dim newRange As Range
Dim dd As Variant
Dim n As Integer
Dim i As Integer
Set newRange = Application.InputBox(Prompt:="合計欄の参照を選択してください。", Type:=8) '”1”
With ActiveChart
n = .SeriesCollection(1).Points.Count '要素数を取得 '”3”
If n <> newRange.Count Then
MsgBox ("合計値データ個数が、系列1のデータ個数と不一致。")
Exit Sub
End If
'//0値ダミーデータ
For i = 1 To n
dd = dd & "," & 0
Next i
dd = Replace(dd, ",", "", 1, 1)
'//ダミー系列の追加とデータラベル表示
With .SeriesCollection.NewSeries
.Values = "{" & dd & "}"
.Name = "Σ"
.ApplyDataLabels
.DataLabels.Position = xlLabelPositionInsideBase
For i = 1 To n
With .Points(i).DataLabel
.Text = "=" & ActiveSheet.Name & "!" & newRange(i).Address
End With
Next i
End With
End With
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelでバイナリデータを読み込...
-
Excel ピボットテーブル フィ...
-
EXEL 要素数の異なる複数データ...
-
エクセル2010でグラフのリンク...
-
商品別、日別の売上件数の表を...
-
ピポットテーブルで複数のグラ...
-
illustrator でのグラフ作成 ...
-
Excelのグラフで凡例の表示順番...
-
テキストボックス内の文字のふ...
-
Excelで数値→文字列変換で指数...
-
エクセル
-
塗りつぶしの色をコピーするには
-
エクセルでふりがなごとリンク...
-
Excelの関数について、特定の文...
-
たくさん作った同じ設定のグラ...
-
Excel:とびとびの日付のデータ...
-
エクセルでグラフタイトルが折...
-
日付が1年以内になると他のセル...
-
EXCELで海の潮見表(タイドグラ...
-
【エクセル】表の中の文字だけ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel ピボットテーブル フィ...
-
ExcelでNA()を使わずにプロット...
-
EXEL 要素数の異なる複数データ...
-
Excelで数直線の作り方
-
Excelでバイナリデータを読み込...
-
パワポに張り込まれたグラフか...
-
エクセル(EXCEL)で、データを3...
-
エクセルでこのようなヒステリ...
-
Sma4
-
Excelで扱えるデータ数を超える...
-
図のような散布図の作り方を教...
-
Excel2003 標準のグラフの種類...
-
CSVからエクセル・クロマト...
-
エクセル2010でグラフのリンク...
-
excel 方形波
-
illustrator でのグラフ作成 ...
-
Excelのグラフで凡例の表示順番...
-
エクセルの折れ線グラフ 時間...
-
エクセル 日ごとにデータを追...
-
エクセルデータの集計、一つの...
おすすめ情報