• ベストアンサー

VBA チャートグラフの凡例 表示非表示

タイトルの通り、凡例の表示非表示を設定したいと考えています。 HasLegendプロパティで凡例のオンオフを切り替えられる事までは理解したのですが 例えばグラフに要素が10個あると凡例も10個表示されると思います。 しかし今回は10このあるうちの指定した3つのみの凡例を表示するというようなことをしたいのです。 オブジェクトウィンドウを確認してみましたがそれらしいプロパティは見当たらず... なにか方法があればご教授願います。 よろしくお願いします

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

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

先のコメントにもありますが 個々の凡例を削除することはできますが 表示/非表示を切り替える機能はないようですので、 表示する凡例を都度選択したい場合は、 グラフを描写し、非表示にしたい判例を削除する という制御を行う必要があるものと思います。 サンプル画像とコードをポストしますので よかったら参考にしてください。 Option Explicit Sub sample()    Dim r As Long  Dim i As Long    With ActiveSheet     'グラフを削除   On Error Resume Next   .Shapes(1).Delete   On Error GoTo 0     'グラフ描写   Range("B2:G7").Select   .Shapes.AddChart2(317, xlRadar).Select   ActiveChart.SetSourceData Source:=Range("Sheet1!$B$2:$G$7")   'グラフ位置、大きさ設定   With .Shapes(1)    .Top = Range("J2").Top    .Left = Range("J2").Left    .Height = 300    .Width = 250   End With  End With  '凡例表示  With ThisWorkbook.Sheets(1)   r = .Cells(Rows.Count, 2).End(xlUp).Row '2列目最終行番号   For i = r To 3 Step -1    If .Cells(i, 8).Value = 0 Then     ActiveSheet.ChartObjects(1).Chart.Legend.LegendEntries(i - 2).Delete    End If   Next i  End With End Sub

sk8577
質問者

お礼

例も含めて詳しく回答して下さりありがとうございます。

その他の回答 (1)

  • kon555
  • ベストアンサー率52% (1738/3334)
回答No.1
sk8577
質問者

お礼

質問後、ちょうど同じ記事を発見して解決に至りました。ご回答ありがとうございます。

関連するQ&A

  • VBAでグラフの凡例をまびきたいのですが

    エクセル2003のVBAで、グラフの凡例をまびきたいのですがやり方がわかりません。 例えば 系列1:凡例表示 系列2:凡例非表示 系列3:凡例表示 系列4:凡例非表示 といった具合です。 以下のような雰囲気のコードはないでしょうか。 For i=1 to 10 Workbooks("matome.xls").Charts("Graph_PinPex").SeriesCollection(i * 2).HasLegend = False Next i

  • グラフから凡例をとりたい

    みなさまのご教授をお願いいたします。 EXCELグラフをVBアプリで作成する場合、 凡例が自動的に付加されますが、 これを表示しないようにするには、 どんな設定(プロパティ)をすれば良いのでしょうか?

  • Scilabのグラフの凡例

    Scilabのグラフの凡例 Scilabのグラフの凡例に,例えばP1(1は下付き文字)と表示させたいのですが,下付き文字はどのように指定すればよいのでしょうか.

  • グラフの凡例のデータ範囲を変数を使って設定したい

    エクセルで線グラフを作成し、凡例を設定するvbaの記述方法がわかりません。 凡例に設定したいデータは、連続する2つのセルの範囲で、変数を用い、記述できないかと模索しています。 線グラフは3つの系統あります。 記述内容は以下の通りです --------------------------------------------------------- Sub グラフ化() d = Worksheets("sheet1").Range("A10").End(xlUp).Row ThisWorkbook.Charts("Graph1").Activate With ActiveChart    .ChartType = xlLine    .HasDataTable = True    .HasLegend = True End With For i = 1 to 3 ActiveChart.SeriesCollection(i).Name = Worksheets("sheet1").Range(Cells(i, 3), Cells(i, 5)) Next End Sub ----------------------------------------- 上記の記述ですと、 'Cells'メソッドは失敗しました.'Global'オブジェクト とエラー表示がでます。 すみませんが、よろしくお願いします。

  • 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になることまでは確認できています。 各グラフを掴めているかは確認できておりません。 以上となります。 ご多忙とは思いますが、ご教授いただけると幸いです。 宜しくお願い致します。

  • chart.jsの多重円グラフで系列表示について

    chart.jsを使いグラフを作る方法を最近学び始めたものです。基本的なものはなんとなく出来たのですが、今回多重円グラフに作るための系列の設定につて行き詰まっています。下記のコードで多重円は出来たのですが、系列を凡例として表示させる方法がわかりません。 <script> var ctx = document.getElementById("myPieChart"); var myPieChart = new Chart(ctx, { type: 'pie', data: { labels: ['1月','2月','3月','4月','5月','6月','7月'], datasets: [ {label:'仙台' ,data: [320000,590000,400000,420000,380000,250000,420000],}, {label:'札幌' ,data: [520000,450000,380000,280000,590000,400000,530000],}, {label:'渋谷' ,data: [650000,230000,480000,600000,620000,700000,760000],}, ] }, options: { title: { display: true, text:'' }, legend: { // 凡例 display: true, // 表示の有無 position: 'top' // 表示位置 } }, plugins: { colorschemes: { scheme: 'office.Red6' } } }); </script> 1月、2月等は凡例として上部に出ているのですが、仙台、札幌等の系列名を同様に出しクリックで円を消したり表示したりするようにしたいのです。系列名だけ表示されていてこれが出来るサンプルがあったのですがコードまでの説明がありませんでした。 多重円の中から任意の円を非表示、表示させるコードをご教授願います。

  • chart.js4系で凡例をカスタマイズする方法

    今回、chart.jsの2系から4系に変更するにあたり下記の多重円のサンプルで以前から気になっていた系列を利用した凡例の■(以前は濃いグレー)を黒からそれぞれ任意の色に出来ないかと思い悩んでいましたが、米国のあるQ&Aサイトに載っていた方法(前に投稿しましたが削除済み)等試しましたがそこまでしなくても単にfontColorをreturn内で指定するだけで出来ました(下記コード)。 しかしこの方法でもボックス部分とテキストを含めた凡例全体の色が変わりました。今回はpinkで指定したところ、テキストの色がpinkでは見た目が鮮明とはいえません。やはり、テキストとボックス部分で別の色の出来ないかと思いまして、何か解決方法があればお教えください。 <script> const CHART_COLORS = {'赤': 'rgb(230,0,18)','プラム': 'rgb(221,160,221)','マゼンタ': 'rgb(228,0,127)','スカイブルー': 'rgb(160,216,239)','紫': 'rgb(146,7,131)','緑': 'rgb(0,153,68)','ゴールド': 'rgb(255, 215, 0)' }; const ctx = document.getElementById("myPieChart"); const myPieChart = new Chart(ctx, { type: 'pie', data: { labels: ['Jan','Feb','Mar','Apr','May','June'], // X軸のラベル datasets: [ { label: 'NY', data: [32, 59, 40, 42, 38, 25],backgroundColor: Object.values(CHART_COLORS), tension: 2,fill: false}, { label: 'LA', data: [52, 45, 38, 28, 59, 40],backgroundColor: Object.values(CHART_COLORS), tension: 2,fill: false}, { label: 'CHI', data: [65, 23, 48, 60, 62, 70],backgroundColor: Object.values(CHART_COLORS), tension: 2,fill: false} ] }, options: { responsive: false, // canvasサイズ自動設定機能を使わない。HTMLで指定したサイズに固定 plugins: { legend: { // 凡例 display: true, // 表示の有無 position: 'bottom', // 表示位置 labels: { generateLabels: function(chart) { return chart.data.datasets.map(function(datasets, i) { return { fontColor: 'pink', //凡例の色を指定 datasetIndex: i, text: datasets.label, fillStyle: datasets.backgroundColor, strokeStyle: datasets.borderColor, // 表示状態に連動して取り消し線表示 hidden: !chart.isDatasetVisible(i), }; }); } }, onClick: function(e, legendItem){ const index = legendItem.datasetIndex; const ci = this.chart; const meta = ci.getDatasetMeta(index); meta.hidden = meta.hidden === null ? !ci.data.datasets[index].hidden : null; ci.update(); } } } } }); </script> さらに欲を言えば「labels: ['Jan','Feb', 」等を使ったデフォルトの凡例も別位置に配置出来ないかと考えています。なお、デフォルト凡例と <button・・でで作った凡例の両方操作できる方法は、このサイトで以前(https://okwave.jp/qa/q9820330.html)教えてもらっています。 どうかよろしくお願いいたします。 また、同じような内容で投稿、削除を繰り返し行っていることお許しください。

  • エクセルで上付き,下付き文字を凡例に入れる方法を教えて下さい。

    エクセルで凡例として上付き,下付き文字を使用するにはどうしたらよいのでしょうか? セルの中ではきちんと表示されるのですが,グラフの中の凡例では解除されてしまいます。 どなたか御教授お願いします。

  • chart.jsのグラフを複数個表示する方法

    今回は、chart.jsのグラフを複数表示する方法についてお尋ねします。一応下記のコードで棒グラフ×1、円グラフ×3を上下2個ずつ配置出来るようにまではなったのですが、ただ単に1個のグラフのコードを4回繰り返したようなものですので無駄が多く冗長なコードになっています。これをもっとコンパクトなものに出来ないかと思い投稿した次第です。html,css,javascriptに関しては専門家でないのでつまみ食い程度の知識で間に合わせたお粗末なコードですが、宜しくご教授願います。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8">  <title>multiグラフ</title> </head> <body> <div class="row" style="width: 70%;" > <div class="chart1" style="float: left;" > <canvas id="myChart1" width="550" height="450"></canvas></div> <div class="chart2" style="float: right;"> <canvas id="myChart2" width="550" height="450"></canvas></div> <div class="chart3" style="bottom: 0;float: left;"> <canvas id="myChart3" width="550" height="450"></canvas></div> <div class="chart4" style="bottom: 0;float: right;"> <canvas id="myChart4" width="550" height="450"></canvas></div> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.js"></script> <script src="https://unpkg.com/chartjs-plugin-colorschemes"></script> <script> Chart.defaults.global.legend.labels.usePointStyle = false; //以降の凡例スタイルを矩形のまま var ctx = document.getElementById("myChart1"); var myPieChart = new Chart(ctx, { type: 'bar', data: {labels: ['1月','2月','3月','4月','5月','6月','7月'], // X軸のラベル datasets: [ {label: '仙台',data: [320000, 590000, 400000, 420000, 380000, 250000, 420000]}, {label: '札幌',data: [520000, 450000, 380000, 280000, 590000, 400000, 530000]}, {label: '渋谷',data: [650000, 230000, 480000, 600000, 620000, 700000, 760000]}]}, options: { plugins: { colorschemes: {scheme: 'office.Slice6'}}, responsive: false, // canvasサイズ自動設定機能を使わない。HTMLで指定したサイズに固定 title: { display: false,  text:''},     legend: { // 凡例 display: true, // 表示の有無 position: 'top' } // 表示位置 }}); Chart.defaults.global.legend.labels.usePointStyle = true; //以降の凡例スタイルを矩形を円に変える var ctx = document.getElementById("myChart2"); var myPieChart = new Chart(ctx, { type: 'pie', data: {labels: ['1月','2月','3月','4月','5月','6月','7月'], // X軸のラベル datasets: [{label:'仙台' ,data: [320000, 590000, 400000, 420000, 380000, 250000, 420000]}]}, options: { plugins: { colorschemes: {scheme: 'brewer.DarkTwo7'}}, responsive: false, // canvasサイズ自動設定機能を使わない。HTMLで指定したサイズに固定 title: { display: true,   text:'仙台'},     legend: { // 凡例 display: true, // 表示の有無 position: 'left',} // 表示位置 }}); var ctx = document.getElementById("myChart3"); var myPieChart = new Chart(ctx, { type: 'pie', data: { labels: ['1月','2月','3月','4月','5月','6月','7月'], // X軸のラベル datasets: [{label:'札幌' ,data: [520000, 450000, 380000, 280000, 590000, 400000, 530000]}]}, options: { plugins: { colorschemes: {scheme: 'brewer.DarkTwo7'}}, responsive: false, // canvasサイズ自動設定機能を使わない。HTMLで指定したサイズに固定 title: { display: true, text:'札幌'}, legend: { // 凡例 display: true, // 表示の有無 position: 'left'} // 表示位置 }}); </script> </body> </html> 文字数の関係で渋谷のグラフ(myChart4)の部分はカットしました。

  • 円グラフを作成しています

    円グラフ作成中なのですが、分からない事があったので、教えて 頂きたいと思います。 介護度別人数を円グラフにし、グラフ・タイトル・グラフの周りに データラベル=人数(値のみ)・凡例(介護度の値のみ)を 表示させました。 やりたい事が次のものです。 凡例のタイトルというか、凡例の色と介護度数(値)の上(枠内)に 「介護度」と表示できないか? データラベルの値が人数だと分かるように値かグラフの近くに「人」 と表示できないか? グラフの大枠の中にワードでいうテキストボックスのようなものを 挿入し、介護度の平均を表示できないか? 特に上2つで困っています。 どうぞ、よろしくお願いします。

専門家に質問してみよう