• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExcelVBAでグラフの色を設定)

ExcelVBAでグラフの色を設定

end-uの回答

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

データ範囲を指定してLoopし、年齢区分の内容によって色づけ処理する感じでしょうか。 ついでに、散布図系列よりデータ範囲を取得するところから始めるとすれば 下記のようなコードになります。 Sub test()   Dim sr As Series   Dim s() As String   Dim r  As Range   Dim i  As Long   With ActiveSheet.ChartObjects(1).Chart     .HasLegend = False     Set sr = .SeriesCollection(1)   End With   sr.MarkerBackgroundColor = vbBlue   sr.MarkerForegroundColor = vbBlue   s = Split(sr.Formula, ",")   '系列のSERIES関数をカンマで区切ってXValuesの範囲を取得して _    左に1列Offsetした範囲をLoopして調べる   For Each r In Excel.Range(s(1)).Offset(, -1)     i = i + 1     With sr.Points(i)       Select Case r.Value       Case "20代"         .MarkerBackgroundColor = vbRed         .MarkerForegroundColor = vbRed       End Select     End With   Next   Set sr = Nothing End Sub

backs
質問者

お礼

回答ありがとうございます。 グラフの操作をVBAでやったことがなかったのですが、Seriesという型の変数で参照範囲を取得するようなことができるのですね!? なるほど、Splits関数を使ってのこういう操作は全く知りませんでした。

関連するQ&A

  • エクセルの円グラフの空欄がある場合の色分けについて教えて下さい(>_<。)!!

    countIFで集計したモノをリンクさせたセルを円グラフのデータ元としているのですが… 例えば、 10代→3 20代→2 30代→5 40代→4と全てに数字が入っている場合はちゃんと色分け表示されますが、 10代→3 20代→0(空欄) 30代→5 40代→4 と1つでもデータが無い場合、残りの3つのデータが色分けされずに同じ色になってしまいます(/_・、) グラフは最初に自分で色分けをした(一番数が多いもの)のをコピーして、データ元を変えて使用しています。 空欄があっても残りのものを色分け出来る方法を教えて下さい!グラフの量がとても多いので自動的にそうなるように出来るでしょうか?? パソコンはvistaです。 回答宜しくお願いします。

  • Excel 2007 のグラフにコメントを表示

    Excel 2007 で血圧を記録し、VBAで縦軸を血圧値、横軸を日付にした任意の範囲の折れ線グラフを表示できるようにしています。 選択したグラフ範囲(日付範囲)に、別途指定したイベント発生日が含まれていれば、その日付の位置にフルスケールの縦線を表示させ、可能であればそれと共にグラフの適当な位置にその日付に関連したイベントの内容を表示させたいと思います。 イベント発生日にグラフに縦線を表示する手順は添付画像に示すように系列(イベント発生)を追加しイベント発生日のデータ欄に縦軸の最大目盛り値以上の数値を書き込んで、この系列を棒グラフに変更して縦線を表示しています。(棒グラフの幅は最小幅に設定) イベントの内容は別のセルに書き込んでおいて、そのセルを参照してグラフ上に表示させたいと思いますが、具体的な方法が浮かんで来ません。 よいアイデアがあれば教えてください。 よろしくお願いします。

  • ExcelVBAのコピーもしくは集計方法

    ExcelVBAについて質問させて下さい。 いくつもの区分に分かれたデータが以下のように並んでいます。(区分は80程度あります) A   | B | C | D | E | F | G | H | ------------------------------------------- 1 | 行ラベル | 11 | 12 | 13 | 14 | 15 | 21 | 22 | ------------------------------------------- 2 | 123456 | | | | | | | | ------------------------------------------- 3 |(性別:男)1| | | | | | | | ------------------------------------------- 4 | (年代)40 | 1 | 5 | | | | | | ------------------------------------------- 5 | (年代)45 | | | | 2 | | | | ------------------------------------------- 6 | (年代)50 | ------------------------------------------- … 16| (年代)100| 1 | 2 | 3 | 2 | 1 | | | ------------------------------------------- 17|(性別:女)2| ------------------------------------------- 18|(年代)40 | ------------------------------------------- … 30|(年代)100| ------------------------------------------- 31| 234567 | ------------------------------------------- 32|(性別:男)1| ------------------------------------------- 33| (年代)40| … ・「123456」「234567」は区分コードです。 ・( )を含めた文字は、実際の表にはありません。 ・区分ごとに「男」と「女」があり、それぞれ「40」から5才刻みで「100」まで年代があります。 ・行ラベル「11」「12」はあるデータ名を数値化したものです。  (1)区分コード  (2)性別  (3)行ラベル  (4)年代 以上の4つの条件が集約された表です。 ・この表は別にデータがあったのではなく、これを与えられました。マクロなどで加工していません。 ・年代は数値が入っていない場合には、行が無い場合があります。40代は何も数値がないので、45から始まるなど。 この表を使って何をしたいかというと、行ラベルの「12」「13」「14」「15」だけに絞り別シートに抽出し、区分コード別に表を作りたいのです。表を作成するときには、抜けている年代もきちんと入れて。例え値が0でも。 以前、ここでの質問で複数条件で一致した場合の集計方法を教えていただきましたので、A列をコピーして、「区分コード」「性別コード」を次のコードが出てくるまでコピーできれば同じことができると考えました。 ですが、次のコードが出てくるまでのコピーのコードの記述方法、列をコピーするので区分コードの行では、性別コードの部分もコピーして上書きしてしまう方法が分かりませんでした。 一番は、こんなややこしい表の集計方法を教えていただけましたら幸いですが、もしくは、次の値が出てくるまで同じもののコピーの繰り返しと特定の文字は無視して上書きの方法を教えて下さい。 例えばなのですが、「123456」がある列に対して、「1を空白にする」という置換を行ったら「23456」になってしまいますか? 質問が多くて申し訳ございません。

  • マクロでグラフのデーター範囲の変更

    すみません、シート1に埋め込みグラフが3つあります。それぞれ系列1、2、3とデーター範囲が設定されています。それで「項目軸ラベルに使用」にもデータ範囲が設定されています。 その、データー範囲をセルの最終行まで変更するマクロを作ろうと思っているのですが、うまくいかないので誰か教えて頂けませんでしょうか? 下記の様に各列の下にデータが入っています。更にその下にデータが追加されていくのですが、 それに伴ってデーター範囲も変更したいのですが何か良い方法を教えて下さい。 SetSourceDataとかで挑戦しようとしたのですが、各系列をどのように指定してよいのか分からず困ってしまいました。 どうか宜しくお願いします。  A列(項目軸ラベル) B列(系列1) C列(系列2) D列(系列3) =グラフ1    E列(項目軸ラベル) F列(系列1) G列(系列2) H列(系列3) =グラフ2  I列(項目軸ラベル) J列(系列1) K列(系列2) L列(系列3) =グラフ3

  • EXCELVBAでコピー・について

    (例) (例)のようにあった時、暑いはA4まで寒いはA7までコピーしたいのですが、   A         データは別のデータから貼り付けしているため、時々によって空白セルの     1 暑い        幅が違います。要するにA1は「寒い」の一つ手前のセルまでコピーと認識 2            させたいのですが、どう入力すればよいか教えてください 3 4 5 寒い 6 7 8 冷たい 9 10

  • Excelで、ドットでセルを分割する。

    ドットでセルを分割する方法を教えていただきたいのですが、なにか良い方法はないものでしょうか? 具体的には、Excel2000において、 A1セルに、名前.性別.身長.体重.誕生日.年齢.職業 A2セルに、名前.性別.身長.体重.誕生日.年齢.職業 A3セルに、名前.性別.身長.体重.誕生日.年齢.職業 A4セルに、名前.性別.身長.体重.誕生日.年齢.職業 ・・・ と続いていたとします。 これを、   A  B  C  D  E  F  G 1 名前 性別 身長 体重 誕生日 年齢 職業 2 名前 性別 身長 体重 誕生日 年齢 職業 3 名前 性別 身長 体重 誕生日 年齢 職業 4 名前 性別 身長 体重 誕生日 年齢 職業 などと、各セルに振り分けたいのですが、コピー&ペーストをしていると腱鞘炎になりかねません。そこで、ドットで分割できないものかと試みましたが、方法を見つけることが出来ませんでした。 ドットで分割する方法以外にもお勧めの方法があれば、教えていただけると幸いです。 よろしくお願いします。

  • EXCELでコピーしたグラフのデータ範囲変更について

    EXCELでコピーしたグラフのデータ範囲変更について シートをコピー([ Ctrl ]キーを押しながらドラック&ドロップ)をした際 コピーしたシートのグラフのデータ範囲がコピー先のセルになりません。 毎回データ範囲を選択し直しているのですが、コピーしたシートのグラフデータ範囲がコピー先シートのセルに出来るような方法はあるのでしょうか? 是非、教えてください。宜しくお願いします。 ちなみに同じブックのシートをを別のPCで開いてシートのコピーをすると、グラフはちゃんとコピー先シートのデータを参照します。 パソコンの設定が悪いのでしょうか? よろしくお願いいたします。

  • エクセル グラフ データ系列入力で数式設定

    エクセルのグラフ散布図作成で、データの選択を通常は数値入力、もしくはセル指定をしますが、数値とセル指定の混合、MAX関数などの数式を入れると入力エラーになってしまいます。入力の仕方に問題があるのでしょうか?もしくはこのような入力は出来ないのでしょうか? 例えば、データの選択で(1)と(2)のようにすると入力エラーになってしまいます。 (1)ある範囲のMAX値のデータをプロットさせたい 系列Xの値 1,9 系列Yの値 1,max(Sheet1!$C$16:$C$25) (2)一つの値だけセル指定 系列Xの値 1,9 系列Yの値 1,Sheet1!$C$18 すみませんが、どなたかよろしくお願いします。

  • 分布グラフ作成について

    すみません誰かご教授ください。 年齢別に体重を計ったデータがあるのですが、そのデータの横軸を 年齢にして年齢ごとの体重データを表示したいと思っているのですが 上手くいきません。 誰か教えて頂けませんでしょうか。 図の様に表示したいのですが、よろしくお願いします。

  • EXCELで書いた折れ線グラフの表示範囲の設定について教えて下さい。

    Microsost Excel 2002 (10.6501.6626) SP3 、Windows XP Pro を使っています。   横軸に年月の目盛りを、縦軸に体重の目盛りを設定し今迄正しく表示されていました。 ところが、2006年2月11日までは表示されましたが、それ以降表示されません。 グラフの元データのデータ範囲のタブでは、 =運動成果!R2C2:R1000C2,運動成果!R2C7:R1000C8 になっています。関係ないと思いつつ、念のためにR1500に変更しても変化はありませんでした。 系列タブみもちろんR1500になっています。 また、現在のグラフで、横軸の書式設定から目盛タブを見ると最大値が、2006/2/11になっていました。 また、最大値の左のボックスにはチェックを外してありました。 そこで、最大値の値を2007/2/11にしても、2006年の2月16日と2月18日の値がグラフに表示されません。 ちなみに、2006年の2月11日のデータはEXCELの857行目に、2月16日のデータは858行目に、そして2月18日のデータは859行目に書かれています。 データは逐次増えていくので、元データの範囲は大きめに設定しておき、実際に表示される範囲はデータが記入されている範囲に留めて置きたいのですが、どのように設定したら良いのでしょうか。