• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:グラフの範囲指定をVBAで可変にしたい)

グラフの範囲指定をVBAで可変にする方法

WindsorAvenueの回答

回答No.2

間違っていたらゴメンなさい。 グラフは折れ線グラフで、データがない時にゼロまで線がひかれてしまうため、 毎回データ範囲を変更されているとしたら、以下のようにされると線がひかれません。 (1)データが手入力の場合、  空白ではなく、#N/A と入力 (2)関数で引張ってくる場合、  =IF(SINA(VLOOKUP(・・・,"",VLOOKUP(・・・  といった例えばこんな関数が入っていたら、 "" を NA() に変更 そうすると、データ範囲を変えなくても折れ線グラフはデータがある所までしか 表示されませんよ。 #N/Aの見栄えが悪いなら、条件付書式で見えないようにしたらOKです。

color1111
質問者

お礼

ありがとうございます!

color1111
質問者

補足

回答を読み、おお!その方法があった!と思い、これならさほど時間がかからずいけるかも!と思い作業を始めましたが、数値で計算をしているところが多々ありました。その為エラーがでるセルが多数でてしまい、そちらの式を書き直すのが時間がかかってしまいそうです・・・。今回は他の方法を模索します。

関連するQ&A

  • Excel:指定したデータ範囲を可変的に取得する方法。

    Excel:指定したデータ範囲を可変的に取得する方法。 現在、個人の労働時間の昨年度と今年度を月ごとに比較するグラフを作っています。 一人ひとりのグラフを新規シートに追加していくのですが、人数が多いのでこれをマクロに したいのです。 【sheet1の表(元データ)】 (A) (B) (C) (D) (E) (F) (G) (P) (1)      1月  2月  3月  4月・・・12月 (2) 1 社員A 20期 20 15.5 22.75 12 27.2 (3)    21期 12 12 26 10 13 (4) 2 社員B 20期 : : : : : (5)    21期 (6) 3 社員C 20期 (7)    21期 (8) 4 社員D 20期      21期 : : 【作りたいマクロ】 例)A2のセル[1]を選択して実行すると、社員Aのデータ範囲(B2~P3までと一行目の月単位行)を グラフ化し、新規シートに追加する。 ・上記例を他社員のデータ範囲にも使えるようにデータ範囲を可変的にしたい。 ・できればそのマクロをボタン化して、A列にそれぞれボタンを挿入したい。 ※A4[2]セルのボタンを押すと、社員Bのグラフが作成される。 下記にわかるところまでのコードを記します。(vba初心者で拙いコードですがお許しください) Sub Macro1() Range(Cells(1, 2), Cells(1, 18)).Select '1月~月平均の列 Range(Cells(2, 2), Cells(3, 18)).Select 'グラフ化する範囲 Cells(2, 2).Activate ActiveSheet.Shapes.AddChart.Select 'グラフ追加 'グラフデータの範囲設定 ActiveChart.SetSourceData Source:=Worksheets("Sheet1").Range(Worksheets("Sheet1").Cells(1, 2), Worksheets("Sheet1").Cells(1, 18)) ActiveChart.SetSourceData Source:=Worksheets("Sheet1").Range(Worksheets("Sheet1").Cells(2, 2), Worksheets("Sheet1").Cells(3, 18)) ActiveChart.ChartType = xlColumnClustered ActiveChart.ApplyLayout (5) ActiveChart.Location Where:=xlLocationAsNewSheet, name:="グラフ" ActiveSheet.Move after:=Worksheets("Sheet1") Sheets("Sheet1").Select End Sub 上記のコードだと範囲指定しているため社員Aのグラフしか作成できません。 範囲を可変的にするために変数を使おうと考えているのですが、 どのように書いてよいのか混乱してしまって・・・ 皆様にご教授願いたいと思いましてこちらに質問させていただきました。 長文および読み辛くなってしまい申し訳ありません。 どうかよろしくお願いいたします。

  • エクセルVBAでグラフの範囲を設定する方法

    お世話になっています。 グラフ自体は、作成済みのものを使用して、データの範囲だけを 変更させる方法を考えています。 A列に、データが入っている範囲を選択して、選択したセル範囲を グラフのデータ範囲としたいと思います。 現在、作成したプログラムは以下のものです。 当たり前なんでしょうが、以下のものではエラーになります。 Loopコマンドで、アクティブになったセルをグラフのデータ範囲に 設定する方法を教えてください。 よろしくお願いします。 Sub グラフ作成() ' Dim 範囲 As String Range("A1").Select Do Until ActiveCell = "" ActiveCell.Offset(1, 0).Activate Loop ActiveCell.Offset(-1, 0).Activate Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlUp)).Select   範囲 = ActiveCell ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.SetSourceData Source:=Range(範囲) End Sub

  • マクロでグラフのデータ範囲を換える

    散布図のグラフの参照データをマクロによって変更したいのですが、エラーが出て困っています。どこが誤っているのかご指摘いただければ幸いです。 ワークシート2にあるグラフ1について、 その1つ目のグラフを変更したい。 xの値をワークシート1の (a,7)~(z,7)に yの値を同じく(a,10)~(z,10)にしたいと思っています。 このオブジェクトはこのプロパティかメソッドをサポートしないとのエラーが出ます。 Set range1 = worksheets(1).Range(Cells(a, 7), Cells(z, 7)) Set range2 = worksheets(1).Range(Cells(a, 10), Cells(z, 10)) With Worksheets(2).ChartObjects("グラフ 1") .SeriesCollection(1).XValues = range2 .SeriesCollection(1).Values = range1 End With

  • グラフ可変範囲のデータ設定

    環境Excel2002です グラフ 1が棒グラフ2個、折れ線グラフ1個で作成されています Sheets("支社")に8支社のデータがあります グラフシートは1Sheetにしたいので グラフシートで支社を選択することにより Sheets("支社")の該当支社のグラフデータを取得します そうすると、グラフデータは可変範囲で設定することになります そのVBAが下記です ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.SeriesCollection(1).Select With ActiveChart.SeriesCollection(1) .XValues = Sheets("支社").Range(Cells(497, i), Cells(497, i + 12)) .Values = Sheets("支社").Range(Cells(497, i + 1), Cells(497, i + 12)) End With .XValues = Sheets("支社").Range(Cells(497, i), Cells(497, i + 12)) のところで実行時エラー1004がでてしまいます エラー回避方法を教えてください

  • VBA AutoFilter 範囲指定

    いつもお世話になっております 過去に https://okwave.jp/qa/q9707059.html にてワークシートのデータをオートフィルターをかけて別なワークシートにデータを取り出す方法を教えて頂きました 送られてくる元データが変更になって、A3セルの上のA2セルの上にテキスト文字が入るようになったので、範囲指定を正しく出来るようにする方法を https://okwave.jp/qa/q9708868.html にて教えて頂きました 今回、https://okwave.jp/qa/q9707059.htmlで教えて頂いたワークシートのコードを実行させると元データが変更になったデータを利用すると、A1セルまで含まれた範囲がAutoFilter の領域と判断される為正しい結果となりません 添付画像のワークシートで Sub test9() Worksheets("Sheet1").Range(Cells(3, "A"), Cells(Range("A3").CurrentRegion.Rows.Count, Range("A3").CurrentRegion.Columns.Count)) _ .AutoFilter Field:=2, Criteria1:=Cells(5, "G").Value End Sub を実行させれば、"秋田”でフィルターがきちんとかけれらた状態になります そこで教えて頂いたコードを下記に変更して実行させてみたのですが Dim i As Long With Worksheets("Sheet1") .Range("B4", .Range("B4").End(xlDown)).Copy .Range("G4").PasteSpecial (xlPasteAll) .Range("G4", .Range("G4").End(xlDown)).RemoveDuplicates Columns:=Array(1), Header:=xlNo For i = 4 To .Cells(Rows.Count, "G").End(xlUp).Row Worksheets.Add After:=Worksheets(Worksheets.Count) ActiveSheet.Name = .Cells(i, "G").Value .Range(Cells(3, "A"), Cells(Range("A3").CurrentRegion.Rows.Count, Range("A3").CurrentRegion.Columns.Count)) _ .AutoFilter Field:=2, Criteria1:=.Cells(i, "G").Value .Cells(3, 1).CurrentRegion.Copy Destination:=Worksheets(.Cells(i, "G").Value).Cells(3, 1) .AutoFilterMode = False Next .Range(Cells(3, "A"), Cells(Range("A3").CurrentRegion.Rows.Count, Range("A3").CurrentRegion.Columns.Count)) _ .AutoFilter Field:=2, Criteria1:=.Cells(i, "G").Value 部分で 実行時エラー'1004' アプリケーション定義またはオブジェクト定義のエラーです になってしまいます 元データがA2セルにテキスト文字が入った状態でも正常にコード動作させるにはどのようにしたらいいのでしょうか よろしくお願い致します

  • 印刷範囲を設定するvbaコード

    エクセルシートの印刷範囲を設定するvbaコードで Sub Macro1() With ActiveSheet.PageSetup .PrintArea = "$A$1:$c$10" End With End Sub としてるのですが、 "$A$1:$c$10"の部分を Range(Cells(1, 1), Cells(10,3)) 形式でやりたいのですが、 うまくできません。 Sub Macro1() With ActiveSheet.PageSetup .PrintArea = Range(Cells(1, 1), Cells(10,3)) End With End Sub としても、全部が印刷範囲として選択されてしまいます。 というか、印刷範囲が設定されません。

  • (VBA) 同名フォルダーの存在をチェック

    以下のコード(Sub ⑤フォルダー名の変更())でフォルダー名の変更を行っています。 変名時に同名ファイルがある場合エラーが以下のコードでエラーがでます。   .GetFolder(Range("A2").Text & Range("B" & i).Text).Name = Cells(i, LastColumn).Text エラー無く処理したいので  同名があるばあいは、フォルダー名の末尾に(1)、(2)を付加したいのですが  同名があるかどうかは?どのように判定しますか ? Sub ⑤フォルダー名の変更() Dim i As Long Dim LastColumn As Single Dim LastColumn_ABC As String Dim MSG As String LastColumn = Cells(5, "B").End(xlToRight).Column LastColumn_ABC = Split(Cells(1, LastColumn).Address, "$")(1) MSG = MsgBox("B列フォルダー名が" & LastColumn_ABC & "列フォルダー名に変更されます!" & vbCrLf _ & "B," & LastColumn_ABC & "列に値がなければ、処理は行いません。", 257, "フォルダー名変更") If MSG = vbCancel Then Exit Sub i = 5 'subフォルダ名取得が5行目からフォルダー名を表示するため。 Do While Range("b" & i).Text <> "" If Cells(i, LastColumn).Text <> "" Then ' 新フォルダー名がある場合のみ、名前変更を行う。 With CreateObject("Scripting.FileSystemObject") .GetFolder(Range("A2").Text & Range("B" & i).Text).Name = Cells(i, LastColumn).Text End With End If i = i + 1 Loop MsgBox "変名処理が終了しました。" End Sub

  • VBAでグラフの範囲指定

    VBAでグラフ範囲指定について 先日質問させて頂いたのですが、行き詰ってしまったのでどうかご指南ください。 只今、sheet1データ一覧をダブルクリックした際にsheet2へ移り、表の詳細データが記入されるツールを作っています。 sheet2には表詳細データ以外にも、空白を挟んで他のデータが記入され、詳細データの散布図グラフが挿入されています。 sheet2に移り詳細データが表示されるようには出来ているのですが、表は12行に項目、13行からデータが始まるのは固定で、終わりの行はその都度変わるため、sheet1のダブルクリックした際のシート移動の処理の中に記述し、sheet2に記入された表データを参照して散布図のグラフを挿入したく思いました。 Dim ws2 As Worksheet Dim logGYO As Long Dim j As Long Dim x軸 As Variant Dim 系列1y軸 As Variant Dim 系列2y軸 As Variant Dim GYOMAX As Long Set ws2 = Worksheets("sheet2名前") ws2.ChartObjects("詳細グラフ").Activate ActiveChart.ChartArea.Select logGYO = 13 j = 13 Do Until ws2.Cells(j, 1).Value = "" j = j + 1 Loop GYOMAX = j - 1 With ws2 x軸 = .Range(.Cells(logGYO, 1), .Cells(GYOMAX, 1)) 系列1y軸 = .Range(.Cells(logGYO, 2), .Cells(GYOMAX, 2)) 系列2y軸 = .Range(.Cells(logGYO, 4), .Cells(GYOMAX, 4)) End With With ActiveChart.SeriesCollection(1) .XValues = x軸 .Values = 系列1y軸 .Name = "=""系列1名前""" End With With ActiveChart.SeriesCollection(2) .XValues = x軸 .Values = 系列2y軸 .Name = "=""系列2名前""" End With 実行したところ、「SeriesクラスのXValuesプロパティを設定できません」とエラーが出てしまいます。 SeriesCollection(1).Formula = "=SERIES(" & Range("B12")~ とFormulaと記述を変えて試してもみたのですが、「SeriesクラスのFormulaプロパティを設定できません」とエラーが出ます。 2週間程前までExcel自体を殆ど使ったことが無かった初心者のため、見当外れな質問をしていたら申し訳ありません。 どうか宜しくお願い致します

  • VBA 印刷範囲設定がうまくいかない

    変数cntに値を代入し印刷範囲が変わるという事を、以下のコードで実行しようとしています。 Sub Macro1() cnt = 9 Sheets("A").Activate 範囲 = Sheets("A").Range(Cells(1, 1), Cells(33, cnt + 1)) ActiveSheet.PageSetup.PrintArea = 範囲 上記のコードですと、シート「A」のセルA1~J33までが印刷範囲になると思ったのですが、実行すると全く関係ないセルまで印刷範囲になってしまいます。 「A」シートには罫線やデータが入力されているセルが他にもあり、どうやらそれらのセルも同じく印刷範囲とされてしまっているようなのです。(例えばK列に罫線が引いてあり、セルに色がついているとK列まで印刷範囲になる) Sheets("A").Range(Cells(1, 1), Cells(33, cnt + 1)).select とすれば、望みどおりのセル範囲A1~J33がきちんと選択されるのですが、印刷範囲ではなぜこのようなことになってしまうのでしょうか。

  • VBAで範囲指定するのですが・・・

    VBA初心者です。 表題にあるようにあるエクセルデーターの範囲を指定したいのですが、 次の条件では範囲特定させるのはやっぱり無理でしょうか。 説明だけでは分かりにくいと思うので添付データーもご参照のうえアドバイスお願いします。 ・列は一定。 ・行は不定。例で言うとイベント数は増えたり減ったり。 ・イベントに対してaaa・bbb・cccが対象であるかどうかを●で表示する。 ・イベントのない枠はゼロ表示される。 ・選択したいセルの横にも文字列がある。 普通ならRange("A1", Cells(Worksheets("Book1").Rows.Count, 4).End(xlUp)) みたいな感じで範囲指定なんですかね? ただ、●が付いたりつかなかったりで右端のセルの特定がそれによって左右されますよね。 たとえば、イベントCのcccに●がついていれば上記の範囲指定で"D6"をえらんでくれるのですが、●が付いていないとき"D5"を右端のセルとして認識して6列を範囲にいれてくれないですよね。 なにかいい方法ないですか? 例えば"0"をValueと認識させない方法があれば、Range("A1", Cells(Worksheets("Book1").Rows.Count, 1).End(xlUp).offset(3,1))とできると思うのですが、そんなこと可能なのかまったくわかりません。 添付データーの黄色の部分を選択したいということです。 よろしくお願いします。