advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 3685 for グラフ (0.002 sec.)
[[20150930125226]]
#score: 3272
@digest: cc25aa38e634a73123a181b779a61e0a
@id: 68991
@mdate: 2015-11-08T23:43:06Z
@size: 30067
@type: text/plain
#keywords: pivotitems (118710), pivotlayout (83829), date2 (54278), datalabels (43245), date1 (36715), 月") (30283), フシ (24381), visible (22208), ロウ (21822), 付") (21568), 付フ (18737), ラフ (15562), pivotfields (15313), メロ (15277), グラ (13982), 分2 (13138), 年10 (11953), chart (11614), 年9 (11065), ウ) (9630), ピボ (9617), 2015 (9337), ナ様 (8184), マナ (7620), 照範 (6140), め込 (5789), 棒グ (5665), (メ (5632), 2014 (5301), 系列 (5195), 区分 (4961), トテ (4668)
『ピボットからの値取得しグラフ表示に反映』(メロウ)
お世話になっております。 ピボットテーブルを基にグラフを表示しているのですが、グラフの系列の値が1の時はデータラベルを非表示にしたいです。 2以上はラベル位置:中央 フォントサイズ:18pt で表示したいです。 VBAで行おうと思ったのですが、ピボット、もしくはグラフから系列の値を取得する方法が分かりません。 また、この作業は月1回で、データ数は来月から過去11ヶ月(2015年10月〜2014年9月)の時と、今月から過去11ヶ月の時(2015年9月〜2014年8月)があります。 このデータの取得方法もわかりません。 グラフは棒グラフで、1本の棒に8系列のデータが入っています。 ピボットは下記のようなイメージです。 A B C D E F 分類A 1 あ 2 い 3 う 4 え 5 お ・・・ 2014年8月 1 2 3 2014年9月 1 2 2014年10月 1 4 2014年11月 4 2014年12月 3 2015年1月 1 1 ・ ・ ・ データは空白の時もあります。 グラフグラフシートに個別で表示しています。 データは同じ年月、系列で さらに分類A,B,Cがあります。 まとまりの文章で申し訳ないです。 なにか不足している情報があれば提示します。 よろしくお願いします。 < 使用 Excel:Excel2007、使用 OS:WindowsXP > ---- Sub main() Dim co As ChartObject, sc As Object, dl As DataLabel For Each co In ActiveSheet.ChartObjects For Each sc In co.Chart.SeriesCollection sc.ApplyDataLabels For Each dl In sc.DataLabels If dl.Text = "1" Then dl.ShowValue = False Else dl.Position = xlLabelPositionCenter dl.Font.Size = 18 End If Next dl Next sc Next co End Sub (mm) 2015/09/30(水) 15:19 ---- mm様、ありがとうございます! 動作は希望通りでした! しかし、グラフシート内に4つのグラフが混在しており、その中のベースになっているグラフのみ反映されませんでした。 なので、直接名前を指定して、コードを書いてみたのですが、 「指定した名前のアイテムが見つかりませんでした」とエラーになります。 グラフツール→レイアウト→グラフ名 の箇所に出ている名前を使ったのですが…。 ネットにて、グラフの名前取得のコードも見つけたので、試してみましたが3つしか取得せず、調べるとベースのグラフ名は取得していないようでした。 何かいい方法ありますか…? ちなみに、グラフの混在を辞める、という選択肢は出来る限り避けたいです。 かなり試行錯誤の上この形になりました。 (これ以前は、フォトショップにて画像として複合グラフを作成していました…) 棒グラフ3つに、折線グラフ1つを使用しています。 (メロウ) 2015/09/30(水) 16:14 ---- マクロ記録で、ベースになっているグラフについて「データラベルの追加」や「データラベルの書式設定」など試行してもグラフ名はわかりませんか? (mm) 2015/09/30(水) 18:15 ---- マクロの記録にて得たグラフ名使用しましたが、結果は同じく「指定した名前の…」でNGでした…。 提示して頂いたコードをほぼそのまま使用してます。 コードも載せます。 Sub main() Dim co As ChartObject, sc As Object, dl As DataLabel co = ActiveSheet.ChartObjects("グラフ 1") sc = co.Chart.SeriesCollection sc.ApplyDataLabels dl = sc.DataLabels If dl.Text = "1" Then dl.ShowValue = False Else dl.Position = xlLabelPositionCenter dl.Font.Size = 18 End If End Sub (メロウ) 2015/10/01(木) 11:42 ---- Sub main2() 'Xの部分を適宜置き換えて試行してみる。(1〜) Dim sc As Object For Each sc In ActiveSheet.ChartObjects("グラフ x").Chart.SeriesCollection sc.ApplyDataLabels Next sc End Sub (mm) 2015/10/01(木) 15:12 ---- 指示通り試してみましたが、ダメでした…。 ピボットグラフなのですが、関係ありますか? でもどちらにせよグラフ名指定してもエラーってことは無理ですかね…。 他の方法も視野に入れてみます…。 何かほかにも思い当たることあれば、また教えていただきたいです。 (メロウ) 2015/10/01(木) 16:03 ---- 別案。 グラフを操ろうとするから面倒なんですよ。 グラフが参照している範囲を固定して、データだけ書き換えれば早いじゃないですか。 そうすればグラフの設定は手動で一回で済みます。 (稲葉) 2015/10/02(金) 12:40 ---- 稲葉様 一応、作業用EXCELに月一で2年分のデータ入れて、更新しています。 先月の作業が完了しているので、ある程度は設定が残っているのですが、 ちょこちょこ希望通りにならないところがあり、そこは手で直していました。 グラフ4つ重ねたものが2種、2つ重ねたものが1種あり、そのうち上記設定を反映したいグラフが6つです。 1時間あれば十分ですが、もう少し改良できるのかなと思い、質問させていただきました。 グラフは参照範囲は、ピボットテーブルで、月ごとに日付範囲が変わります。 その範囲指定だけでもVBAで自動に設定出来たらなぁ…という希望もあります。 IF文書くときに、「ピボットの日付部分が、今月から過去11カ月分だったら」というのが書けません…。 またお力をお借りできれば嬉しいです。 (メロウ) 2015/10/02(金) 15:17 ---- 状況が全然理解できません 何ができて、何ができていないのか? そもそも、どんなグラフなのかも? >グラフグラフシートに個別で表示しています。 ChartObjects(埋め込みグラフ)でいいのでしょうか? Sub test() Dim cht As Chart Dim ser As Series Dim dl As DataLabel Set cht = Workbooks("Book1.xlsx).Charts("graph1") '★ここだけ変更してどうなりますか With cht .ApplyDataLabels For Each ser In .SeriesCollection MsgBox ser.Name Next End With End Sub (マナ) 2015/10/02(金) 20:58 ---- マナ様 お返事が遅くなってしまい申し訳ありませんでした。 上記件、試してみたところ、グラフに使用しているデータ系列の名前が次々表示されました。 状況ですが、 1つのグラフシートに4つグラフが存在しています。 1つは埋め込みグラフになるのでしょうか?ベースとして使用しています(棒グラフ) 2つ目は、グラフエリアが自由に動かせます。背景など透明にし、ベースグラフに重ねて同じ月の数年前のデータを並ぶように配置しています。(棒グラフ) 3つ目、4つ目もグラフエリアは自由で、目標値の表示として棒グラフを使用しているものと、折線グラフで先月から今月の変化を表示させています。 もともとの目的は、棒グラフ1つ目2つ目のグラフのデータ系列(8つ)に1が存在した場合はデータラベルを非表示に、2以上は、18ptの中央表示にしたい、ということです。 mm様よりご提示いただいたコードでは、1つ目以外のグラフに希望通りの設定が反映されました。 しかし、ベースグラフのみは、無反応です。 名前を指定しても、アイテムが見つかりません、とエラーになるのです。 説明が下手で申し訳ないです。 (メロウ) 2015/10/06(火) 17:37 ---- 逆です。グラフシートにのっかているグラフが埋め込みグラフです。 2種類のChartオブジェクトで、マクロからの操作方法が異なります。 ↓はグラフの種類を調べています。 Sub test2() Dim cht1 As Chart Dim cht2 As Chart Dim i As Long Set cht1 = Workbooks("Book1.xlsx").Charts(1) MsgBox "グラフシート:" & cht1.ChartType For i = 1 To 3 Set cht2 = cht1.ChartObjects(i).Chart MsgBox "埋め込みグラフ" & i & ":" & cht2.ChartType Next End Sub 数値の意味は http://www.relief.jp/itnote/archives/excel-vba-xlchartype-list.php (マナ) 2015/10/06(火) 21:13 ---- まだよく理解できていませんが、もう1点。 ↓については、マクロでなく、ピボットの日付フィルターでよいのでは? >参照範囲は、ピボットテーブルで、月ごとに日付範囲が変わります。 (マナ) 2015/10/06(火) 21:30 ---- マナ様 遅くなりすみません!ご返事ありがとうございます!! 埋め込みグラフグラフシートの説明ありがとうございます! 上記コード結果は、 グラフシート:52 埋め込みグラフ1:52 埋め込みグラフ2:51 埋め込みグラフ3:4 でした! 参照範囲ですが、ピボットの日付フィルターで行っていますが、毎月参照範囲が変わっていくので、再設定が必要です。 1つは、今月〜過去11ヶ月 (2015年10月が今月とすれば、2015年10月〜2014年11月) もうひとつは、前年の同じ月です (2014年10月〜2013年11月) (メロウ) 2015/10/08(木) 11:49 ---- 理解してもらえたか不安なので確認です。 1)なぜ4つのグラフのうち1つめだけが無反応であったか 2)どうすれば1つめの棒グラフを操作できるか 理解できましたか? これが理解できていれば、ご自身でもコードを修正するのは簡単なはずなのですが… 必要な部品は今までにできてきています。 考えてみてください。 (マナ) 2015/10/08(木) 21:17 ---- もう一つの課題である参照範囲の更新に関しては 情報がたりないかもしれません。 まだ、どんなグラフかがイメージできていません。 教えていただけますか。 1)埋め込みグラフ1は何となく想像できますが、これもピボットグラフですか 2)埋め込みグラフ2と3は、どうやって作成したものか全然理解できていません。 3)参照範囲を変更するのは4つともですか 4)手動で変更する場合は、どんな操作をしていますか 5)その操作を文章で説明するのがが大変であれば、マクロの記録の結果を教えて下さい (マナ) 2015/10/08(木) 21:24 ---- マナ様 ありがとうございます!今はこちらまで手が回らないので、時間見つけて考えます!! 取り急ぎ、グラフの情報をお伝えします。 1)埋め込みグラフ1もピボットグラフです。 2)2は計算値を元にしていて、ピボットではありません。3は、ピボットグラフで1つの系列のみを表示するようにしています。 3)参照範囲の変更はグラフ1と、埋め込みグラフ1のみです。 4)「今年」というシートと「前年」というシートにピボットテーブルがあります。 今年の日付範囲は2015年10月〜2014年11月を選択、前年の日付範囲は2014年10月〜2013年11月を選択します。 5)マクロ結果です。 Sub Macro1() ' With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("日付") .PivotItems("2013年10月").Visible = False .PivotItems("2013年11月").Visible = False .PivotItems("2013年12月").Visible = False .PivotItems("2014年1月").Visible = False .PivotItems("2014年2月").Visible = False .PivotItems("2014年3月").Visible = False .PivotItems("2014年4月").Visible = False .PivotItems("2014年5月").Visible = False .PivotItems("2014年6月").Visible = False .PivotItems("2014年7月").Visible = False .PivotItems("2014年8月").Visible = False .PivotItems("2014年9月").Visible = False .PivotItems("2014年10月").Visible = False .PivotItems("(blank)").Visible = False End With Sheets("前年").Select End Sub 1シートのみしか記録されませんでした・・・・。 (メロウ) 2015/10/09(金) 10:45 ---- 追加質門です。 元データは、日付ではなく、文字列でしょうか? 文字列だとしたら日付データに変換したほうが便利だと思うのですが。 日付フィルターで、マクロを使わなくても指定期間のデータを抽出できます。 マクロでするにしても簡単にできます。 (マナ) 2015/10/09(金) 19:05 ---- 部分的に動かしただけなのでちゃんと動くかもわかりませんが、 日付フィルターで参照範囲を変更させているつもりです。 Sub test3() Dim ret As String Dim date1 As Long Dim date2 As Long Dim cht1 As Chart, cht2 As Chart Dim co As ChartObject '今年 ret = Application.InputBox( _ "参照範囲の最終月を入力", "入力", Format(Date, "YYYY/MM")) & "/1" If Not IsDate(ret) Then Exit Sub date2 = CLng(WorksheetFunction.EoMonth(CDate(ret), 0)) date1 = CLng(WorksheetFunction.EDate(date2, -12) + 1) Set cht1 = Workbooks("Book1.xlsx").Charts("graph1") '★要修正 If cht1.PivotLayout Is Nothing Then Exit Sub With cht1.PivotLayout.PivotTable .PivotCache.Refresh With .PivotFields("日付") .ClearAllFilters .PivotFilters.Add _ Type:=xlDateBetween, _ Value1:=date1, _ Value2:=date2 End With End With '前年 date2 = date1 - 1 date1 = CLng(WorksheetFunction.EDate(date2, -12) + 1) For Each co In cht1.ChartObjects Set cht2 = co.Chart If cht2.ChartType = xlColumnStacked Then If Not cht2.PivotLayout Is Nothing Then With cht2.PivotLayout.PivotTable .PivotCache.Refresh With .PivotFields("日付") .ClearAllFilters .PivotFilters.Add _ Type:=xlDateBetween, _ Value1:=date1, _ Value2:=date2 End With End With End If End If Next End Sub (マナ) 2015/10/09(金) 22:24 ---- マナ様 1つ目のグラフが無反応だったのは、グラフシートだったからで、コードの書き方が違うからですね…! 同じグラフでも、扱いが異なるとは思いませんでした…!オブジェクトとかチャートとかその辺の呼び名?がイマイチ分からないのですが…グラフシートは、シートで、埋め込みグラフは、チャートオブジェクトなのですね…!もっと勉強したいと思います!ありがとうございます! 日付ですが、データです。 表示をYYYY年M月に設定しています。日付は全て1日です。 さて、ご提示いただきましたコードですが、実行したところエラーが出ました…。 「実行時エラー 1004 そのピボットテーブルのフィールド名は正しくありません。ピボットテーブル レポートを作成するには、 ラベルの付いた列でリストとして編成されたデータを使用する必要があります。ピボットテーブルのフィールド名を変更する場合は、フィールドの新しい名前を入力する必要があります」 となりました。 ピボットテーブルも熟知しているわけではないので、どこを修正すればよいか分かりませんでした…。 (メロウ) 2015/10/13(火) 14:28 ---- 手操作で、以下について確認お願いします。 1)ピボットテーブルの更新を実行 2)日付フィルターの、「指定の範囲内」で適当な期間を入れて実行 これで、同じエラーがでますか? (マナ) 2015/10/13(火) 20:49 ---- 1,2の操作行ったところ、別の箇所でエラーでました。 .PivotFilters.Add _ Type:=xlDateBetween, _ Value1:=date1, _ Value2:=date2 ここでエラー発生 アプリケーション定義またはオブジェクト定義のエラーだったので、ヘルプ等参照し FilterType:=xlDateBetween, としてみました。 すると、次は 名前付き引数が見つかりません。と同じところでエラーになりました。 (メロウ) 2015/10/14(水) 10:26 ---- お願いの仕方が不親切だったかも。 手操作というのは、ステップ実行という意味ではなく マクロを使わずに、更新と日付フィルターを実行という意味です。 手操作でもエラーがでるようであれば、まずはそれを修正。 エラーがでないのであれば、マクロ記録を実行してください。 夜しか回答できませんので、1日1回のやりとりになります。 じれったいかもしれませんが、ご容赦願います。 (マナ) 2015/10/14(水) 22:17 ---- マナ様 こちらこそ申し訳ありませんでした。 手作業で更新・日付フィルター行いましたが、エラーなどは特にありませんでした。 中断モードでコード見ましたが、date1=41944 date2=42308 となるのですが、これでOKなのでしょうか? 日付になるのかな?と思っていたのですが…関係なかったらすみません。 とりあえず、マクロ記録したので載せます Sub Macro4() ' ' Macro4 Macro ' ' With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("日付") .PivotItems("2013年9月").Visible = False .PivotItems("2013年10月").Visible = False .PivotItems("2013年11月").Visible = False .PivotItems("2013年12月").Visible = False .PivotItems("2014年1月").Visible = False .PivotItems("2014年2月").Visible = False .PivotItems("2014年3月").Visible = False .PivotItems("2014年4月").Visible = False .PivotItems("2014年5月").Visible = False .PivotItems("2014年6月").Visible = False .PivotItems("2014年7月").Visible = False .PivotItems("2014年8月").Visible = False .PivotItems("2014年9月").Visible = False .PivotItems("2014年10月").Visible = False .PivotItems("(blank)").Visible = False End With Sheets("前年").Select With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("日付") .PivotItems("2013年9月").Visible = False .PivotItems("2013年10月").Visible = False .PivotItems("2014年11月").Visible = False .PivotItems("2014年12月").Visible = False .PivotItems("2015年1月").Visible = False .PivotItems("2015年2月").Visible = False .PivotItems("2015年3月").Visible = False .PivotItems("2015年4月").Visible = False .PivotItems("2015年5月").Visible = False .PivotItems("2015年5月").Visible = False .PivotItems("2015年6月").Visible = False .PivotItems("2015年7月").Visible = False .PivotItems("2015年8月").Visible = False .PivotItems("2015年9月").Visible = False .PivotItems("2015年10月").Visible = False .PivotItems("(blank)").Visible = False End With End Sub 私も日中しかお返事出来ないので大丈夫です。 こちらこそ、よろしくお願い致します。 (メロウ) 2015/10/15(木) 13:18 ---- もう一度確認お願いします。 ピボットテーブルで、例えば、2013年9月のセルを選択してください。 その時の数式バーの表示はどうなっていますか 2013年9月となっていませんか だとしたら、それは「文字列」です。 日付なら、2013/9/1のような感じで表示されていると思います。 >日付ですが、データです。 >表示をYYYY年M月に設定しています。日付は全て1日です。 ↑が勘違いではないかと考えています。 文字列のままでもフィルター処理できますが 日付データにしておいたほうが、手操作、マクロとも簡単です。 >date1=41944 date2=42308 となるのですが、これでOKなのでしょうか? どこでもよいので、セルに41944と入力して。 セルの書式で、表示形式を日付に変更してみてください。 日付データとは、こういう意味です。 で、日付ではなく、単なる「文字列」だと 日付フィルターが実行できなくて、上記のエラーになっている可能性があります。 (マナ) 2015/10/15(木) 20:25 ---- 日付フィルターの操作にも、誤解がありませんか 指定の期間のデータのみを簡単に抽出可能です。 慣れれば、マクロでなく、手操作でも1分もあればできます。 http://haku1569.seesaa.net/article/131231135.html (マナ) 2015/10/15(木) 21:09 ---- 日付はデータです。 数式バーにも、2015/9/1のように表示されています。 フィルターですが、このようなことが出来ると初めて知りました! ですが、使用したいピボットでは、日付フィルタ部分は選択不可な状態でした・・・。 だからエラーになるのですかね…? ピボットテーブルのほかに、全データが入っただけのシートもあるのですが、 そこに日付フィルターかけてみると、希望通り機能しました。(範囲内で指定) ですが、ピボットになってないと系列ごとに集計してもらえないので結局使えません…。 ちなみに、ピボットのフィールドリストは以下です レポートフィルタ 区分2 (工場選択しています) 列ラベル 区分1 (系列名) 行ラベル 日付 値 合計:件数 すみません。 土日はデータ見られないので、お返事できないかもしれません。 よろしくお願いします。 (メロウ) 2015/10/16(金) 09:36 ---- 日付以外が混ざっている可能性はありませんか? 下記を実行してみてください。 日付でないセルを抽出します。空白だけならOKです。 Sub test4() Dim cht As Chart Dim c As Range Set cht = Charts("graph1") '★要修正 With cht.PivotLayout.PivotTable .PivotCache.Refresh .PivotFields("区分2").ClearAllFilters With .PivotFields("日付") .ClearAllFilters For Each c In .DataRange If TypeName(c.Value) <> "Date" Then MsgBox TypeName(c.Value) & vbCrLf & _ c.Address(False, False) & vbCrLf & _ c.Value End If Next End With End With End Sub >土日はデータ見られないので、お返事できないかもしれません。 私は、来週の月火は回答できないかもしれません。 (マナ) 2015/10/16(金) 21:42 ---- マナ様 提示頂いたコード実行しました! (空白) のみでしたので、大丈夫かと思います。 相変わらず、日付フィルタは選択不可状態です。 原因について調べていますが、そもそも「選択できるもの」としての扱いが多く、 同じような事例を見つけられずにいます…。 回答できるときで大丈夫ですので、またよろしくお願いします。 (メロウ) 2015/10/19(月) 11:41 ---- 今週はちょっと忙しくてやっと時間がとれました。 ただ、日付フィルターを使えない状況がこちらで再現できないので困りました。 とりあえず日付フィルターは使わないで、1行ずつチェックしています。 Sub test4() Dim ret As String Dim date1 As Date, date2 As Date Dim cht As Chart ret = Application.InputBox( _ "参照範囲の最終月を入力", "入力", Format(Date, "YYYY/MM")) & "/1" If Not IsDate(ret) Then Exit Sub date2 = WorksheetFunction.EoMonth(CDate(ret), 0) date1 = WorksheetFunction.EDate(date2, -12) + 1 Set cht = Charts("graph1") '★要修正 Application.ScreenUpdating = False With cht.PivotLayout.PivotTable .PivotCache.Refresh Datefilter .PivotFields("日付"), date1, date2 End With End Sub Private Sub Datefilter(pvf As PivotField, d1 As Date, d2 As Date) Dim pvi As PivotItem Dim s Dim flg As Boolean pvf.ClearAllFilters For Each pvi In pvf.PivotItems s = pvi.Value If IsDate(s) Then If DateValue(s) >= d1 And DateValue(s) <= d2 Then flg = True: Exit For End If End If Next If Not flg Then MsgBox "範囲内のデータはありません": Exit Sub For Each pvi In pvf.PivotItems s = pvi.Value If IsDate(s) Then If DateValue(s) < d1 Or DateValue(s) > d2 Then pvi.Visible = False End If Else pvi.Visible = False End If Next End Sub (マナ) 2015/10/23(金) 21:20 ---- マナ様 お忙しい中ありがとうございます! 上記コード試してみたところ、各系列の数値が倍になっている?完全に倍にはなっていないように思いますが、とにかく数がふえていました。 私のレベルが低すぎてコード内容が読めないので、どこを直してよいか解らず…です。 日付範囲は希望通りに動きました!ありがとうございます! (メロウ) 2015/10/26(月) 09:32 ---- マナ様 上記の数量増加の件ですが、区分2が反映されていなかっただけでした!すみません! 日付選択後、区分2の支店を指定したいです。 (メロウ) 2015/10/26(月) 09:52 ---- フィールドボタンから選択するだけでは? 私がイメージしている操作は、下記のよう流れです。 1)グラフシート選択 2)区分2選択(ベースのグラフ) 3)区分2選択(埋め込みグラフ) 4)ボタンをクリックでマクロ実行:日付範囲を絞込む→ラベルを非表示にする 私には、日付フィルターが使えない原因がわからなかったので 深く追求せずマクロで対応することで逃げましたが 本来ならマクロは最初の質問部分(ラベル非表示)だけにしたかったところです。 マクロ実行方法も含めて、最終的にどういう操作を期待していますか。 (マナ) 2015/10/26(月) 20:57 ---- マナ様 お返事遅くなりすみません。 この作業の前に、グラフの元のデータを取得するマクロがあるので、そのつづきで実行出来れば、と思っています。 1)元データ取得のボタンクリック データ取得 ↓ データ更新 ↓ ベースの期間選択(埋め込みグラフはベースのマイナス1年) ↓ 区分2は選択せず、固定で2支店同じ作業ループ あと1支店は期間を選択期間より-1ヵ月して同じ作業実行 2)グラフ内容等確認 になったら嬉しいです。 出来るだけ操作を減らしたいです。 (メロウ) 2015/10/28(水) 16:02 ---- ごめんなさい。一度はわかったつもりになっていたのですが ↓でまた、どんなグラフか、わからなくなってきました。 >区分2は選択せず、固定で2支店同じ作業ループ >あと1支店は期間を選択期間より-1ヵ月して同じ作業実行 最初から読み返しているのですが、どういう作業か理解できません。 手作業だとどういう手順になるのか箇条書きで説明できますか。 (マナ) 2015/10/30(金) 00:15 ---- 区分は3つです。仮に、A,B、Cとします。 A、B、はそれぞれの支店、CはABの合計値です。 A、B、Cはそれぞれのグラフシートで存在しています。 元となるデータを外部より取り込む ↓ A,B、C各データシートのピボットを指定期間に設定・更新(今年・前年の各2シート) ↓ グラフ調整 が手順です。 A、Bは棒グラフ2つ使用、 ベースグラフは、2015/10と入力したなら、ここから2014/11まで 埋め込みグラフは、2014/10から2013/11までを選択 Cも棒グラフ2つ使用、 ベースグラフは2015/10と入力したなら、2015/9から2014/10まで、 埋め込みグラフは2014/9から2013/10までを選択。 それぞれの埋め込みグラフは、背景を透明にし、ベースグラフに重ね、ベースグラフの各月のとなりに 1年前のデータが並ぶようにしています。 あとは、決められたルールがいくつかあるので、それの通りになる様、グラフを修正していきます (ラベルフォントや、系列の色などです) 説明を簡単にしようと思って書き込みましたが、逆に分かりづらかったですね…。すみません。 他になにか不明だったらぜひおっしゃって下さい。 よろしくお願いします。 (メロウ) 2015/10/30(金) 13:33 ---- あいかわらずパーツ単位での動作確認のみで、全体を通しての確認はできていません。 Sub test6() Dim ret As String Dim date1 As Date, date2 As Date, date3 As Date, date4 As Date Dim cht As Chart, cht1 As Chart Dim co As ChartObject Dim branch As String ret = Application.InputBox( _ "参照範囲の最終月を入力", "入力", Format(Date, "YYYY/MM")) & "/1" If Not IsDate(ret) Then Exit Sub Application.ScreenUpdating = False For Each cht In Charts If Not cht.PivotLayout Is Nothing Then '今年 date2 = WorksheetFunction.EoMonth(CDate(ret), 0) date1 = WorksheetFunction.EDate(date2, -12) + 1 Select Case cht.Name Case "Graph1" branch = "A" Case "Graph2" branch = "B" Case Else branch = "(All)" date2 = CDate(ret) - 1 date1 = WorksheetFunction.EDate(date2, -12) + 1 End Select '前年 date4 = date1 - 1 date3 = WorksheetFunction.EDate(date4, -12) + 1 With cht.PivotLayout.PivotTable .PivotCache.Refresh .PivotFields("区分2").CurrentPage = branch Datefilter .PivotFields("日付"), date1, date2 End With EditSeries cht For Each co In cht.ChartObjects Set cht1 = co.Chart If cht1.ChartType = xlColumnStacked Then If Not cht1.PivotLayout Is Nothing Then With cht1.PivotLayout.PivotTable .PivotCache.Refresh .PivotFields("区分2").CurrentPage = branch Datefilter .PivotFields("日付"), date3, date4 End With EditSeries cht1 End If End If Next End If Next End Sub Private Sub Datefilter(pvf As PivotField, d1 As Date, d2 As Date) Dim pvi As PivotItem Dim s Dim flg As Boolean pvf.ClearAllFilters For Each pvi In pvf.PivotItems s = pvi.Value If IsDate(s) Then If DateValue(s) >= d1 And DateValue(s) <= d2 Then flg = True: Exit For End If End If Next If Not flg Then Exit Sub For Each pvi In pvf.PivotItems s = pvi.Value If IsDate(s) Then If DateValue(s) < d1 Or DateValue(s) > d2 Then pvi.Visible = False End If Else pvi.Visible = False End If Next End Sub Private Sub EditSeries(cht As Chart) Dim ser As Series Dim dl As Datalabel With cht .ApplyDataLabels For Each ser In .SeriesCollection ser.DataLabels.Position = xlLabelPositionCenter ser.DataLabels.Font.Size = 18 For Each dl In ser.DataLabels If CLng(dl.Text) < 2 Then dl.ShowValue = False Next Next End With End Sub (マナ) 2015/10/31(土) 21:48 (マナ) 2015/10/31(土) 22:24 差し替え (マナ) 2015/11/1(日) 19:28 再度差し替え ---- マナ様 返事が遅くなり申し訳ないです。いつもありがとうございます。 ご提示いただきましたコードを実行しましたところ、 型が一致しません。でエラーになりました。 Private Sub EditSeries(cht As Chart) Dim ser As Series Dim dl As Datalabel With cht .ApplyDataLabels For Each ser In .SeriesCollection ser.DataLabels.Position = xlLabelPositionCenter ser.DataLabels.Font.Size = 18 For Each dl In ser.DataLabels If CLng(dl.Text) < 2 Then dl.ShowValue = False ←←←ここで黄色です。 Next Next End With End Sub デバッグで、 dl.Text を見ると、空白になっているようです。そのせいでしょうか…? (メロウ) 2015/11/05(木) 15:08 ---- 以下で試してみてください If Val(dl.Text) < 2 Then dl.ShowValue = False (マナ) 2015/11/05(木) 22:29 ---- マナ様 次は、同じところで Textメソッドは失敗しました。Data labelオブジェクト となりました。 各月のデータですが、存在していない系列もあるのですが、関係ありますか? 0データではなく、データそのものがないのです。 (メロウ) 2015/11/06(金) 14:29 ---- ピボットグラフを選択した状態で、実行してみてください。 6個のグラフすべて試して下さい。 Sub test7() Dim ser As Series Dim dl As Datalabel If ActiveChart Is Nothing Then Exit Sub With ActiveChart If .PivotLayout Is Nothing Then Exit Sub .ApplyDataLabels For Each ser In .SeriesCollection ser.DataLabels.Position = xlLabelPositionCenter ser.DataLabels.Font.Size = 18 For Each dl In ser.DataLabels If dl.ShowValue Then If dl.Text = "1" Then dl.ShowValue = False End If Next Next End With End Sub (マナ) 2015/11/08(日) 21:25 ---- マナ様 長い間、お付き合いして頂きまして本当にありがとうございました。 まさに希望通りです。 VBAをもっと勉強して自分でも作れるように頑張ります。 本当に感謝です。 ありがとうございます。 (メロウ) 2015/11/09(月) 08:43 ...
http://www.excel.studio-kazu.jp/wiki/kazuwiki/201509/20150930125226.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 96999 documents and 607826 words.

訪問者:カウンタValid HTML 4.01 Transitional