• ベストアンサー

エクセルVBAで自動チャート作成。 エラーになります

シート1に複数のデータが縦に入っています(A3:A90、B3:B90,C3:C90 といった具合です)データの数は30個です。 それぞれのデータを個々のチャートにして別のシート(シート名: Chart1)に並べて表示させたいです。 それで以下の様なコードを書きました。 このコードはうまく動くのですが、同じようにシート2のデータをChart2のシートにチャートを出そうと思って、4行目の・・・Source:=Sheet1.Range(Cells(3, j)・・・のところをSource:=Sheet2.Range(Cells(3, j)にして実行するとエラーになります。 何故だか分からなくて困っています。 対処方法を教えてください。 エラーは Run-time error ‘1004’: Application-defined or Object-defined error です。 お願いします。 For j = 1 To 30 Set ch = ActiveSheet.ChartObjects.Add(10, 5 + j * 105, 500, 100) ch.Chart.ChartType = xlColumnClustered ch.Chart.SetSourceData Source:=Sheet2.Range(Cells(3, j), Cells(90, j)), PlotBy:=xlColumns ch.Chart.Location where:=xlLocationAsObject, Name:="Chart1" With ch.Chart .HasTitle = True .ChartTitle.Characters.Text = False .Axes(xlCategory, xlPrimary).HasTitle = False .Axes(xlValue, xlPrimary).HasTitle = False End With Next j

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

  • ベストアンサー
  • taocat
  • ベストアンサー率61% (191/310)
回答No.4

再びこんにちは。NO.3です。 Sheet1でうまくいったということでしたのでちょっと考えてみましたら、分かりましたので追加情報です。 質問のコードはSheet1モジュールに書いてありますね。 なら話しがちょっと違います。 NO.3の回答は、コードをシートモジュールではなくて、標準モジュールに書いた場合です。 但し、Sheet1モジュールに書いた場合も問題点は、 Source:=Sheet2.Range(Cells(3, j), Cells(90, j)) これであり、回答は、 Source:=Sheet2.Range(Sheet2.Cells(3, j), Sheet2.Cells(90, j)) ですが、違いは Cellsの前のシートオブジェクトを省略した場合、標準モジュールでは、常にActiveSheetのセルですが、シートモジュールに書いた場合は、常にそのシートです。 ですから、 Source:=Sheet2.Range(Cells(3, j), Cells(90, j)) これは、Shee2.rangeでSheet2を指し、 Cells(3,j),Cells(90,j)は常にSheet1を指していることになり、エラーが出るわけです。 それ以外はNo3の回答の通りです。 以上です。

shingoogoo
質問者

お礼

回答有難う御座いました。 ご指摘のようにシート1にコードを書いていました。 いずれにしても、Range() の中の Cells前にシート名を指定しておかないとだめなんですね。 大変参考になりました。 回答いただいたコードでやってみます。

その他の回答 (3)

  • taocat
  • ベストアンサー率61% (191/310)
回答No.3

こんにちは。 先ず、疑問がひとつ。 >それで以下の様なコードを書きました。このコードはうまく動くのですが 疑問はこれです。 これSheet1をActive、・・Source=Sheet1にして実行されたのですよね。 ほんどうにまともに動作しましたか? J=1の時だけ動作して、J=2 でエラーが出たのではありませんか? ここからが回答です。 提示のコードの問題個所は次のコードです。 Source:=Sheet2.Range(Cells(3, j), Cells(90, j)) このようにCellsの前にシートオブジェクトが省略されているとこのセルは常にActivesheetのセルということになってしまいます。 今回のように、Activesheetが変わる場合は拙いわけです。 Sheet2.RangeでSheet2を指しながら、Cellsの方は現在のActivesheetを指してることになります。 で、以下のように修正してください。そこを修正するだけでちゃんと動作するはずです。 Source:=Sheet2.Range(Sheet2.Cells(3, j), Sheet2.Cells(90, j)) のように各Cellsの前にシート名(コード名)を付けてどのシートのセルなのか明示します。 こうすることにより、Activesheetがどれなのか気にする必要もないし、For文の中でSheet2のSelectを繰り返す必要もありません。 一番のお薦めは、Chart2にグラフを描きたければFor文に入る前に、Chart2をAcitveにしておくことです。 理由は、使ってみたらお分かりになると思います。(^^;;; 因みにSheet2をActiveにしておいてから実行した場合、Chart2がActiveになるのは提示のコードでいうと ch.Chart.Location where:=xlLocationAsObject, Name:="Chart1" この時点です。 それから、 >Source:=Sheet1.Range(Cells(3, j・・・のSheet1はシート名ではなく、アクティブになっているシートを表すと理解していいのでしょうか? そんなことはありません。 Sheet1はあくまでSheet1です。シート名(コード名)です。そしてActiveかどうかも関係ありません。 そうでなければ、シート名を使う意味がないですよね。 試しに、シートChart2をActiveにして当方の回答の修正を加えたコードを実行してみてください。それも分かると思います。 以上です。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 正直なところ、私も、それについては分かりません。 >Source:=Sheet1.Range(Cells(3, j・・・のSheet1はシート名ではなく、アクティブになっているシートを表すと理解していいのでしょうか? 私も同様の疑問には感じています。私の感覚でも、コンテナ形式(Sheet1.Range...)の書き方をした時には、Rangeオブジェクトは、明示的にシートの一点を指し示していますから、ブックのどこであっても見失うはずがありません。だから、エラーが出るはずがないように思うのです。ところが、エラーが出てきます。('1004'のいわゆる物理的エラーですね。) コードを試してみたら、グラフを別の場所に移した時点で、シートが飛ぶので、だいたい、シートを Select すれば解決する、というのは分かりましたが、説明はつきません。 だから、おっしゃるとおり「アクティブになっているシートを表すと理解していいのでしょうか? 」と、そう考えざるを得ないのですね。よりよいコードはどうしたら良いかは考えるのですが、まったく考えがまとまりません。すみません、説明になっていませんね。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 最後の 行の間に、以下のように、Sheet2.Select を加入してください。 End With Sheet2.Select Next j でも、画面がチカチカするので、 全体を、 Application.ScreenUpdating = False 'コード Application.ScreenUpdating = True で囲えばよいと思います。

shingoogoo
質問者

補足

有難う御座います。 Sheet2.Select を加入するだけで出来ました。 画面の切り替わりのチカチカも参考になりました。  でも、意味がいまいちつかめないです。Source:=Sheet1.Range(Cells(3, j・・・のSheet1はシート名ではなく、アクティブになっているシートを表すと理解していいのでしょうか?

関連するQ&A

  • VBA 実行時エラー1004 rangeメソッドは失敗しました。globalオブジェクトのエラー

    始めまして、VBA初心者のものです。 ただいまエクセルでグラフを作成しています。作業自体は単純作業の繰り返しなのでVBAを用いてやりたいのですが、マクロを実行したときに実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクトとメッセージが出て、実行できません。 デバックをすると以下の5行目で黄色のバーが出ていました。自分なりに原因を考えたのですがrangeの関係するところに、Range("A8:A1587,e8:e1587")というような変数を用いないやり方でやると上手くいくので、変数に関する定義がまずいと思うのですが、それ以上の事は分かりません。どなたか、分かる方がおりましたら、よろしくお願いします。また、プログラムは以下のようになります。 Sub 繰り返し() '繰り返し Dim s As Integer For s = 0 To 17 Range("cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)").Select Range("cells(8,s+2)").Activate Charts.Add ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets("20081216_210647").Range( _ "cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)"), PlotBy:=xlColumns ActiveChart.SeriesCollection(1).Name = "=""0810p2x""" ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="0810p2x" With ActiveChart .HasTitle = True .ChartTitle.Characters.Text = "0810p2x" .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "t" .Axes(xlValue, xlPrimary).HasTitle = False End With Next End Sub

  • Excelでのグラフ作成用マクロについて

    Excelで、グラフ作成をするマクロを作りました。 sheet1のBC列選択→sheet2に出力→プロットエリア拡大まではうまくいったのですが、肝心の「図の位置調整・サイズ調整」が出来ませんでした。 中身を見たところ、「グラフ12」とかいう名前が勝手についていたらしく、何回やってもその名前を変更することが出来ませんでした。 参照する列を変更してグラフを作成しようとすると、次のグラフが「グラフ13」となってしまい、図の位置調整のところでエラーになります。 マクロは次のようなものなのですが、どうすれば「グラフ12」ではなく、「先ほど作ったばかりのグラフ」を参照してくれるのでしょうか? グラフ12という部分に任意の名前さえつけられれば、何とかなりそうなのですが・・・ グラフ12というものは、「グラフウインドウ」で見られるもののようです。 Charts.Add ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("B1:C32158"), _ PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet3" With ActiveChart .HasTitle = False .Axes(xlCategory, xlPrimary).HasTitle = False .Axes(xlValue, xlPrimary).HasTitle = False End With ActiveSheet.Shapes("グラフ 12").IncrementLeft -182.25 ActiveSheet.Shapes("グラフ 12").IncrementTop -105.75 ActiveSheet.Shapes("グラフ 12").ScaleWidth 1.48, msoFalse, msoScaleFromTopLeft ActiveSheet.Shapes("グラフ 12").ScaleHeight 1.21, msoFalse, msoScaleFromTopLeft ActiveChart.Axes(xlCategory).Select ActiveChart.Axes(xlValue).MajorGridlines.Select ActiveChart.PlotArea.Select Selection.Top = 1 Selection.Width = 526 Selection.Height = 242 End Sub

  • 自動グラフ作成マクロの作り方に関してアドバイスを下さい

    Sub Macro4() For i = 4 To 8 Charts.Add ActiveChart.ChartType = xlXYScatterSmoothNoMarkers ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).XValues = "=zero!R13C1:R1013C1" ActiveChart.SeriesCollection(1).Values = "=zero!R13C" & i & ":R1013C" & i ActiveChart.SeriesCollection(1).Name = "=zero!R12C" & i ActiveChart.Location Where:=xlLocationAsNewSheet With ActiveChart .HasTitle = False .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "x axis" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "y axis" End With Next End Sub これはzeroというシートから自動的に複数のグラフを作成するマクロなのですが、 これを現在選択しているシートにするためにはどうすれば良いのでしょうか? それと作成するグラフの名称を自分で設定したセルの内容にしたいのですが、 どうすれば良いのでしょうか? よろしくお願い致します。

  • 任意にデータの範囲を選択し、グラフを描画したい

    質問を閲覧していただきありがとうございます。 できればみなさんのお力を貸していただきたいことがあり、質問しました。 以下にマクロ作成に用いたプログラムの仕様とコードを貼りますので、ご指摘等いただけましたら幸いです。 まず、今回のマクロの目的は ・既に存在するエクセルデータから、x軸、y軸のデータ列の長さに応じたグラフを描画するVBプログラムを書く事 です。 ・可能ならば、既存のふたつのグラフを結合したものを新しく表示する ※データシートの画像は添付しましたのでご覧ください。 以上のふたつとなります。 理想形としては、 A2 ~ A1025までをx軸のデータ、B2~B1025までの実データ値としたグラフAを一つ D2 ~ E1025までをx軸のデータ、E2~E1025までの実データ値としたグラフBを一つ 上記二つのグラフを結合したグラフを一つ の3つのグラフが自動的に作成され、エクセルファイル上に表示されている といったような感じです。 私の書いたコードの問題点としては、 ・グラフAグラフBともに「x軸と実データが正しく対応していない」 →本来両方のグラフにおいてはグラフの右端まで折れ線グラフが続いているはずですが、x軸の値にして約1000の所でデータが終わってしまっています。 ・グラフBでは、D2 ~ D344, E2 ~ E344 を基にしたグラフ一つのみが描画されているはずですが、ここには何故か二つ以上の折れ線グラフがあるようにみえ、グラフB右には系列1~5までがあるように書かれています。(理想としては5個ではなく実データを示すもの一つのみ) ・ふたつのグラフの結合方法が不明 という感じです。 以下にプログラムを貼ります。 お時間ありましたら、ご指摘の程宜しくお願い致します。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Sub グラフ描画() chart_title1 = "グラフA" chart_title2 = "グラフB" '軸のタイトル x_title = "周波数[Hz]" y_title = "パワー" ' -------------------------グラフ作成---------------------- ' グラフを描画 Dim chartObj1 As ChartObject Set chartObj1 = ActiveSheet.ChartObjects.Add(1, 1, 300, 200) With chartObj1.Chart ' データ範囲をセット .SetSourceData Source:=Range(Range("B2"), _ Cells(2, 1).End(xlDown)) ' x軸の項目軸範囲をセット .SeriesCollection(1).XValues = Range(Range("A2"), _ Cells(1, 1).End(xlDown)) ' オプションをセット .ChartType = xlXYScatterSmoothNoMarkers ' 散布図 .HasTitle = True .ChartTitle.Characters.Text = chart_title .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = x_title .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = y_title ' x軸の最大値、最小値設定 .Axes(xlCategory, xlPrimary).MinimumScale = 0 .Axes(xlCategory, xlPrimary).MaximumScale = 4500 ' y軸の最大値、最小値設定 .Axes(xlValue).MinimumScale = -10 .Axes(xlValue).MaximumScale = 3 End With Dim chartObj2 As ChartObject Set chartObj2 = ActiveSheet.ChartObjects.Add(1, 320, 300, 200) With chartObj2.Chart ' データ範囲をセット .SetSourceData Source:=Range(Range("E2"), _ Cells(2, 1).End(xlDown)) ' x軸の項目軸範囲をセット .SeriesCollection(1).XValues = Range(Range("D2"), _ Cells(1, 1).End(xlDown)) ' オプションをセット .ChartType = xlXYScatterSmoothNoMarkers ' 散布図 .HasTitle = True .ChartTitle.Characters.Text = chart_title .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = x_title .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = y_title ' x軸の最大値、最小値設定 .Axes(xlCategory, xlPrimary).MinimumScale = 0 .Axes(xlCategory, xlPrimary).MaximumScale = 4500 ' y軸の最大値、最小値設定 .Axes(xlValue).MinimumScale = -10 .Axes(xlValue).MaximumScale = 3 End With End Sub ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  • VBA 散布図 系列名 設定あるいは削除

    以下のように複数データ範囲を選択して、散布図を作成しており、 セルA2とB2に入力した数値からデータ範囲を設定しています。 しかし、実行すると、系列1~i以降に系列i+1~がだらだらと続いてしまいます。 系列i+1以降をを削除するか、ちゃんと1~iまで系列のみ表示させるにはどのようにしたら良いのでしょうか。 どうぞ宜しくお願い致します。 Dim i As Variant i = Range("A2").Value Dim j As Variant j = Range("B2").Value Dim k As Variant k = i Dim l As Variant l = j Dim ChartObj As ChartObject Dim ChartOne As Chart Set ChartObj = ActiveSheet.ChartObjects.Add(1260, 100, 350, 240) Set ChartOne = ChartObj.Chart With ChartOne .ChartType = xlXYScatterLines .HasTitle = True .ChartTitle.Text = Range("C3").Value .HasLegend = True .Legend.Position = xlLegendPositionRight With .Axes(xlValue, xlPrimary) .HasTitle = True .AxisTitle.Text = Range("D3").Value End With With .Axes(xlCategory, xlPrimary) .HasTitle = True .AxisTitle.Text = Range("E3").Value End With For k = 1 To i For l = 1 To j ChartOne.SeriesCollection.NewSeries ChartOne.FullSeriesCollection(k).Name = Cells(5, k + 10) ChartOne.FullSeriesCollection(k).XValues = Range(Cells(5, k + 30), Cells(4 + l, k + 30)) ChartOne.FullSeriesCollection(k).Values = Range(Cells(5, k + 50), Cells(4 + l, k + 50)) Next Next End With

  • Excelでのグラフ作成用マクロについて。

    「新しいマクロを記録する」でグラフ作成用のマクロを作りました。 内容は、 1.sheet1のBC列を散布図でsheet2に出力。(4つほど別々のグラフを作成) 2.プロットエリアの拡大 3.図の位置調整・図の大きさ調整。(4つが重ならないように) というものです。 一応出来たのですが、何故か選択列を変更して(マクロ内の列選択を変更)出力・プロットエリア拡大までは出来るのですが、3が出来ません。 それで、分からないなりにマクロ内を覗いてみたところ、図の位置を調整する際に、対象となる図が ActiveSheet.Shapes("グラフ 17").IncrementLeft -177.75 などと言うように、グラフ17を参照してしまっているためにうまく動かないのだと思いました。 (そもそも、名前なんて付けていないはず・・・と思って調べていたら、どうやら「グラフウインドウ」で見ることが出来る名前を参照しているようでした。) いっそのこと、グラフをクリック・ドラッグで移動させるのではなく、出力する際に整然と並ぶように設定したいです。どうすればよいでしょう? 一応、作成したものを載せておきます。 ・1~2 Charts.Add ActiveChart.ChartType = xlXYScatter ActiveChart.SetSourceData Source:=Sheets("Sheet1").Range("B1:C32158"), _ PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet2" With ActiveChart .HasTitle = False .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "mass" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "counts" End With ActiveChart.HasLegend = False ActiveChart.PlotArea.Select With Selection.Interior .ColorIndex = 2 .Pattern = xlSolid End With Selection.Top = 1 Selection.Width = 323 Selection.Height = 180 Selection.Left = 15 Selection.Width = 334 Selection.Height = 194 ActiveChart.Axes(xlCategory).Select With ActiveChart.Axes(xlCategory) .MinimumScale = 0 .MaximumScale = 50 .MinorUnitIsAuto = True .MajorUnit = 5 .Crosses = xlAutomatic .ReversePlotOrder = False .ScaleType = xlLinear .DisplayUnit = xlNone End With End Sub 3. ActiveSheet.Shapes("グラフ 17").IncrementLeft -182.25 ActiveSheet.Shapes("グラフ 17").IncrementTop -105.75 End Sub

  • Sub M()

    Sub M() Range("A1").Select Range(Selection, Selection.End(xlDown)).Select Range("A1:A289,B289").Select Range("B289").Activate Range(Selection, Selection.End(xlUp)).Select Charts.Add ActiveChart.ChartType = xlXYScatterSmoothNoMarkers ActiveChart.SetSourceData Source:=Sheets("08.31_n3_rev477_fai0_x300_y20_z"). _ Range("A1:B289"), PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsNewSheet With ActiveChart .HasTitle = False .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "T[sec]" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "U[v]" End With Sheets("08.31_n3_rev477_fai0_x300_y20_z").Select Range("A1").Select Range(Selection, Selection.End(xlDown)).Select Range("A1:A289,C289").Select Range("C289").Activate Range(Selection, Selection.End(xlUp)).Select Charts.Add ActiveChart.ChartType = xlXYScatterSmoothNoMarkers ActiveChart.SetSourceData Source:=Sheets("08.31_n3_rev477_fai0_x300_y20_z"). _ Range("A1:A289,C1:C289"), PlotBy:=xlColumns ActiveChart.Location Where:=xlLocationAsNewSheet With ActiveChart .HasTitle = False .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "T[sec]" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "U[v]" End With End sub このプログラムなのですが、 A289をx軸 B289~IV289までがy軸 上のプログラムをIV289までまわそうとFor文を 使って繰り返そうとしていますが、うまくできません。 どのようにFor文を使ったらいいでしょうか? サンプルをお願いします。

  • Excel VBA グラフ作成のときのエラー

    VBA初心者です。Excel2003を使っています。 Sheet1に作りたいグラフがあります。 データは下記のとおりです。 ActiveChart.SeriesCollection(1).Name = Cells(a_data, "A")のところで、「実行時エラー13 型が一致しません」とエラーがでます。 不思議なのは、昨日は動いていたのです。 なぜ、エラーが出るようになったのかわかりません。 ご教授よろしくお願いします。 A B 1 a 1 2 2 3 3 4 4 5 5 6 b 6 7 7 8 8 9 9 10 10 11 c 11 12 12 13 13 14 14 15 15 Sub test() Wrow = Worksheets("sheet1").Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To Wrow If Worksheets("sheet1").Cells(i, "A").Value = "a" Then a_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "b" Then b_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "c" Then c_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "d" Then d_data = Worksheets("sheet1").Cells(i, "A").Row End If Next Sheets("sheet1").Select Range(Cells(a_data, "B"), Cells(b_data, "B")).Select ActiveSheet.ChartObjects.Add(30, 10, 500, 200).Select ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Sheets("sheet1").Range(Cells(a_data, "B"), Cells(b_data - 1, "B")), PlotBy:=xlColumns ActiveChart.Location where:=xlLocationAsObject, Name:="sheet1" Sheets("sheet1").Select ActiveChart.Axes(xlCategory, xlPrimary).CategoryType = xlAutomatic ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).Name = Cells(a_data, "A") ←エラーがでます。 ActiveChart.SeriesCollection(2).Values = Range(Cells(b_data, "B"), Cells(c_data, "B")) ActiveChart.SeriesCollection(2).Name = Cells(b_data, "A") ActiveChart.SeriesCollection(3).Values = Range(Cells(c_data, "B"), Cells(d_data, "B")) ActiveChart.SeriesCollection(2).Name = Cells(c_data, "A") End Sub

  • エクセルチャート操作のマクロのエラー

    エクセルマクロ初心者です。グラフの縦軸をセルの値の変化に合わせて変化するよう(対照のセルはB1とB2で変化します。)下記のマクロをネット検索してモジュールに貼り付け機能するようになったのですが、シートに保護をかけると、「実行時エラー ー214767259(80004005): MaximumScaleメソッドは失敗しましたAxisオブジェクト のメッセージが出て機能しません。 Worksheet_SelectionChange(ByVal Target As Range) If Range(A1) <> "" Then Call AxesSet End Sub Sub AxesSet() Dim oChart As ChartObject Set oChart = Worksheets("Sheet1").ChartObjects(1) With oChart.Chart.Axes(xlValue, xlPrimary) .MaximumScale = Worksheets("Sheet1").Range(B1) .MinimumScale = Worksheets("Sheet1").Range(B2) .DisplayUnit = xlThousands .HasDisplayUnitLabel = False .MinorTickMark = xlInside End With End Sub 対照セルの保護の問題かと思い、セルのロックを解除したり、マクロから保護を解除するなど検索してみたのですが上手くいきません。シートを保護してもマクロが機能する解決方法お教えください。

  • 軸をVBAで下端/左端にするには

    シートファイル内に存在する軸をすべて下端/左端に揃えたいのですがうまくいきません… 今までVBAには触ったこともない初心者ですので、ソースがわけわからなくなっているかもしれませんがご容赦ください。 よろしくお願いします。 Sub kari() Dim chtobj As Object For Each chtobj In ActiveSheet.ChartObjects    With chtobj.Chart.Axes(xlValue, xlPrimary) .TickLabelPosition = xlNextToAxis  End With    With chtobj.Chart.Axes(xlCategory, xlPrimary) .TickLabelPosition = xlNextToAxis  End With Next End Sub

専門家に質問してみよう