• 締切済み

VBA 全グラフに適応されない理由

お世話になっております。 Excel2003を使用しております。 1400個のグラフを自動作成しております。 -------------------------------- Function GlaphSetting() 'グラフ色などの設定 Dim C As ChartObject On Error Resume Next For Each C In ActiveSheet.ChartObjects ' C.RoundedCorners = True C.Chart.AutoScaling = False C.Chart.PlotArea.Interior.ColorIndex = xlNone C.Chart.PlotArea.Border.ColorIndex = xlNone 'プロットエリアの色を消す C.Chart.Axes(xlValue).MaximumScale = 5 'メモリ最大値 C.Chart.Axes(xlValue).MinimumScale = 0 'メモリ最小値 C.Chart.Axes(xlValue).MajorUnit = 1 'メモリ間隔 If ComboBox4.Text <> "" Then '氏名が入ってると、メモリ-1にしたい! C.Chart.Axes(xlValue).MinimumScale = -1 'メモリ最小値 C.Chart.PlotArea.Top = 50 C.Chart.PlotArea.Width = 100 C.Chart.PlotArea.Height = 100 C.Chart.PlotArea.Left = 50 End If If ComboBox4.Text = "" Then '氏名が空のとき C.Chart.Axes(xlValue).HasMajorGridlines = False End If C.Chart.ChartArea.Font.Size = 8 '全部のフォントサイズ Next End Function ---------------------------- 上記方法でフォントサイズの設定等を行っているのですが、 全グラフの文字サイズが8になっていなく、 ActiveSheet.ChartObjectsの個数は制限があるのか?なんて思っております。 間にプログレスバーの表示を行っておりますが、 しっかり全部動いているみたいであり、 1400個中、33個目くらいまでしか フォントサイズが変わっておりません。 ステップインで確認してみましたが、 ステップインだと33個以上も大丈夫な気がします。 何か、理由をご存知の方がいらっしゃいましたら 回答をお願い致します。

みんなの回答

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

何故Functionなのですか? Subじゃいけないのですか? 設定できないのはフォントサイズだけですか? 取りあえず On Error Resume Next を外して動かせばどうなりますか?

satoron666
質問者

お礼

回答頂きありがとうございます。 Functionの理由は特にありませんでした。 (自分でも何故そうしたのか覚えておりません) フォーム上にプログレスバーを設置しており、 処理が進行しているかチェックしているため、 問題なくできているはずです。 文字サイズのみ変更されず、他の変更はできております。 (プロットエリアの色を消すとか) グラフを作っている段階の部分に フォントサイズの設定等を移動したら 上手く動作しました。 なぜ、途中から文字サイズのみ変更されなかったのか 良く分かりませんが、 グラフを作成している段階でフォントサイズを変更すれば 良いとわかりました。 ありがとうございました^^

関連するQ&A

  • Excel グラフ自動作成が遅い VBA

    いつもお世話になっております。 今回は、大量のグラフを作る際に動作が異常に遅いため質問させて頂きました。 http://okwave.jp/qa/q8384381.html 下記リンクにあるように、グラフを作成しています。 Function GlaphSetting() 'グラフ色などの設定 Dim C As ChartObject On Error Resume Next For Each C In ActiveSheet.ChartObjects C.Chart.Axes(xlCategory).TickLabels.Orientation = xlVertical '縦書き調整 C.Chart.ChartGroups.GapWidth = 70 '幅を70に C.Chart.ChartArea.Font.Size = 9 '全部のフォントサイズ C.Chart.PlotArea.Interior.ColorIndex = xlNone 'プロットエリア色なし C.Chart.PlotArea.Border.ColorIndex = xlNone '枠線なし C.Chart.Axes(xlValue).HasMajorGridlines = False 'メモリ見えなくする C.Chart.Axes(xlValue).MinimumScale = 0 'メモリ最小値 Next End Function 実行すると、データ量により物凄く遅くなります。 (グラフの数は14、項目数52)※今のところの最大量 実行すると、5分程度はかかるでしょうか・・・ ためしにメッセージボックスを使い、 ストップウォッチで計ってみました。 データ処理     :2秒 その他の処理   :2秒 グラフ作成処理  :1分12秒 グラフの編集    :4秒 でした。 グラフの作成処理をどうにか早くできないでしょうか? 回答よろしくお願い致します。

  • [VBA]グラフを作りたいです!(^-^v

    教えて下さい。 テキストファイルの内容を元に自動的グラフを作りたいです。 【C:\Temp\data.csv】の中身 ----------------------------------- 1回目,10.50% 2回目,30.45% 3回目,70.45% ----------------------------------- 横軸には「n回目」の文字列を、縦軸には「n%」数値を入れたいです。 なんとか静的にグラフを作ることは出来ましたが、これを自動化したいと思っています。 【サンプルvba】 ----------------------------------- Private Const LOGFILE = "C:\Temp\data.csv" Private Sub CommandButton1_Click() ' グラフオブジェクト作成(位置,サイズ) With Sheet1.ChartObjects.Add(10, 50, 400, 150).Chart .ChartType = xlLine ' 折れ線グラフ .Axes(xlValue).MaximumScale = 100 ' 縦軸最大値 .Axes(xlValue).MinimumScale = 0 ' 縦軸最小値 ' グラフデータ内容 With .SeriesCollection.NewSeries ' グラフ名 .Name = "テスト" ' 縦軸 (ここに%数値を入れたい) .Values = "={10.50,30.45,70.45}" ' 横軸 (ここに回数を入れたい) .XValues = "={""1回目"",""2回目"",""3回目""}" End With End With End Sub ----------------------------------- テキストファイルの内容は一定間隔で更新されるため自動的に取り込みたいです。 すいませんがよろしくおねがいします、、。(T▽T)ノ

  • Excel2003マクロ(グラフ)が2007エラー

    お世話になります。 Excel2003で作成したマクロ(グラフの縦軸を調整)が2007でエラーになり困っています。 マクロは既に作成されているグラフの縦軸の最大値、最小値、目盛間隔を変更するものです。 マクロの記録を元に作成しました。 ActiveSheet.ChartObjects("lv" & chart_count).Activate (ここまではエラーにならず、グラフが選択された状態になりました。) With ActiveChart.Axes(xlValue) ←この行でエラーになります .MinimumScale = lower_limit .MaximumScale = upper_limit .MinorUnitIsAuto = True .MajorUnit = interval .Crosses = xlCustom .CrossesAt = lower_limit   .ReversePlotOrder = False .ScaleType = xlLinear .DisplayUnit = xlNone End With 2007でもマクロの記録をして、何も変更せずに実行してみたのですが ActiveChart.Axes(xlValue).select のところでエラーになりました。 何も変更せず、記録したまま実行してもエラーになるので、何が悪いのか全く分からず困っています。 どなたかマクロに詳しい方、教えて頂けませんでしょうか。

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

    質問を閲覧していただきありがとうございます。 できればみなさんのお力を貸していただきたいことがあり、質問しました。 以下にマクロ作成に用いたプログラムの仕様とコードを貼りますので、ご指摘等いただけましたら幸いです。 まず、今回のマクロの目的は ・既に存在するエクセルデータから、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)

    マクロの記録にて、グラフに横軸ラベルの追加を記録したところ 以下のようなコードになりました。 ActiveSheet.ChartObjects("グラフ 30").Activate ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Text = "μsec" これと同じことをVBAのコードから実行しようとしたのですが、  ActiveChart.Axes(xlValue, xlPrimary).AxisTitle.Text = "μsec" の行にて"オブジェクトが必要です"というエラーがでました。 何のオブジェクトが足りないのでしょうか? ActiveSheet.ChartObjects("グラフ 30").Activate にて チャートオブジェクトは指定されているので、チャートオブジェクトでは無いと思うのですが・・

  • 新しいグラフを作成すると、既存グラフが新しいグラフと同一になってしまう。

    Excel2003のVBAにて次のマクロを作成し、実行したところ、 新しいグラフを作成すると、既存グラフが新しいグラフと同一になってしまいます。 グラフは月度毎に作成します。 1月度のグラフを作成すると、 11月度のグラフ・12月度のグラフが、1月度のグラフと同じものになってしまいます。 マクロ作成時には、グラフ要素データの変化が小さく気が付かなかったのですが、グラフ要素データの変化が大きくなった時点で気が付きました。 解決方法をご存じの方、是非ともご教授願います。 'A:グラフを作成するシートの番号 'Sheets("Positions"):グラフを作成する位置データ保管庫 'L,T,W,H:グラフの位置データ(グラフを作成する都度指定) 'E:グラフ要素仕訳標 'F:作成したグラフの名前の保管場所標(グラフ要素変更時にグラフを更新するため)   Sheets(A).Select NN = Sheets(A).Name With Sheets(A).ChartObjects.Add(L, T, W, H)'L .Chart.ChartType = xlDoughnut If E = 0 Then .Chart.SetSourceData Source:=Sheets("Positions").Range("Q1:Q11"), PlotBy:=xlColumns Else .Chart.SetSourceData Source:=Sheets("Positions").Range("R1:R11"), PlotBy:=xlColumns End If .Chart.Location Where:=xlLocationAsObject, Name:=NN .Chart.HasTitle = False .Chart.HasLegend = False .Chart.ChartArea.Border.LineStyle = 0 .Chart.ChartArea.Interior.ColorIndex = xlNone .Chart.PlotArea.Border.LineStyle = xlNone .Chart.PlotArea.Interior.ColorIndex = xlNone End With R = Sheets(A).ChartObjects.Count Sheets("Positions").Cells(F, 3) = Sheets(A).ChartObjects(R).Name

  • ExcelのVBAについて(グラフ操作)

    現在、会社の端末がOffice2010と2003が混在している状態にあります。今のところ2003で作成されたファイルがほとんどです。 そこで問題が出てきたのですが、2003で作成したBookに埋め込みグラフとそれを操作するVBAがあり、そのVBAを2010のインストールされた端末で実行するとエラーが出てしまいます。コードは以下の通りです。 エラーの内容は、「'MinimumScale'メソッドは失敗しました: 'Axis'オブジェクト」 となります。Withの中すべてで同様のエラーが出ます。 ・ ・ ・ With ActiveChart.Axes(xlValue) .MinimumScale = 0 .MaximumScale = Data '事前に計算した値 .MinorUnitIsAuto = True .MajorUnitIsAuto = True .Crosses = xlAutomatic .ReversePlotOrder = False .ScaleType = xlLinear .DisplayUnit = xlNone End With ・ ・ ・ 理由がよくわからなかったので、2010で同様のグラフを作成し、上記の操作をマクロに記録したところ、同様のコードが記録されました。 グラフ自体が2003と2010では違うものなのでしょうか? 解決方法がありましたら教えていただきたいです。

  • Excel VBA グラフオブジェクトの使用方法について

    Excel2003のVBAについて教えて下さい。 以下の(1)~(4)のコードを用いて セル"A1"に設定された値をグラフスケール(最大値)に設定しようとしています。 (1) scaleData = Worksheets("シート1").Range("A1").Value (2) Set chartObj = ActiveSheet.ChartObjects(1) (3) Set chart1 = chartObj.Chart (4) chart1.Axes(xlValue).MaximumScale = scaleData グラフオブジェクト単体(グループ化しない)時は問題なく、グラフスケールの設定が行えたのですが、グラフオブジェクトやラベル、ボタンなどを結合すると、(3)で、以下のエラーメッセージが出て、グラフスケールの設定が行えません。 「WorksheetクラスのChartObjectsプロパティを取得できません。」 グループ化することにより、グラフオブジェクトの指定方法が異なるのでしょうか? 解決方法をご存知の方、教えて下さい。宜しくお願い致します。

  • エクセル2013 VBA グラフのデータ系列変更

    エクセル2013を使っています。マクロ初心者です。グラフも普段あまり扱いませんので不慣れです。よろしくお願いします。 マクロの記録を使ってグラフのデータ範囲を変更したら、下記コードが記録されました(○○○はシート名です)。 ActiveSheet.ChartObjects("グラフ 2").Activate ActiveChart.Axes(xlValue).MajorGridlines.Select ActiveChart.FullSeriesCollection(1).Values = "='○○○'!R189C37:R199C37" ActiveChart.FullSeriesCollection(2).Values = "='バ○○○'!R189C38:R199C38" この189と199に変数を下記のように入れました。 Dim r As Integer r = Range("A1").End(xlDown).Row Dim i As Integer Dim s As Integer s = r - 10 i = ActiveCell.Value ActiveSheet.ChartObjects("グラフ 2").Activate ActiveChart.Axes(xlValue).MajorGridlines.Select ActiveChart.FullSeriesCollection(1).Values = "='○○○'!R" & s & "C37:R" & r & "C37" ActiveChart.FullSeriesCollection(2).Values = "='○○○'!R" & s & "C38:R" & r & "C38" これを実行すると、エラーコード400になっていまいます。 どうすればいいのでしょうか?

  • 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

専門家に質問してみよう