プロが教えるわが家の防犯対策術!

こんにちは初心者で初めての質問です。
エクセルの折れ線グラフで規定以上は色が変わるマクロを拝見しました。
(5行のデーターで20以上は色が変わる)

大変参考になるのですが、実際例題に従ってマクロをくみ確認したところ
手動(F8)でもステップでの動作では動きますが、押しっぱなし、及び
ボタンに登録しての操作では
activechart.seriescollection(1).points(i).selectの箇所で

オブジェクト変数またはwithブロック変数が設定されてません。となり
ストップしてしまいます。
いろいろ ヘルプで調べましたがわかりません。
どなたかどう対応すれば解決するのか教えてください。
ちなみにOSはwindows7です。

A 回答 (7件)

前後関係が分からないので推測しますが、



> activechart.seriescollection(1).points(i).select

のiの値が、上記pointオブジェクトの数を超えているのではないでしょうか?


iを使われてるのでFor文またはLoop文を使われているかと思います。
上記の文の前後関係、特にFor文またはLoop文まわりを見せてください。

この回答への補足

早速の回答有難うございます。補足させていただきます
例題は当サイトで見たものです。
データーは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

補足日時:2012/05/24 21:16
    • good
    • 0

activechartになっていますか?


つまり、マクロ実行時に対象グラフが選択状態になっていますか?

質問とは無関係ですがselectはしなくても操作は可能です。
≪参考≫
グラフ操作関連のテクニック
http://moug.net/tech/exvba/0021.htm
Excel 2007以降のグラフ
http://www.officetanaka.net/excel/vba/graph/inde …

この回答への補足

早速の回答有難うございます。
対象グラフは選択状態です。
念のためマクロは下記です
マクロ例題は当サイトで見たものです。
データーは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

補足日時:2012/05/24 21:23
    • good
    • 0

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)では動きますが、ボタンを作り登録後動かすとエラー発生します
申し訳ございません。宜しくお願いします。

補足日時:2012/05/25 15:31
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/05/26 19:07

データ系列の値を判定する例です。


こちらも試してください。

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)では動きますが、ボタンを作り登録後動かすとエラー発生します
申し訳ございません。宜しくお願いします。

補足日時:2012/05/25 15:07
    • good
    • 0

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 …
    • good
    • 0

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

補足日時:2012/05/26 10:39
    • good
    • 0

>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に任意の名前を付けた方が良いかも知れません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/05/26 14:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!