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
質問者
補足
お忙しい中ご丁寧なご指示有難うございます。
検討結果をご報告いたします。
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
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
データ系列の値を判定する例です。
こちらも試してください。
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
質問者
補足
大変お世話になり有難うございます。
ご指示の通りのマクロをくみ確認しましたが、下記の箇所でエラーとなります。
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)では動きますが、ボタンを作り登録後動かすとエラー発生します
申し訳ございません。宜しくお願いします。
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
大変お世話になり有難うございます。
ご指示の通りのマクロをくみ確認しましたが、手動(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)では動きますが、ボタンを作り登録後動かすとエラー発生します
申し訳ございません。宜しくお願いします。
早速の回答有難うございます。
対象グラフは選択状態です。
念のためマクロは下記です
マクロ例題は当サイトで見たものです。
データーは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
早速の回答有難うございます。補足させていただきます
例題は当サイトで見たものです。
データーは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
お礼
素早い対応誠に有難うございます。 補足説明通りボタンとはオートシェプで実施しておりました。 これが登録すると、動いてくれませんでした。 しかし補足文中に、こちらのボタンからの実行では問題なくMacro1は動作します。 の文を拝見しまして、もしやと思いご指摘通りフォームコントロールに切り替えて 登録したところ、すべて問題解決です。誠に有難うございました。 オートシェプとフォームコントロールでは全く同じと思っていましたが、何かに 差があること分かりました。 ご丁寧且つ素早い対応本当に有難うございました。 今回ご指示頂いたシート名、グラフ名についてはただいま確認中ですが、 小生には若干難しくなっておりますので、じっくり確認させていただきます。 御蔭様でひとまず問題なく動くマクロが完成しましたこと、ご報告致しまして お礼に変えさせていただきます。誠にありがとうございました。 今後共よろしくご指導お願い申し上げます