エクセルの折れ線グラフで数値以上は色が変わるマクロ

このQ&Aのポイント
  • エクセルの折れ線グラフで規定以上の数値は色が変わるマクロを作成したいが、実行時にエラーが発生する。
  • 手動でステップ実行すると正常に動作するが、ボタンに登録して実行するとエラーが発生する。
  • エラーメッセージにはオブジェクト変数またはwithブロック変数が設定されていない旨が表示される。Windows 7を使用している。
回答を見る
  • ベストアンサー

折れ線グラフである数値以上は色が変わるマクロ

こんにちは初心者で初めての質問です。 エクセルの折れ線グラフで規定以上は色が変わるマクロを拝見しました。 (5行のデーターで20以上は色が変わる) 大変参考になるのですが、実際例題に従ってマクロをくみ確認したところ 手動(F8)でもステップでの動作では動きますが、押しっぱなし、及び ボタンに登録しての操作では activechart.seriescollection(1).points(i).selectの箇所で オブジェクト変数またはwithブロック変数が設定されてません。となり ストップしてしまいます。 いろいろ ヘルプで調べましたがわかりません。 どなたかどう対応すれば解決するのか教えてください。 ちなみにOSはwindows7です。

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

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

>No.6 この回答への補足 上記で示されたMacro1のコードで説明します。 まず、ボタンの種類を明らかにしたいと思います。 本文の”ボタンに登録”という文言から ボタンの種類はフォームコントロールあるいはオートシェイプ等の図形だと判断できます。 こちらのボタンからの実行では問題なくMacro1は動作します。 他に、アクティブXコントロールのボタンがあります。 こちらのボタンに登録(ちょっと違和感がある表現ですが)されている場合 仰る通りの処でデバッグになります。 そこで、ActiveChartではなく先の回答でグラフ名を使うように提案しました。 フォームコントロールのボタンあるいはオートシェイプ等の図形でも問題ありません。 >With ActiveSheet.ChartObjects("グラフ 2").Chart.SeriesCollection(1) >の結果は、この部分で指定された名前のアイテム見つかりません。です。 これもActiveSheetではなく、シート名を使ってみてください。 下記○○○○○の部分をグラフが埋め込まれているシート名に変えて試してください。 Sheets("○○○○○").ChartObjects("グラフ 2").Chart.SeriesCollection(1) >又同じ画面で一旦グラフを消して再選択するとグラフの数字が変わってしまい >マクロの方を修正する必要があります。 直近に作成したグラフなら With Sheets("○○○○○") .ChartObjects(.ChartObjects.Count).Chart.SeriesCollection(1) End With で指定できます。 場合によってはChartObjectに任意の名前を付けた方が良いかも知れません。

okth524
質問者

お礼

素早い対応誠に有難うございます。 補足説明通りボタンとはオートシェプで実施しておりました。 これが登録すると、動いてくれませんでした。 しかし補足文中に、こちらのボタンからの実行では問題なくMacro1は動作します。 の文を拝見しまして、もしやと思いご指摘通りフォームコントロールに切り替えて 登録したところ、すべて問題解決です。誠に有難うございました。 オートシェプとフォームコントロールでは全く同じと思っていましたが、何かに 差があること分かりました。 ご丁寧且つ素早い対応本当に有難うございました。 今回ご指示頂いたシート名、グラフ名についてはただいま確認中ですが、 小生には若干難しくなっておりますので、じっくり確認させていただきます。 御蔭様でひとまず問題なく動くマクロが完成しましたこと、ご報告致しまして お礼に変えさせていただきます。誠にありがとうございました。 今後共よろしくご指導お願い申し上げます

その他の回答 (6)

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

No.5 のコード不備がありました。 Chartプロパティが抜けています。 下記に訂正します。 Dim yv As Variant Dim i As Long With ActiveSheet.ChartObjects("グラフ 1").Chart.SeriesCollection(1) yv = .values For i = LBound(yv) To UBound(yv) If yv(i) >= 20 Then With .Points(i) .MarkerBackgroundColorIndex = 3 .MarkerForegroundColorIndex = 2 End With End If Next i End With

okth524
質問者

補足

お忙しい中ご丁寧なご指示有難うございます。 検討結果をご報告いたします。 With ActiveSheet.ChartObjects("グラフ 1").Chart.SeriesCollection(1) に修正確認しました 当方のPCではグラフ名はグラフ2になります。 ただこれはコピーはできません。従って入力しました。 又同じ画面で一旦グラフを消して再選択するとグラフの数字が変わってしまい マクロの方を修正する必要があります。 With ActiveSheet.ChartObjects("グラフ 2").Chart.SeriesCollection(1) の結果は、この部分で指定された名前のアイテム見つかりません。です。 with activechart.seriescollection(1)に入れ替えてみましたが、 これですと for i = LBound....の箇所で型が一致しませんとなります。 皆様型のご指示で下記添付のマクロはスムースに動くこことが確認できるようになりました。が、ただしマクロ編集用の手動F8キー使用のときだけです。 なぜかマクロ用ボタンに登録すると *のところで オブジェクト変数又はwithブロックの変数が設定されてませんでエラーになります。(グラフは選択済み、グラフ埋め込み) 今までの半端な経験ですが、F8キーで問題なくなるとマクロボタンに登録しても一切問題は出ませんでした。 是非原因を教えてください。 初めてのOKWaveでの質問であり、グラフのマクロは初めてのため不慣れな 質問、文章で申し訳ありませんが、宜しく原因究明お願いします。 Sub Macro1() '折れ線グラフの20以上を赤印にする Dim i As Long For i = 1 To 5 With ActiveChart.SeriesCollection(1).Points(i) * If Worksheets("sheet1").Cells(i, "b").Value >= 20 Then .MarkerBackgroundColorIndex = 3 .MarkerForegroundColorIndex = 2 Else .MarkerBackgroundColorIndex = 8 .MarkerForegroundColorIndex = 2 End If End With Next i End Sub

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

ActiveChartは止めてグラフ名を使ってみてください。 "グラフ 1”の処を実際の名前に変えてください。 グラフを選択すれば数式バーの左隣にある「名前ボックス」にグラフの名前が表示されます。 コピーしてコードに貼ってください。 Dim yv As Variant Dim i As Long With ActiveSheet.ChartObjects("グラフ 1").SeriesCollection(1) yv = .values For i = LBound(yv) To UBound(yv) If yv(i) >= 20 Then With .Points(i) .MarkerBackgroundColorIndex = 3 .MarkerForegroundColorIndex = 2 End With End If Next i End With ≪参考≫ LBound, UBound 関数 http://homepage2.nifty.com/pasocon/nyumon/lbound.html

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

データ系列の値を判定する例です。 こちらも試してください。 Sub test03() Dim yv As Variant Dim i As Long With ActiveChart.SeriesCollection(1) yv = .values For i = LBound(yv) To UBound(yv) If yv(i) >= 20 Then With .Points(i) .MarkerBackgroundColorIndex = 3 .MarkerForegroundColorIndex = 2 End With End If Next i End With End Sub

okth524
質問者

補足

大変お世話になり有難うございます。 ご指示の通りのマクロをくみ確認しましたが、下記の箇所でエラーとなります。 For i = LBound(yv) To UBound(yv) 理由は型が一致しませんです。小生もこのLBound(yv)と UBound(yv) (yv)が並ぶことによく理解ができていません。(申し訳ありません) 又先にお送りしましたマクロが小生の発信ミスで半分抜けておりましたので 再度お送りしますので宜しくご検討下さい。 埋め込みグラフを実行してからマクロ実行しております。 データは整数の5個です。Worksheetsです Sub Macro3() For i = 1 To 5 '折れ線グラフの20以上を赤くする ActiveChart.SeriesCollection(1).Points(i).Select* With Selection Worksheets("sheet1").Activate If ActiveSheet.Cells(i, "b").Value >= 20 Then .MarkerBackgroundColorIndex = 3 .MarkerForegroundColorIndex = 2 Else .MarkerBackgroundColorIndex = 8 .MarkerForegroundColorIndex = 2 End If End With Next i End Sub *の部分でオブッジェクト変数またはwithブロックの変数が設定されてません でエラーとなります 手動(F8)では動きますが、ボタンを作り登録後動かすとエラー発生します 申し訳ございません。宜しくお願いします。

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

Sub test01() For i = 1 To 5 ActiveChart.SeriesCollection(1).Points(i).Select With Selection Worksheets("sheet1").Activate '★1 If ActiveSheet.Cells(i, "b").Value >= 20 Then .MarkerBackgroundColorIndex = 3 .MarkerForegroundColorIndex = 2 End If End With Next i End Sub ★1の処でグラフがアクティブでは無くなっているようです。 グラフは埋め込みグラフですか? それともグラフシートですか? 埋め込みグラフならグラフの在るシートはWorksheets("sheet1")ですか? それとも違うシートですか? 取りあえずSelectを止めて編集し直してみました。 試してください。 念のためですが実行前にグラフを選択して置いてください。 Sub test02() Dim i As Long For i = 1 To 5 With ActiveChart.SeriesCollection(1).Points(i) If Worksheets("sheet1").Cells(i, "b").Value >= 20 Then .MarkerBackgroundColorIndex = 3 .MarkerForegroundColorIndex = 2 End If End With Next i End Sub

okth524
質問者

お礼

お忙しい中ご指導誠に有難うございました。 手動ではご指示いただきましたマクロで問題なく動くのですが、 ボタンに登録するとエラーとなりました。 ボタンとはオートシェプで作ったものです。 念のためフォームコントロールで登録しましたところ無事ご指導いただいた マクロが動くことが確認できました。 今までオートシェプでもフォームコントロールでも同じ機能と理解してましたが、 今回の件で理由はわかりませんが、違いがあることが分かりました。 初めてのOKWave利用と初のグラフ加工マクロと言うことで、要領が悪く 大変ご迷惑お掛けしましたが、無事動くようになったことご報告申し上げ ましてお礼申し上げます 今後共宜しくご指導お願い申し上げます。

okth524
質問者

補足

大変お世話になり有難うございます。 ご指示の通りのマクロをくみ確認しましたが、手動(F8)ではスムースに動きましたが、ボタンを作り登録して押すと *の箇所でオブジェクト変数又はwithブロック変数が設定されてません。でエラーとなります。 又先にお送りしましたマクロが小生の発信ミスで半分抜けておりましたので 再度お送りしますので宜しくご検討下さい。 埋め込みグラフを実行してからマクロ実行しております。 データは整数の5個です。Worksheetsです。 Sub Macro3() For i = 1 To 5 '折れ線グラフの20以上を赤くする ActiveChart.SeriesCollection(1).Points(i).Select* ご指示では上記の部分が with ActiveChart.SeriesCollection(1).Points(i)となります。 * With Selection Worksheets("sheet1").Activate If ActiveSheet.Cells(i, "b").Value >= 20 Then .MarkerBackgroundColorIndex = 3 .MarkerForegroundColorIndex = 2 Else .MarkerBackgroundColorIndex = 8 .MarkerForegroundColorIndex = 2 End If End With Next i End Sub *の部分でオブッジェクト変数またはwithブロックの変数が設定されてません でエラーとなります 手動(F8)では動きますが、ボタンを作り登録後動かすとエラー発生します 申し訳ございません。宜しくお願いします。

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

activechartになっていますか? つまり、マクロ実行時に対象グラフが選択状態になっていますか? 質問とは無関係ですがselectはしなくても操作は可能です。 ≪参考≫ グラフ操作関連のテクニック http://moug.net/tech/exvba/0021.htm Excel 2007以降のグラフ http://www.officetanaka.net/excel/vba/graph/index.htm

okth524
質問者

補足

早速の回答有難うございます。 対象グラフは選択状態です。 念のためマクロは下記です マクロ例題は当サイトで見たものです。 データーは5個です 以上宜しく御検討ください。 Sub test01() For i = 1 To 5 ActiveChart.SeriesCollection(1).Points(i).Select With Selection Worksheets("sheet1").Activate If ActiveSheet.Cells(i, "b").Value >= 20 Then .MarkerBackgroundColorIndex = 3 .MarkerForegroundColorIndex = 2 End If End With Next i End Sub

  • nao-y
  • ベストアンサー率58% (111/190)
回答No.1

前後関係が分からないので推測しますが、 > activechart.seriescollection(1).points(i).select のiの値が、上記pointオブジェクトの数を超えているのではないでしょうか? iを使われてるのでFor文またはLoop文を使われているかと思います。 上記の文の前後関係、特にFor文またはLoop文まわりを見せてください。

okth524
質問者

補足

早速の回答有難うございます。補足させていただきます 例題は当サイトで見たものです。 データーは5個です。 もちろん折れ線グラフを選択後マクロを動かしています。 宜しくご検討下さい。 Sub test01() For i = 1 To 5 ActiveChart.SeriesCollection(1).Points(i).Select With Selection Worksheets("sheet1").Activate If ActiveSheet.Cells(i, "b").Value >= 20 Then .MarkerBackgroundColorIndex = 3 .MarkerForegroundColorIndex = 2 End If End With Next i End Sub

関連するQ&A

  • excelのマクロによるグラフの指定方法

    マクロがどのように記録されるかを見ながら、VBAのスクリプトの書き方を学んでいる初心者です。 Sub Macro1() ' ' Macro1 Macro , ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlLine ActiveWindow.ScrollColumn = 1 ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).Name = "='平均化'!$B$1" ActiveChart.SeriesCollection(1).Values = "='平均化'!$B$4:$B$18" ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(2).Name = "='平均化'!$C$1" ActiveChart.SeriesCollection(2).Values = "='平均化'!$C$4:$C$18" ActiveChart.ChartType = xlLine ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlLine ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).Name = "='平均化'!$D$1" ActiveChart.SeriesCollection(1).Values = "='平均化'!$D$4:$D$18" ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(2).Name = "='平均化'!$E$1" ActiveChart.SeriesCollection(2).Values = "='平均化'!$E$4:$E$18" ActiveSheet.ChartObjects("グラフ 1").Activate ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(3).Name = "='平均化'!$F$1" ActiveChart.SeriesCollection(3).Values = "='平均化'!$F$4:$F$18" End Sub 以上のマクロを作成し、実行したのですが、”指定した名前のアイテムが見つかりませんでした”と出て、上手く実行されませんでした。 操作対象のオブジェクトを行き来する方法を知りたいのですが、オブジェクトを作成するたびに ActiveSheet.ChartObjects("グラフ 1").Activate のダブルクオーテーション内に当たる値が自動的に割り振られるため、この部分でエラーになることは分かりました。 つまりこの値をこちらから指定出来れば、望んだ動作をさせられるのではと考えているのですが、 どなたかご教示お願いできませんでしょうか。

  • マクロでグラフを作成したい

    Charts.Add ActiveChart.ChartType = xlXYScatterLinesNoMarkers For i = 1 To 25    ActiveChart.SeriesCollection.NewSeries    ActiveChart.SeriesCollection(i).XValues = "=APC!"(3,X)":"Range(lngYCut,X)    ActiveChart.SeriesCollection(i).Values = "=APC!Cells(3,Y):Cells(lngYCut,Y)"    ActiveChart.SeriesCollection(i).Name = "=APC!R1C&X"  X = i * 3 + 1   Y = i * 3 + 2 Next 上記のプログラムでグラフを作成しています。(X,Y,lngYCutは事前に定義しています。) 25個のデータをグラフにする為、For文の中でグラフデータを1つずつ追加していこうと思っています。 データ範囲を変数で指定したいため、=のあとを変えないといけないと思っています。 ただ=のあと""で囲っているため、文字として入力しているんだと思います。 その文字列として入力している場所にどうにかして変数を使いたいです。 どなたか ActiveChart.SeriesCollection(i).XValues = のあとに変数を使用できる方法を教えてください

  • Excel VBAのグラフ化自動マクロがうまくできません。

    Sub 自動グラフ作成() For i = 5 To 32 Step 3 Charts.Add ActiveChart.ChartType = xlXYScatterSmoothNoMarkers ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).XValues = "=distance!R18C1:R1009C1" ActiveChart.SeriesCollection(1).Values = "=distance!R18C" & (i + 2) & ":R1009C" & (i + 2) Next End Sub 上記のように表の中の決められたセルからデータを取り出して自動的にグラフを作成してくれるマクロを作成したのですが、奇数個めのグラフは正常に生成されるのですが、偶数個めのグラフになぜか x= y=distance!$M$18:$M$1009 x= y={1} みたいな必要なグラフ以外に上記の2つのグラフを混じってしまいます。これってどこがおかしいのでしょうか? どなたか助けて下さい。 お願いいたします。

  • Excel マクロ グラフの線とマーカーの太さ変更

    Excel2010でのマクロで折れ線グラフをマクロで作ろうとしています。 線の太さを2.25pt、マーカーの太さを1.25ptにしたいのですが、 マクロの記録では ActiveChart.SeriesCollection(2).Select '線の太さ With Selection.Format.Line .Visible = msoTrue .Weight = 2.25 End With 'マーカーの太さ With Selection.Format.Line .Visible = msoTrue .Weight = 1.25 End With となり、同じ太さになってしまいます。 手動でデータ系列の書式設定をすると各々別の太さになるのですが、 マクロではどうすればいいでしょうか? 宜しくお願いいたします。

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

    エクセルのグラフマクロについて質問します。 系列の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 当方、マクロかじりたての初心者です。 どなたか、よろしくおねがいします!

  • Excelマクロでグラフ作成

    現在、Excelのマクロでグラフを作成しようとしていますが、データ範囲の指定で悩んでいます。 マクロはド素人で右も左もわからない状態から、なんとなく雰囲気だけわかってきたような感じです。 とあるHPをそのまま貼り付け用シートにコピペして、そこからデータ抽出用シートにデータを抽出して蓄積していく形にしています。 品名が複数あるので、オートフィルタを使用してソートするために始点をどう決めるのかがわからないのと、データがどんどん蓄積していくために終点もどう決めたらいいのかわかりません。 「データ抽出用シート」のデータ形式は、 18行目にA:品目 B:最低値 C:平均値 D:最高値 G:日付 19行以降にデータ という形になっています。 とりあえず、通常のマクロを記録する方法でマクロの骨組みだけ作ってから細部をいじろうとしております。 データの範囲を指定する部分だけコピペしますので、ここをどういじったらいいのかご教授願います。 とある品目を指定してオートフィルタをかけた後に、グラフ作成手順のマクロを記録したら、こんな感じになりました。 Charts.Add ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Sheets("データ抽出用シート").Range("L17") ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).XValues = "=データ抽出用シート!R19C7:R366C7" ActiveChart.SeriesCollection(1).Values = "=データ抽出用シート!R19C2:R366C2" ActiveChart.SeriesCollection(1).Name = "=データ抽出用シート!R18C2" ActiveChart.SeriesCollection(2).XValues = "=データ抽出用シート!R19C7:R366C7" ActiveChart.SeriesCollection(2).Values = "=データ抽出用シート!R19C3:R366C3" ActiveChart.SeriesCollection(2).Name = "=データ抽出用シート!R18C3" ActiveChart.SeriesCollection(3).XValues = "=データ抽出用シート!R19C7:R366C7" ActiveChart.SeriesCollection(3).Values = "=データ抽出用シート!R19C4:R366C4" ActiveChart.SeriesCollection(3).Name = "=データ抽出用シート!R18C4" ActiveChart.Location Where:=xlLocationAsObject, Name:="データ抽出用シート" 宜しくお願いします。

  • エクセル マクロでグラフの色を変えたい

    エクセル マクロにて 折れ線グラフが3つあるとします。 その中の1つグラフの名前が”あああ”とします。 そのグラフの最初の2つの点の色を赤、緑と変える方法をマクロで教えてください。

  • excel2010 マクロでの散布図作成

    excel2010で、ログを整理して複数のグラフを自動作成するマクロを作成しています 散布図の作成手順を記録した後、変数を当てなおしマクロを走らせると記録時と異なる挙動を示し、記録時にはひとつしか作成しなかった系列が25個くらい作成されました 下記マクロでおかしなところがあればご指摘ください ------------------------------ sheetname2 = ActiveSheet.Name ActiveSheet.Shapes.AddChart.Select ActiveChart.ChartType = xlXYScatterLinesNoMarkers ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).Name = "='" & sheetname2 & "'!$E$1" ActiveChart.SeriesCollection(1).XValues = "='" & sheetname2 & "'!$A$2:$A$" & y3 ActiveChart.SeriesCollection(1).Values = "='" & sheetname2 & "'!$E$2:$E$" & y3 ------------------------------- 作りたいグラフ:散布図 系列 「アクティブシート」のセルE1 x軸  「アクティブシート」のセルA2~A「y3」 y軸  「アクティブシート」のセルE2~E「y3」 なお、シート名を固定すると色々と問題があるため、変数としてあります また、変数y3は別途取得してありますが、省略いたします

  • エクセル グラフ データラベルにX軸の値を表示

    VBAでエクセルのグラフにX軸の値を表示させる方法を教えて下さい。 このように書いているのですが、Type:=xlCategoryでエラーとなってしまいます。 For i = 1 To ActiveChart.SeriesCollection(1).Points.Count ActiveChart.SeriesCollection(1).Points(i).HasDataLabel = True ActiveChart.SeriesCollection(1).ApplyDataLabels Type:=xlCategory Next i Y軸を表示させるxlValueではエラーとならず、Y軸の値が表示されました。 教えて下さい。 宜しくお願い致します。

  • excel折れ線グラフ間を塗り潰し

    excelの折れ線グラフで、3本以上の折れ線(積み重ねではない)があり、その間を希望の色で塗り潰したいのです。面グラフにして単色に塗り潰すと、一番上の色から次々に色が重なって、二番目以降の折れ線については希望の色にできません。excelではできないのでしょうかね。どなたか、教えて下さい。

専門家に質問してみよう