• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:積み上げグラフ 系列ごとの自動塗り分け)

積み上げグラフ 系列ごとの自動塗り分け

このQ&Aのポイント
  • 現在、オフィス2003で業務の時刻表を作成しています。写真(左上)のように業務内容と所要時間ような表があり、(右上)のようなグラフにして輸送の部分だけを色付き、他を白色で塗りわけしています。しかし(左下)のように、順番が1行でも変わると塗り分もずれてしまます。現在、この塗り分けを自動化するためにマクロやVBAなどを考えていて、以下のようなVBAを作り実行をさせましたが、思うように表示されません。何かよい方法は(VBAやマクロなども踏まえて)ありますでしょうか? ご教授宜しくお願いします。
  • 積み上げグラフの系列ごとに自動的に色を塗り分ける方法を探しています。現在、オフィス2003を使用して業務の時刻表を作成しています。写真のような表をグラフに変換し、輸送の部分だけを色付き、他を白色で塗りわけています。しかし、系列の順番が変わると色の塗り分けもずれてしまいます。この問題を解決するために、マクロやVBAを使用して自動化する方法を模索していますが、うまく表示されません。どのような方法を使えば塗り分けを正確に行うことができるでしょうか?
  • 積み上げグラフの系列ごとに自動的に色を塗り分ける方法を探しています。現在、オフィス2003を使用して業務の時刻表を作成していますが、系列の順番が変わると色の塗り分けがずれてしまいます。この問題を解決するために、マクロやVBAを使用して塗り分けを自動化しようとしていますが、思うように表示されません。皆さんには、この問題を解決するための良い方法があるでしょうか?VBAやマクロなどを組み合わせることで、正確な塗り分けを実現する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

★1の行で、Split(scname, " ")では配列になるだけです。 提示例ではSplitする必要は無いと思います。 Splitする必要があるなら Split(scname, " ")(0) とか番号を付けて"輸送"の部分を取り出す必要があります。 colidx = 0 With ActiveChart For i = 1 To .SeriesCollection.Count scname = .SeriesCollection(i).Name 'Select Case Split(scname, " ") '---★1 Select Case scname Case "輸送": colidx = 4 '---白なら2 End Select If colidx <> 0 Then '---場合分けする .SeriesCollection(i).Interior.ColorIndex = colidx colidx = 0 '---初期化する End If Next End With Select Case を使わないでも十分だと思います。 colidx = 4 With ActiveChart For i = 1 To .SeriesCollection.Count scname = .SeriesCollection(i).Name If scname = "輸送" Then .SeriesCollection(i).Interior.ColorIndex = colidx End If Next End With あと線の色がどうなるか未確認です。

acchin_99
質問者

お礼

思い通りの動作が出来ました! まだまだ勉強不足なので、いろいろ覚えたいと思います。 本当にありがとうございましたm(__)m

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Office 2003 excel vbaでグラフの種類を一系列毎に判

    Office 2003 excel vbaでグラフの種類を一系列毎に判定するマクロを組もうとしております。マクロの対象となるグラフには合計で4系列が含まれており、上から棒グラフ、棒グラフ、マーカーなしの折れ線グラフ、マーカー付のおれせんグラフとなっています。 以下のマクロを実行して、「xlbar」「xlbar」「xlline」「xlline」とメッセージが返る事を想定していたのですが、実際には「51」「51」「65」「4」とメッセージが表示されます。 どこで間違っているのかご教示いただけますと幸いです。 Sub 判定() Dim i As Integer Dim seriesCounts As Integer seriesCounts = ActiveChart.SeriesCollection.Count For i = 1 To seriesCounts MsgBox ActiveChart.SeriesCollection(i).ChartType Next i End Sub

  • Excelでのグラフ系列に関するマクロ

    下記が上手く動作しないので、皆さまのお知恵を拝借したく思います。 概略を言いますと、散布グラフ選択時にmt02数の系列を増やすVBAです。増やした系列情報として基準系列データを与えており、その後置換処理をしています(基準系列=mt03、今は一時的に1系列目) Sub 系列情報の取得 Dim fn As String Dim mt02, mt03 As Integer Dim i, k As Integer Dim new_k As String fn = ActiveChart.SeriesCollection(mt03).Formula k = 1 Do Until k > mt02 new_k = 系列追加と参照先設定((i), (k), (fn)) k = k + 1 Loop ' グラフが選択されていない状態になるとココへ Chart_Error: msg = MsgBox("NG", vbCritical, "error") End Sub Function 系列追加と参照先設定(i2 As Integer, k2 As Integer, fn2 As String) Dim fn_new As String ActiveChart.SeriesCollection.NewSeries ' 系列情報を置換、一時的に1系列目を基準データとしている i2 = i2 + k2 fn_new = Replace(fn2, "1)", i2 & ")") ActiveChart.SeriesCollection(i2).Formula = fn_new End Function 不具合箇所としては、Sub内でDo文が条件外となるとグラフが選択されていないと認識されてNG処理へ移行する点です。For文にしても不可、グラフを再選択させてもその瞬間にNGとなります。

  • グラフマクロで系列を変数にする方法を教えてください

    エクセルのグラフマクロについて質問します。 系列のxの値(Yの値も)の設定で、 グラフ化したいワークシートと範囲を変数にすることはできますか? 目的は、複数あるシートの複数のセルをグラフ化したい、というものです。 変数にてシート名と範囲を指定したいです。 ↓のようなプログラムを作成してみましたが、どうもうまく動きません。 12行目で止まってしまいます。 13行目はでたらめですが、範囲も変数bにできないかなぁと、勝手にイメージで作ってみました。 Sub () n = Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To n Sheets("SHEET1").Select Range("A" & i).Select a = ActiveCell.Value Sheets(a).Select Charts.Add ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets(a).Range("V22") ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).XValues = "=sheets(a)!R2C4:R5C4" ActiveChart.SeriesCollection(1).Values = "=sheets(a)!range(b)" ActiveChart.Location Where:=xlLocationAsObject, Name:=Sheets(a) Next i End Sub 当方、マクロかじりたての初心者です。 どなたか、よろしくおねがいします!

  • 自動グラフ作成マクロの作り方に関してアドバイスを下さい

    Sub Macro4() For i = 4 To 8 Charts.Add ActiveChart.ChartType = xlXYScatterSmoothNoMarkers ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).XValues = "=zero!R13C1:R1013C1" ActiveChart.SeriesCollection(1).Values = "=zero!R13C" & i & ":R1013C" & i ActiveChart.SeriesCollection(1).Name = "=zero!R12C" & i ActiveChart.Location Where:=xlLocationAsNewSheet With ActiveChart .HasTitle = False .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "x axis" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "y axis" End With Next End Sub これはzeroというシートから自動的に複数のグラフを作成するマクロなのですが、 これを現在選択しているシートにするためにはどうすれば良いのでしょうか? それと作成するグラフの名称を自分で設定したセルの内容にしたいのですが、 どうすれば良いのでしょうか? よろしくお願い致します。

  • 2本ある折れ線グラフの範囲をVBAで更新したい

    2本ある折れ線グラフの範囲をVBAで更新したいと考えております。 excel2003を使っています。 グラフ1の中に系統がひとつなら以下の内容でうまくいきますが、2本ある場合どうすれば 良いか分からず困っております。 Sub サンプル() Dim myPicture As StdPicture Dim buf As String Dim myR With Worksheets("Sheet1") myR = Application.WorksheetFunction.Count(Worksheets("Sheet1").Range("A5:A100")) End With row1 = "5" row2 = myR col1 = "A" Sheets("Sheet2").Activate ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.ChartArea.Select ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range(col1 & row1 & ":" & col1 & row2 + 4), PlotBy:=xlColumns End Sub 系統を増やした場合の書き方をどなたかお教え頂けませんか。 どうぞ、よろしくお願い致します。

  • エクセルVBA 自動設定のグラフ系列色のRGB

    VBA初級者です。 エクセルで自動設定されたグラフ系列色(点のみ、線なし)の RGBを取得するにはどうしたらいいのでしょうか? 系列色を設定する方法は以下のようにすればいいようですが。。。 ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.SeriesCollection(1).Select    With Selection .MarkerBackgroundColorIndex = 色番号 / xlAutomatic .MarkerForegroundColorIndex = 色番号 / xlAutomatic    または、     .MarkerBackgroundColor = RGB(?,?,?) .MarkerForegroundColor = RGB(?,?,?) End With 私がやりたいことは、上のような記述でxlAutomaticで自動的に設定された ある系列の色を他の系列にも適用したいのです。もう少し具体的に言うと、 系列1,2、系列3,4、のように隣り合う系列を同色にしたいのです。 系列数が少なければ各組合せに対してRGBを設定すればいいのですが、 系列が大量になってきますと、自分でRGBを設定するのも大変で、 系列1,3,5・・・に関しては、xlAutomaticで自動設定して、その色を 系列2,4,6・・・に適用しようと思ったのですが、よくわかりませんでした。 ActiveChart.SeriesCollection(1).Select  With Selection .MarkerBackgroundColorIndex = xlAutomatic Color = MarkerBackgroundColorIndex End With ActiveChart.SeriesCollection(2).Select  With Selection .MarkerBackgroundColorIndex = Color End With などとしてみましたがダメでした。恥ずかしながら基礎を 理解できていないので詳しく説明していただけると幸いです。 よろしくお願いいたします。

  • エクセルのグラフの操作

    エクセルのグラフの操作 初歩的でスミマセンが、よろしくお願いします。 エクセルのグラフのデータの内容を1セルずつ下に下げて、それを400回繰り返したいんです。 'wave-h'!R402C3と'wave-h'!R402C4を 'wave-h'!R403C3と'wave-h'!R403C4にして 'wave-h'!R867C3と'wave-h'!R867C4にまでしたいのですが。 do loopを考えてるんですが、引数?が上手くいかなくて・・・。 ついでにその後グラフをコピーしてペイントに貼り付けてJPGで保存する予定です。 これを400回以上繰り返すんですが、ペイントのコピーのところまではエクセルのVBAで可能でしょうか。よろしくお願いします。 ActiveSheet.ChartObjects("グラフ 4").Activate ActiveChart.SeriesCollection(2).Select ActiveChart.SeriesCollection(2).XValues = "='wave-h'!R402C3" ActiveChart.SeriesCollection(2).Values = "='wave-h'!R402C4" ActiveChart.ChartArea.Select ActiveChart.SeriesCollection(2).Select ActiveChart.ChartArea.Select ActiveChart.ChartArea.Copy

  • Excel マクロでグラフの凡例の位置を変更したい

    はじめまして。 Excelマクロ初心者です。 現在、Excelのグラフの凡例の位置を変更するマクロが作れなくて困っております。 =前提条件=     ・マクロを記録するbook(1)とグラフを含むbook(2)は別のファイル     ・book(1)よりマクロを実行し、book(2)を開き、グラフの凡例の位置を変えたい =book(2)の構成=     ・複数のシートが存在(Hiddenも存在)     ・各シートにグラフが複数存在 =現時点で作成したマクロ= Sub graph()   Workbooks.open "C:\********\book(2).xls"   Workbooks("book(2).xls").Active   Dim i AS Integer, wsCnt AS Integer i = 0 wsCnt = Worksheets.Count   For i = 0 To wsCnt Worksheets(i).Active If ActiveSheet.Visible = -1 - xlSheetVisibe Then For Each ChartObject In ActiveSheet.ChartObjects      With ActiveChart ActiveChart.ChartArea.Select ActiveChart.HasLegend = True ActiveChart.Legend.Select Selection.Position = xlBottom End With Next ChartObject End If Next i End Sub 現在、各シートがActiveになることまでは確認できています。 各グラフを掴めているかは確認できておりません。 以上となります。 ご多忙とは思いますが、ご教授いただけると幸いです。 宜しくお願い致します。

  • excel2007でグラフの書式設定をするマクロ

    excel2003で作成したマクロで、excel2003上では動作するのですが、excel2007ではエラーになります。 調べた限りでは、excel2007でVBAの仕様が変わったということも無いようですが、新しくexcel2007でマクロを記録してみてもエラーになり、困っています。 マクロの内容は、グラフの系列にラベルの書式設定をするというものです。 エラー内容「'HasDataLabels' メソッドは失敗しました: 'Series'オブジェクト」 ---------------------------- Sub LabelSet() Dim col_srs As SeriesCollection Dim obj_srs As Series          Sheets("Sheet1").ChartObjects(1).Activate     Set col_srs = ActiveChart.SeriesCollection     'データ系列ごとに個々の系列名を表示     For Each obj_srs In col_srs       With obj_srs         .HasDataLabels = True         .DataLabels.ShowSeriesName = True         .DataLabels.ShowValue = True         .DataLabels.Separator = Chr(10)       End With     Next End Sub ----------------------------

  • グラフの自動描画を行うときに系列名を非表示に

    下記のマクロでグラフを自動描画しています。 この中で、いくつかの点で自分の思うような描画ができていません。今は、描画後に手動にて対応していますが、できることならその手間を省きたく思っています。 ・系列名は不要 ・縦軸、横軸のフォントサイズを指定したい ・データラベルが「0(ゼロ)」の場合は表示しない 何しろマクロ初心者なものです。ご教示をお願いします。 Sub グラフ作成() With ActiveSheet.Shapes.AddChart.Chart .ChartType = xlColumnClustered .SetSourceData Range("V5:W49") End With Dim i As Long With ActiveSheet.ChartObjects(1).Chart For i = 1 To .SeriesCollection.Count .SeriesCollection(i).HasDataLabels = True Next i End With With ActiveSheet.ChartObjects(1).Chart .HasTitle = True .ChartTitle.Characters.Text = Range("W2") & "製造年別グラフ" With .ChartTitle.Format.TextFrame2.TextRange.Font .Size = 6 .Fill.ForeColor.ObjectThemeColor = msoThemeColorAccent2 End With With .Axes(xlCategory, xlPrimary) '---主軸項目軸 .HasTitle = True '---軸ラベル表示 .AxisTitle.Text = "製造年" '---軸ラベル文字列設定 .AxisTitle.Font.Size = 4 End With With .Axes(xlValue, xlPrimary) '---主軸数値軸 .HasTitle = True '---軸ラベル表示 .AxisTitle.Text = "数量" '---軸ラベル文字列設定 .AxisTitle.Font.Size = 4 End With End With End Sub

専門家に質問してみよう