VBAでGANTのグラフを自動作成したい

このQ&Aのポイント
  • VBAを使用して、Office365でGANTのグラフを自動作成したいです。
  • 現在は手動でデータ範囲を設定しているため、増えると手間がかかります。
  • また、グラフには工程間の青い線を入れたいですが、現在はコピペで貼り付けている状況です。
回答を見る
  • ベストアンサー

VBAでGANTのグラフを作成したい

office365 ①GANT_DATAシートに計画と実績のGANTデータ ②GANTシートにガントのグラフを表示 したいです。 ①を元に②のグラフを自動で作成したい ガント表示させる構成は kotei1からkotei6までの計画開始計画終了実績開始実績終了の日時データがあり、Serial1からSerial2,Serial3とGANT_DATAのA列でデータがなくなるまでのガントグラフを表示。 Serialは+30行毎に計画と実績データをデータベースから持ってくる構成。 現状は、GANTシートにひな形としてのグラフを用意しておき、 データ範囲等を1ケ1ケグラフへ反映させてガントのグラフを表示させています。 下記のイメージです。 GANTシートでのSerial1のグラフは グラフデータの範囲:=GANT_DATA!$A$9:$C$20 系列1の系列値:=GANT_DATA!$B$9:$B$20 系列2の系列値:=GANT_DATA!$C$9:$C$20 軸ラベルの範囲:=GANT_DATA!$A$9:$A$20 GANTシートでのSerial2のグラフは グラフデータの範囲:=GANT_DATA!$A$39:$C$50 系列1の系列値:=GANT_DATA!$B$39:$B$50 系列2の系列値:=GANT_DATA!$C$39:$C$50 軸ラベルの範囲:=GANT_DATA!$A$39:$A$50 の様にガントシートのデータ範囲を設定しておき、 GANT_DATAへデータをデータベースから持ってきたらガントのグラフが表示できる構成にしているのですが、グラフの数が増えると上記データ範囲の設定をするのも大変なので、①のシートから②のガントグラフを自動で作成できる様にしたいです。 VBAベタで教えていただきたくよろしくお願いします。 グラフの軸設定はなんとかなると思うので、根本のグラフ表示部分を作成する構成を教えていただけたらと思います ※ GANTグラフには工程間に細く青い線をしきりで入れてます。 これも実現化であれば教えていただきたく。 現状は実線をグラフへコピペで貼り付けています。

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.3

コードが書けたのでポストします。 ・GANTシートD列以降は4列/24時間 です。 ・マクロが書き込んでいるのは、帯状態の図と、3、23、43...行の日付です。  他の罫線やb列などは手作業で埋める前提です。 ・計画開始日時>計画終了日時、実績開始日時>実績終了日時 は、エラーとせず無視しています。 ・Nullの日時の場合も無視しています。 ・具体的にはコードを読んでください。 不明点、間違い、改修店などあれば返信してください。 Option Explicit '//共通定数、変数----------------------------- Const BeltHHi = 0.6  '行高とベルト高の比 Const SC = 30 'データブロックの行数 Const GC = 20 'ガントチャートブロックの行数 Dim BDay As Date '描写期間の開始日 Dim EDay As Date '描写期間の終了日 Dim DSht As Worksheet 'データシート Dim GSht As Worksheet 'ガントチャートシート '//メイン  --------------------------------- Sub main()  Set DSht = ThisWorkbook.Sheets("GANT_DATA")  Set GSht = ThisWorkbook.Sheets("GANT")  Call GetBDay_EDay  Call DelBelt  Call MakeBeltMain End Sub '//描写期間の開始日、終了日取得--------------- Sub GetBDay_EDay()  Dim SCnt As Long 'シリーズカウンター  Dim KCnt As Long '行程カウンター  Dim c As Long '列カウンター    BDay = DateSerial(3000, 1, 1)  EDay = 0  SCnt = 0  Do   If DSht.Cells(SCnt * SC + 1, 1).Value = "" Then Exit Do   For KCnt = 1 To 6    For c = 2 To 5     With DSht.Cells(SCnt * SC + KCnt + 1, c)      If .Value <> "" Then       If .Value > EDay Then EDay = .Value       If .Value < BDay Then BDay = .Value      End If     End With    Next c   Next KCnt   SCnt = SCnt + 1  Loop End Sub '//帯図形全数削除----------------------------- Sub DelBelt()  Dim SCnt As Long 'シリーズカウンター  Dim KCnt As Long '行程カウンター  Dim shp As Shape  Dim wkName As String    SCnt = 0  For SCnt = 0 To 100   For KCnt = 1 To 6    wkName = "Belt" & Format(SCnt, "000") & Format(KCnt, "00")    On Error Resume Next    Set shp = GSht.Shapes(wkName & "P")    shp.Delete    Set shp = GSht.Shapes(wkName & "J")    shp.Delete    On Error GoTo 0   Next KCnt  Next SCnt End Sub '//帯図形全数描写----------------------------- Sub MakeBeltMain()  Dim SCnt As Long 'シリーズカウンター  Dim KCnt As Long '工程カウンター  Dim BPos As Double '左軸位置  Dim Nm As String  '図形名  Dim Bx As Double  '開始横位置  Dim By As Double  '開始縦位置  Dim Hi As Double  '高さ  Dim Wi As Double  '幅  Dim Cr As Long  '色  Dim WperHi As Long  '1日当たりの表示幅  Dim TateHosei As Long  Dim i As Long    Hi = GSht.Rows(4).RowHeight * BeltHHi  BPos = GSht.Cells(2, 4).Left  WperHi = GSht.Cells(4, 8).Left - GSht.Cells(4, 4).Left  TateHosei = GSht.Rows(4).RowHeight * ((1 - BeltHHi) / 2)  Hi = GSht.Rows(4).RowHeight * BeltHHi  BDay = Int(BDay)  EDay = Int(EDay)    SCnt = 0  Do   If DSht.Cells(SCnt * SC + 1, 1).Value = "" Then Exit Do      GSht.Rows((SCnt * GC) + 3).ClearContents   For i = 0 To EDay - BDay    GSht.Cells((SCnt * GC) + 3, ((i + 1) * 4)).Value = BDay + i   Next i      For KCnt = 1 To 6    Nm = "Belt" & Format(SCnt, "000") & Format(KCnt, "00") & "P"    Bx = (BPos + (DSht.Cells(SCnt * SC + KCnt + 1, 2).Value - BDay) * WperHi)    By = GSht.Cells(SCnt * GC + (KCnt * 2) + 2, 1).Top + TateHosei    Wi = (DSht.Cells(SCnt * SC + KCnt + 1, 3).Value - _       DSht.Cells(SCnt * SC + KCnt + 1, 2).Value) * WperHi    Cr = rgbTurquoise '計画のベルトの色    MakeBelt GSht, Nm, Bx, By, Hi, Wi, Cr       Nm = "Belt" & Format(SCnt, "000") & Format(KCnt, "00") & "J"    Bx = (BPos + (DSht.Cells(SCnt * SC + KCnt + 1, 4).Value - BDay) * WperHi)    By = GSht.Cells(SCnt * GC + (KCnt * 2) + 3, 1).Top + TateHosei    Wi = (DSht.Cells(SCnt * SC + KCnt + 1, 5).Value - _       DSht.Cells(SCnt * SC + KCnt + 1, 4).Value) * WperHi    Cr = rgbGreenYellow '実績のベルトの色    MakeBelt GSht, Nm, Bx, By, Hi, Wi, Cr      Next KCnt   SCnt = SCnt + 1  Loop End Sub '// 帯描写ルーチン----------------------- Sub MakeBelt(Sh As Worksheet, Nm As String, _     Bx As Double, By As Double, Hi As Double, Wi As Double, Cr As Long)  Dim shp As Shape  On Error Resume Next  Set shp = Sh.Shapes(Nm)  shp.Delete  On Error GoTo 0  If Wi > 0 Then   Set shp = Sh.Shapes.AddShape(msoShapeRectangle, Bx, By, Wi, Hi)   shp.Name = Nm   shp.Fill.ForeColor.RGB = Cr   shp.Line.Visible = True '外枠の有無  End If End Sub

3620313
質問者

お礼

ありがとうございます。 時間表示の所は、想定以上にわかりやすい構成でした。 これでばっちりです。

3620313
質問者

補足

コードありがとうございます。 1点教えていただきたい内容があります。 データベースからデータを持ってきた時、実績終了日時が空欄の場合があります。 この状態だと、 '//帯図形全数描写----------------------------- Sub MakeBeltMain() の Wi = (DSht.Cells(SCnt * SC + KCnt + 1, 5).Value - _ DSht.Cells(SCnt * SC + KCnt + 1, 4).Value) * WperHi の部分で型が一致しません のエラーになります。 終了日時が入っていないのでWiが負の値になってエラーになるのはわかるのですが、いったんこの空欄の日時を埋めて実行するとエラー発生しなくなり、再度同じセルを削除して空欄にしてマクロ実行した場合は、エラー発生しなくなります。 つまり、 イニシャル時にマクロ実行で、実績終了日時が空欄だとエラー。 一度実績終了日時を埋めた後で、マクロ実行してセルの内容を削除した場合はエラーが発生しなくなります。 実績終了が空欄の日時は、現在日時で書き込むので、ガント表示には支障ないのですが、上記エラー発生の有無を教えていただけないでしょうか。

その他の回答 (5)

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.6

ごめんなさい、#5で私が示したコードの場合 実績終了日時が空欄の場合に、計画側も描写しないコードでした。 3620313さんの示したコードでいいと思います。

3620313
質問者

お礼

ありがとうございます。 教えていただいたマクロを展開して運用させていただいています。 また、いきづまったらよろしくお願いします。

3620313
質問者

補足

いろいろとありがとうございます。 とても助かりました(^^)/

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.5

いいと思います。なお、私だったら、 無駄にコードを走らせないために '//帯図形全数描写----------------------------- Sub MakeBeltMain()  Dim SCnt As Long 'シリーズカウンター  Dim KCnt As Long '工程カウンター  Dim BPos As Double '左軸位置  Dim Nm As String  '図形名  Dim Bx As Double  '開始横位置  Dim By As Double  '開始縦位置  Dim Hi As Double  '高さ  Dim Wi As Double  '幅  Dim Cr As Long  '色  Dim WperHi As Long  '1日当たりの表示幅  Dim TateHosei As Long  Dim i As Long    Hi = GSht.Rows(4).RowHeight * BeltHHi  BPos = GSht.Cells(2, 4).Left  WperHi = GSht.Cells(4, 8).Left - GSht.Cells(4, 4).Left  TateHosei = GSht.Rows(4).RowHeight * ((1 - BeltHHi) / 2)  Hi = GSht.Rows(4).RowHeight * BeltHHi  BDay = Int(BDay)  EDay = Int(EDay)    SCnt = 0  Do   If DSht.Cells(SCnt * SC + 1, 1).Value = "" Then Exit Do      GSht.Rows((SCnt * GC) + 3).ClearContents   For i = 0 To EDay - BDay    GSht.Cells((SCnt * GC) + 3, ((i + 1) * 4)).Value = BDay + i   Next i      For KCnt = 1 To 6    If DSht.Cells(SCnt * SC + KCnt + 1, 4).Value <> "" Then     Nm = "Belt" & Format(SCnt, "000") & Format(KCnt, "00") & "P"     Bx = (BPos + (DSht.Cells(SCnt * SC + KCnt + 1, 2).Value - BDay) * WperHi)     By = GSht.Cells(SCnt * GC + (KCnt * 2) + 2, 1).Top + TateHosei     Wi = (DSht.Cells(SCnt * SC + KCnt + 1, 3).Value - _        DSht.Cells(SCnt * SC + KCnt + 1, 2).Value) * WperHi     Cr = rgbTurquoise '計画のベルトの色     MakeBelt GSht, Nm, Bx, By, Hi, Wi, Cr        Nm = "Belt" & Format(SCnt, "000") & Format(KCnt, "00") & "J"     Bx = (BPos + (DSht.Cells(SCnt * SC + KCnt + 1, 4).Value - BDay) * WperHi)     By = GSht.Cells(SCnt * GC + (KCnt * 2) + 3, 1).Top + TateHosei     Wi = (DSht.Cells(SCnt * SC + KCnt + 1, 5).Value - _        DSht.Cells(SCnt * SC + KCnt + 1, 4).Value) * WperHi     Cr = rgbGreenYellow '実績のベルトの色     MakeBelt GSht, Nm, Bx, By, Hi, Wi, Cr    End If   Next KCnt   SCnt = SCnt + 1  Loop End Sub 繰り返しますが、当方ではエラーにならないので、 後学のため、お使いのOffice(エクセルの)バージョンを教えてください。

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.4

>終了日時が入っていないのでWiが負の値になってエラーになるのはわかるのですが 計画、実績とも、 開始日時が埋まり、終了日時が空欄の場合であっても エラーにならないように作成しています。(作成しているつもりです。) 少なくとも当方の環境ではエラーになりません。 おそらく、 終了日時のセルは空欄ではなく、何か見えない文字(制御文字かも)が埋まっています。 =Code(セル番地)といった関数で中身を調べてみてください。 埋まっているものが何者なのかがわかれば、 その場合にはスルーするようにコードを修正します。 >実績終了が空欄の日時は、現在日時で書き込むので 開始日時が埋まり、終了日時が空欄、あるいは上記の未詳な文字が埋まっていたら 実行日時に読み替えるようにコードを修正したいですか?

3620313
質問者

補足

お手数おかけして申し訳ないです。 =Code(セル番地)で確認したら、空欄セルが全て#VALUE!となります。 日時が入っている部分は52でした。 開始日時があって終了日時がない所は、=now() でOKですが、 開始日時が空欄の部分で下記部分がエラーとなりました。 '//帯図形全数描写----------------------------- Sub MakeBeltMain()       Nm = "Belt" & Format(SCnt, "000") & Format(KCnt, "00") & "J"    Bx = (BPos + (DSht.Cells(SCnt * SC + KCnt + 1, 4).Value - BDay) * WperHi) 上記 Bx = (BPos + (DSht.Cells(SCnt * SC + KCnt + 1, 4).Value - BDay) * WperHi) の部分でエラー なのでD列のセルが空欄だったら何もしないの意味で '//帯図形全数描写----------------------------- Sub MakeBeltMain() Dim SCnt As Long 'シリーズカウンター Dim KCnt As Long '工程カウンター Dim BPos As Double '左軸位置 Dim Nm As String '図形名 Dim Bx As Double '開始横位置 Dim By As Double '開始縦位置 Dim Hi As Double '高さ Dim Wi As Double '幅 Dim Cr As Long '色 Dim WperHi As Long '1日当たりの表示幅 Dim TateHosei As Long Dim i As Long Hi = GSht.Rows(4).RowHeight * BeltHHi BPos = GSht.Cells(2, 4).Left WperHi = GSht.Cells(4, 8).Left - GSht.Cells(4, 4).Left TateHosei = GSht.Rows(4).RowHeight * ((1 - BeltHHi) / 2) Hi = GSht.Rows(4).RowHeight * BeltHHi BDay = Int(BDay) EDay = Int(EDay) SCnt = 0 Do If DSht.Cells(SCnt * SC + 1, 1).Value = "" Then Exit Do GSht.Rows((SCnt * GC) + 3).ClearContents For i = 0 To EDay - BDay GSht.Cells((SCnt * GC) + 3, ((i + 1) * 4)).Value = BDay + i Next i For KCnt = 1 To 6 Nm = "Belt" & Format(SCnt, "000") & Format(KCnt, "00") & "P" Bx = (BPos + (DSht.Cells(SCnt * SC + KCnt + 1, 2).Value - BDay) * WperHi) By = GSht.Cells(SCnt * GC + (KCnt * 2) + 2, 1).Top + TateHosei Wi = (DSht.Cells(SCnt * SC + KCnt + 1, 3).Value - _ DSht.Cells(SCnt * SC + KCnt + 1, 2).Value) * WperHi Cr = rgbTurquoise '計画のベルトの色 MakeBelt GSht, Nm, Bx, By, Hi, Wi, Cr Nm = "Belt" & Format(SCnt, "000") & Format(KCnt, "00") & "J" If DSht.Cells(SCnt * SC + KCnt + 1, 4).Value = "" Then Else Bx = (BPos + (DSht.Cells(SCnt * SC + KCnt + 1, 4).Value - BDay) * WperHi) By = GSht.Cells(SCnt * GC + (KCnt * 2) + 3, 1).Top + TateHosei Wi = (DSht.Cells(SCnt * SC + KCnt + 1, 5).Value - _ DSht.Cells(SCnt * SC + KCnt + 1, 4).Value) * WperHi Cr = rgbGreenYellow '実績のベルトの色 MakeBelt GSht, Nm, Bx, By, Hi, Wi, Cr End If Next KCnt SCnt = SCnt + 1 Loop End Sub としたら、エラーなく表示できたのですが、 こんな感じで大丈夫でしょうか? 確認までです。

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.2

私の本業に追われ、マクロのコーディングをこれから始めます。 >軸書式の説明してませんでしたが、 >軸の最小値:計画開始日時と実績開始日時の全レコードの最小値 >軸の最大値:計画終了日時と実績終了日時の全レコードの最大値 >とするつもりです。 これは、 計画開始日時>計画終了日時 あるいは、 実績開始日時>実績終了日時 が想定されるという意味ですか? また、serial1,2,3と増えていくわけですが、 軸の最小値、最大値は、serialごとに求めるんですか? それとも、 serial1,2,3..これら全体で求めるんですか?

3620313
質問者

補足

これは、 計画開始日時>計画終了日時 あるいは、 実績開始日時>実績終了日時 が想定されるという意味ですか? → 違います 通常であれば 実績開始日時>計画開始日時 または 実績終了日時>計画終了日時 なのですが、 計画開始日時>実績開始日時 または 計画終了日時>実績終了日時 の場合があるので、軸の最小値を計画、実績両方の最小値にする意味合いです。 serial1,2,3と増えていくわけですが、 軸の最小値、最大値は、serialごとに求めるんですか? それとも、 serial1,2,3..これら全体で求めるんですか? → serial1,2,3..これら全体で求めるとします の方です。 全シリアルの状況を日時で比較したいので、軸の最小、最大は、全アイテムとしています。

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.1

次のように理解しました。 エクセルの積み上げ横棒グラフを利用してガントチャートを手作りしている。 手間がかかるので、VBAを使い、省力化したい。 エクセルの積み上げ横棒グラフを利用すると、 指摘の >GANTグラフには工程間に細く青い線をしきりで入れてます。 の作業を追加したくなりますが この線をグラフ上にVBAで線を引くのは 引く場所を特定するのが相当厳しいものになりましょう。 私だったら、 VBAを持ち込むわけですから、 添付画像のように、 グラフを使わず、シート上に図形を描写する対応にします。 これなら、補助線などを設ける作業は罫線ですから扱いやすいです。 これでよければ、 サンプルなコードを紹介できると思います。 (タイムリーには提示できませんが) なお、series1,2,3..と増えていくものと思いますが それごとにガントチャートのシートを分けるのではなく 1枚のシートに縦方向に並べるんですね? 更に、ざっくりでいいですので、 series1,2,3..と増えていく最大値を教えてください。

3620313
質問者

補足

グラフを使わず、シート上に図形を描写する対応にします。 これなら、補助線などを設ける作業は罫線ですから扱いやすいです。 これでよければ、 サンプルなコードを紹介できると思います。 → 図形描写で大丈夫です。 なお、series1,2,3..と増えていくものと思いますが それごとにガントチャートのシートを分けるのではなく 1枚のシートに縦方向に並べるんですね? → 1枚の縦方向に並べます ※ 軸書式の説明してませんでしたが、 軸の最小値:計画開始日時と実績開始日時の全レコードの最小値 軸の最大値:計画終了日時と実績終了日時の全レコードの最大値 とするつもりです。 更に、ざっくりでいいですので、 series1,2,3..と増えていく最大値を教えてください。 → ざっくり100レコードくらいあります。

関連するQ&A

  • VBAでのグラフ作成

    エクセルでグラフを60枚ほど作るのですがさすがに手作業がつらいので質問させていただきました。 データは6列おきに並んでおり(A~F、G~といった感じです) x軸に1,1~blankまで(すべてのデータで一定値ではないです) y軸に1,4 および1,6~blankまで(x軸と同じ値です)すべて縦に並んでいます グラフはxlline,埋め込み型(グラフシートは作成しません)、グラフタイトルはcells(1,2)とします。 系列をたす形でloopすると(1)、(2)等がうまくいかず Unionを利用し3列データを選択してグラフを書く方法も考えていますがまだ手付かずです。。。 なので (1)系列をたしつつloopする方法 (2)ほかのなにか簡単に書く方法 (3)Union selectで可能かどうか をお聞きしたいです グラフがかければいいので回答はどれか1つで構いません よろしくお願いします

  • Excelのグラフを動的に作成したい。

    Excelのバージョン:2002 Excelのグラフ機能を使ってグラフを作成しており、「名前の定義」を利用して ドロップダウンリストの中身でグラフが変化するところまでは出来たのですが 本来の目的が上手く行きません。 以下に、自身で作成した変化するグラフの手法を書きます。 0:項目軸と値にそれぞれA~Eまでの5種類のパターンがあるデータを用意。 1:項目軸A~Eまでのデータ範囲にそれぞれ「項目軸A」、「項目軸B」…… と名前の定義をする。 2:値A~Eまでのデータ範囲にそれぞれ「値A」、「値B」…… と名前の定義をする。 3:A1セルにA~Eまでのドロップダウンリストを作成する。 4:「名前の定義」から「sheet1!項目軸(シート固有)」という名前で参照範囲に「=INDIRECT("項目軸"&sheet1!$A$1)」と入力する。 5:「名前の定義」から「sheet1!値(シート固有)」という名前で参照範囲に「=INDIRECT("値"&sheet1!$A$1)」と入力する。 6:グラフツールを使って棒グラフを作成。 グラフの「元のデータ」にて、「系列」タブを開いて系列を追加。  値に「sheet1!値」、項目軸ラベルに「sheet1!項目軸」を入力してグラフを作成。 7:ドロップダウンを変化させると、ドロップダウンの表示に対応したグラフが表示される。 本来の目的は、 3のA1セルに自身のシート名を取得する式を記入して、このシートを複数作成し、 シート名をA、B、……と変更する事によって、自動的にグラフが変化していく物を作りたいのですが シートを複製した途端、グラフの「項目軸」と「値」に{100,200,……}と言った形で実際の値がコピーされてしまいます。 なんとか上手く作成する方法はありますでしょうか? ご教授の程、よろしくお願い致します。

  • エクセルでのグラフ作成

    エクセルでグラフを作成したいのですが、一つの表で、月毎の積み上げ縦棒グラフ(a,b,c,dの計画と実績)と折れ線グラフ累計(計画,実績)を表示するにはどうしたらいいのか教えて下さい。 データは、         4月    5月     計画 実績 計画 実績 a    2  1  3  5 b    8  6  4  2 c    3  3  4  3 d    6  4  5  6 累計  19 14 16 16          

  • EXCEL2010 VBA グラフの作成

    EXCEL2010のVBAで自動でグラフを作成するコードを作成したいと思っています。 シート1のA1:A10にデータが入っていて、ボタンを押すとコードが実行されて A1:A5までが系列1 A6:A10までが系列2 として表示される折れ線グラフを作成しようと思っています。 さらに作成したグラフは新規にシートを作成して作成したシートに表示させたいと思います。 このような処理を行いたいのですがVBAを始めたばかりなのでグラフの作成くらいしかまだ 分かっていません。 どなたかこの処理を実現できる良い方法を教えてください。よろしくお願いします。

  • EXCEL2010 VBA 複数の条件のグラフ

    EXCEL2010のVBAでグラフを作成するコードを作成しています。 そのグラフでは指定した値で系列の数が変わります。 初期設定シートで指定値1と2を確認して指定値1が系列の数、指定値2がデータ範囲となります。 データ範囲はB列のB1から指定値2の数だけ下に増えます。 Sheet1にグラフを新規作成します。 (例) 指定値(A1):1の時 指定値(A2):20 グラフに表示される系列:(B1:B20) (例2) 指定値(A1):2の時 指定値(A2):20 グラフに表示される系列:(B1:B20)と(B21:B40) 説明が分かり辛いかもしれませんがよろしくお願いします。

  • グラフ作成 2種類のグラフを使って作成

     グラフ作成について質問です。エクセル2000です。  各商品の価格と粗利率・割引率などをまとめた表があり、それをもとに以下のグラフを作成する必要があります。 作成したいグラフ:  データ1:商品価格を折れ線で表示。Y軸は主軸。  データ2:粗利率・割引率などを積み上げ棒グラフで表示。Y軸は2軸を使用。  問題点1:まずデータ1で折れ線グラフを作成。その後、グラフにデータ2を追加。データ2は折れ線グラフとして追加され、しかも数字が小さい為に、下に折り重なって表示される。それをデータ系列毎に、グラフの種類を変更し、Y軸を2軸に変更するのは作業がかなり面倒になってしまう。  →データを追加する時点で、軸を2軸に設定したり、グラフの種類を指定することはできませんか。  問題2:先にデータ2でグラフを作成し、後からデータ1を追加。グラフ種類とY軸の変更は1回で済む。ですが、この場合データ2は主軸、データ1は2軸になるので入れ替えたい。積み上げ棒グラフの1つのデータ系列を指定して軸を変更することはできるが、棒グラフの他のデータ系列の変更ができない。  →主軸と2軸を簡単に入れ替える方法はありませんか。  グラフの形式は指定なので変更することができません。アドバイスをよろしくお願いします。

  • エクセルで複数のグラフを描くには?

    エクセルで折れ線グラフを描いてますが、1シートにたくさんデータ表が有り、それぞれ同じグラフを書きます。その場合、系列がたくさんあるため、1個づつグラフを書くのが大変です。そこで、グラフをコピー・貼り付けで、データ範囲を変更したのですが、系列の名前と項目軸ラベルの表示がエラーとなります。たくさんあるデータに対して同じグラフを書く場合、2個目からは簡単に描く方法はありませんか? 教えてください。

  • グラフの系列値が勝手に書き換わってしまいます。

    質問を見て頂きありがとうございます。 環境はOS:Windows7、Excel:2007を使用しています。 現在、グラフを表示する「Graph」シートと グラフに使用するデータを格納する「Data」シート(※1)を作成し グラフの系列値の範囲を可変にしたグラフを作成しようとしています。 系列値の範囲を可変にするため、「Data」シートに定義名:項目1(※2)を作成し、 グラフの系列値に「=Data!項目1」と設定しています。 エクセルを閉じる前はこちらの想定通りの動作になっているのですが、 エクセルを閉じて再度開くとグラフの系列値が「=[0]!項目1」と 自動で書き換わってしまいます。 系列値が「=[0]!項目1」に代わってしまうと定義名:項目1の参照範囲のセルに 値を入力しても「Graph」シートのグラフに反映されなくなります。 この現象を回避する方法があれば教えて頂けないでしょうか。 よろしくお願いします。 (※1) 「Data」シートのC5~C1000に系列値が入力されます。 系列値はC5~C1000までに1~n個入力されることを想定しています。 (※2) 定義名:項目1の参照範囲は以下のように設定しています。 =OFFSET(Data!$C$5,0,0,COUNTA(Data!$C$5:$C$1000),1)

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

    すみません、シート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

  • 計算式を含むグラフの作成方法について

    以下のようなグラフを作成したいと考えていますが、可能でしょうか? 元となるExcelには以下のようなデータが入力されています。 部署  予算 実績  見込 A部 52000 34000 20000 B部 32000 31000 35000 C部 10000 8000 34000 これを、部署をX軸とし、各部署毎に予算で1軸、 実績+見込で1軸で棒グラフ表示させ、 予算の達成状況を確認するようなグラフを作成したいと考えています。 尚且つ、実績と見込が分かるよう色などで分けられたら完璧です。 色々試しましたが、実績+見込をうまく表示することが出来ません。 ぜひ、アドバイスをお願い致します。

専門家に質問してみよう