計算値を含むセルからデータ系列を取得するチャート(クラスター化された列)を含むExcelドキュメント(2007)があります
計算された値は直接変化することはありませんが、シート内の他のセルが変化した結果としてのみ変化します
シート内の他のセルを変更すると、データシリーズのセルが再計算され、新しい値が表示されますが、このデータシリーズに基づくグラフは自動的に更新されません
グラフを更新するには、設定を保存/閉じるか、設定の1つを切り替えて(x/y軸を反転してから元に戻すなど)、またはデータシリーズを再選択します。
オンラインで見つけたすべてのソリューションが機能しない
私は次のようなVBAスクリプトを試しました:
Application.Calculate
Application.CalculateFull
Application.CalculateFullRebuild
ActiveWorkbook.RefreshAll
DoEvents
これらのいずれもチャートを更新または更新しません
データシリーズ、計算ではなく実際の数値を上書きすると、グラフが更新されます。これは、Excelが計算の変更を認識したくないかのようです。
誰もこれを経験したことがありますか、問題を解決するために私が何をするか知っていますか?ありがとうございました
私はこの同じ問題に遭遇しました-理由はわかりませんが、それが起こったときにグラフを強制的に更新する唯一の方法は、グラフ定義自体の何かを変更することです。
Dim C As ChartObject: Set C = Me.ChartObjects("chart name")
C.Chart.ChartTitle.Text = C.Chart.ChartTitle.Text + "1"
問題の底に到達するより良い答えがあるかもしれません-しかし、私はこれが役立つかもしれないと思いました。シートでの作業では、チャートの一部(または全体)でCtrl-X、Ctrl-Vをすばやく実行して、チャートを強制的に更新します。
これは、チャートを一貫して更新することがわかった唯一のことです。問題の根本原因を切り分けます(私は推測します)。系列データはチャートにキャッシュされます。チャートにシリーズの再評価を強制することにより、キャッシュをクリアしています。
' Force the charts to update
Set sht = ActiveSheet
For Each co In sht.ChartObjects
co.Activate
For Each sc In ActiveChart.SeriesCollection
sc.Select
temp = sc.Formula
sc.Formula = "=SERIES(,,1,1)"
sc.Formula = temp
Next sc
Next co
VBA
を介して1000以上のグラフを生成しているときにこの問題が発生しました。グラフを生成し、そのシリーズに範囲を割り当てました。ただし、シートが再計算されると、データ範囲の値が変更されてもグラフは更新されません。
ソリューション->グラフを生成するFor ... Nextループの前にWrapTextをオフにし、ループ後に再びオンにしました。
Workbooks(x).Worksheets(x).Cells.WrapText=False
以降...
Workbooks(x).Worksheets(x).Cells.WrapText=True
これは、すべてをループして個別に変更することなく、1000以上のグラフを一度に更新するため、優れたソリューションです。
また、なぜこれが機能するのか本当に分かりません。 WrapTextがデータ範囲の1つのプロパティを変更すると、グラフが更新されますが、これに関するドキュメントはありません。
単純な円グラフでも同じ問題が発生しました。
私が試したマクロはどれもうまくいきませんでした。 cut
、pasting
、relocating
チャートでは何も機能しませんでした。
私が見つけた回避策は、グラフのテキストを編集し、ラベルを削除してから、ラベルを再選択することでした。それらが再表示されると、更新されました。
これはばかげたバグで、Excelでの作業を著しく妨げています。
投稿された回避策に基づいて、私は単純な方法で前進するために次のアクションに行きました...
更新するグラフをクリックします-CTRL-X、CTRL-Vを選択して、グラフを切り取り、貼り付けます...強制的に更新されます。
本当に解決策があります。
グラフを更新することができないという問題は、グラフに供給するデータ列を非表示にした直後に発生し、グラフの[データソースの選択]メッセージボックスで[行と列に非表示のデータを表示].
「データソースの選択」メッセージボックスに戻って、グラフが更新される「行と列に非表示のデータを表示する」のチェックを外した場合、それを確認しました。
プログラム的に、ボタンをリンクしたマクロに次のコードを挿入しました。これにより、既知のバグを回避するのに十分な速さですべてのチャートが更新されます。このコードは、ワークシートごとに1つのチャートを想定していますが、必要に応じてチャート1〜Nの別のforステートメントを追加できます。
Sub RefreshCharts()
Application.ScreenUpdating = False
For I = 1 To ActiveWorkbook.Worksheets.Count
Worksheets(I).Activate
ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.PlotVisibleOnly = True
ActiveChart.PlotVisibleOnly = False
Next I
Application.ScreenUpdating = True
End Sub
これは私にとって非常にうまく機能します-すべてのチャートで軸を反転し、次に元に戻します。これにより、まったく変更せずに更新されます。
'Refresh all charts
For Each mysheet In ActiveWorkbook.Sheets
mysheet.Activate
For Each mychart In ActiveSheet.ChartObjects
mychart.Activate
ActiveChart.PlotArea.Select
ActiveChart.PlotBy = xlRows
ActiveChart.PlotBy = xlColumns
ActiveChart.PlotBy = xlRows
Next
Next
これはExcelの既知のバグです...
最善かつ最速の回避策はColumns.AutoFit
- トリック:
Sub Update_Charts()
Application.ScreenUpdating = False
Temp = ActiveCell.ColumnWidth
ActiveCell.Columns.AutoFit
ActiveCell.ColumnWidth = Temp
Application.ScreenUpdating = True
End Sub
私は同じ問題に直面しました。この問題は、制限がないためです。シート内の計算式の。次の2つの方法で解決できます。
手動強制再計算:
Press SHEFT + F9
再計算を強制するマクロ:データを変更する関数の最後に以下のコードを追加します
Activesheet.Calculate
解決策が見つかりました: Excelのオプションから、以下のように計算オプションを変更してください。 Excelでの大量の作業の後、時々手動に変更されました。
チャートを再生成するという別の問題があります。グラフを自動的に生成するとき、一部のグラフはシート上に表示され、テキストをキャッシュします。生成されたチャートを更新する問題が発生します。ズームインまたはズームアウトすると、期待どおりの結果が得られます。だから誰かに興味があるなら、私はここに解決策を投稿します。プログラムで、チャートを生成した後にこれを追加しました:
ActiveWindow.Zoom = ActiveWindow.Zoom + 1
ActiveWindow.Zoom = ActiveWindow.Zoom - 1
この問題はばかげています! 2010年には誰のソリューションも機能しませんでしたが、私はtpascaleのソリューションをベースにしました。
Dim C As ChartObject
Set C = ActiveSheet.ChartObjects("CTR_Chart")
C.Chart.SetSourceData Source:=Range( _
"KeywordBreakdown!$A$8:$A$12,KeywordBreakdown!$E$8:$E$12")
ソースデータの範囲を再定義するだけです。名前付き範囲の場合、それは合理的にきれいであると考えられます。これに対する最善の解決策は、更新されるまでさまざまなチャートプロパティを変更しようとすることです。
この問題が発生し、2つのExcelアプリケーションを同時に実行していることが原因であることがわかりました。すべてを閉じてファイルのみを開いた場合、動的なはずのグラフで問題が発生していました。たぶんこれは役立ちます
VBAを使用しないソリューションが見つかりました。チャートのデータ範囲の一部の要素にTODAY()-TODAY()+1
を掛けます。
範囲がこれなしで再計算されていたとしても、TODAY()
の揮発性の性質により、チャートの再計算をトリガーする追加のブーストが何らかの形で与えられます。
Excel 2013以降、Chart.Refreh
メソッド( https://msdn.Microsoft.com/de-de/library/office/ff198180.aspx )私のために働いた:
Dim cht As ChartObject
For Each cht In ThisWorkbook.ActiveSheet.ChartObjects
cht.Chart.Refresh
Next cht
これは私のために働いた、それはアクティブなワークシート上のチャートを切り取って貼り直します。これはJasonのコードと ブログ投稿 に基づいており、簡単なGoogle検索で見つけました。
Sub RepasteCharts()
Dim StrTemp As String
Dim IntTempTop As Integer
Dim IntTempLeft As Integer
Set sht = ActiveSheet
For Each co In sht.ChartObjects
'Activate the chart
co.Activate
'Grab current position on worksheet
IntTempTop = ActiveChart.Parent.Top
IntTempLeft = ActiveChart.Parent.Left
'Cut and paste
ActiveChart.Parent.Cut
ActiveSheet.Paste
'Reposition to original position
ActiveChart.Parent.Top = IntTempTop
ActiveChart.Parent.Left = IntTempLeft
Next co
End Sub
提示されたソリューションのほとんどすべてを試しましたが、私の場合はどれも機能しなかったため、ここにも2セントを追加します。うまくいけば、それは他の誰かを助ける。
この問題に関するコンセンサスは、Excelが必要なときにグラフを再描画しないため、何らかの方法でExcelにグラフを再描画させる必要があるということです。
私の解決策は、X-Axisデータを削除して何も置き換えないでから、希望するものに変更することでした。ここに私のコード:
With wsReport
.Activate
.ChartObjects(1).Activate
ActiveChart.FullSeriesCollection(1).XValues = "=" 'Kill data here
.Range("A1").Select 'Forwhatever reason a Select statement was needed
.ChartObjects(1).Activate
ActiveChart.FullSeriesCollection(1).XValues = "=tblRef[Secs]"
End With
End Sub
私にとっては、最初に計算を無効にしてから有効にすることで(たとえば、アクティブなワークシートで)問題を解決しました。
ThisWorkbook.ActiveSheet.EnableCalculation = False
ThisWorkbook.ActiveSheet.EnableCalculation = True
連続して2回実行することもあります。ワークシートのすべてのグラフが完全に更新されます。
これに自分で半日費やしました。
グラフのデータである値を変更するマクロがあります。すべてはExcel 2003で正常に機能しましたが、Excel 2007では、2つの列のデータ値を手動で変更すると再計算がトリガーされましたが、グラフはそのデータへのすべての接続を失ったようです。
私の解決策は、データを変更する前にアクティブシート上のすべてのグラフを非表示にし、再度表示して、適切な方法でグラフの更新を呼び出すことです。 (この問題が更新されているのは、目に見えるグラフだけのようです)。
これは私にとっては有効であり、チャートおよびチャートオブジェクトに関する同様の問題も処理します。更新は必要ないかもしれません-より多くのテストが必要です。
Dim chrt As Chart
Dim chrtVis As XlSheetVisibility
Dim sht As Worksheet
Dim bChartVisible() As Boolean
Dim iCount As Long
Dim co As ChartObject
On Error Resume Next
Set chrt = ActiveChart
If Not chrt Is Nothing Then
chrtVis = chrt.Visible
chrt.Visible = xlSheetHidden
End If
Set sht = ActiveSheet
If Not sht Is Nothing Then
ReDim bChartVisible(1 To sht.ChartObjects.Count) As Boolean
iCount = 1
For Each co In sht.ChartObjects
bChartVisible(iCount) = co.Visible
co.Visible = False
iCount = iCount + 1
Next co
End If
データを変更するマクロスタッフを行う
If Not sht Is Nothing Then
iCount = 1
For Each co In sht.ChartObjects
co.Visible = bChartVisible(iCount)
co.Chart.Refresh
iCount = iCount + 1
Next co
End If
If Not chrt Is Nothing Then
chrt.Visible = chrtVis
chrt.Refresh
If chrt.Visible Then
chrt.Select
End If
End If
On Error GoTo 0
ソースデータの値を変更すると、チャートがそれに応じて更新されませんでした。 Excelのすべてのインスタンスを閉じて再起動すると、問題はなくなりました。
多数の数式と複数のデータベース接続を含む2010ファイルで、今日同様の問題が発生していました。参照を更新しなかったチャート軸は、このチェーンの他のものと同様に、非表示列のある範囲にあり、ラベルには動的データの月と年「MMM-YY」が表示されました。コードなしで解決したいので、VBAオプションを除くすべてのソリューションを試しました。
= TEXT(A10、 "MMM-YY")のように、日付(軸ラベル)をTEXT数式にカプセル化することで問題を解決できました。値が変更されると、すべてがすぐに更新されます。再び幸せな日!!!
上記の他の投稿者の問題を読むことから、チャートは特にDATEデータ型の問題を抱えていると考え始めたため、TEXT関数を使用して値をテキストに変換すると問題が解決しました。うまくいけば、これもあなたに役立つかもしれません。ニーズに合わせて、二重引用符(TEXT関数の2番目の引数)内の形式を変更するだけです。
この問題に対する私の2セントは、Access 2010レポートのチャートで同様の問題を抱えていました。クエリ定義を動的に作成し、それをレポートの行ソースとして設定し、各シリーズをループして各シリーズのプロパティを設定しようとしました。最終的には、querydefの作成とプロパティ設定を別々のサブに分割する必要がありました。さらに、私は
SendKeys ("{DOWN}")
SendKeys ("{UP}")
2つの潜水艦それぞれの下部にあります。
チュートリアルの作業中に同じ問題が発生しました(手順を実行しても期待どおりの結果が得られない場合は非常にイライラします)。
円グラフを作成するチュートリアルでは、範囲A3:A10
、次に隣接していない範囲も選択しますE3:E10
。そうしました。チャートを得た。
次に、値を変更してパーセンテージの変化を確認し、円グラフを見て更新を確認するように求められました。
更新されませんでした。
円グラフのデータソースを調べたところ、範囲は奇妙でした。 A3:A10
範囲は正しく表記されていますが、E10
セル参照が数回繰り返され、すべてのE
セルがランダムな順序でリストされました。のように見えた
=SERIES(,(Revenue!$A$3:$A$10,Revenue!$E$3,Revenue!$E$10,Revenue!$E$10,Revenue!$E$10,Revenue!$E$10,Revenue!$E$10,Revenue!$E$9,Revenue!$E$8,Revenue!$E$7,Revenue!$E$6,Revenue!$E$5,Revenue!$E$4),1
データソースを次のように変更しました。
=SERIES(,Revenue!$A$3:$A$10,Revenue!$E$3:$E$10,1)
問題が解決しました。場合によっては、コードをクリーンアップして、計算プロセッサでのソートを減らす必要があります。
チャートがある場所でシートをアクティブにします。
Sheets(1).Activate
そしてあなたの問題は消えます。
私は同じ問題を抱えていましたが、シートをアクティブ化するまで、あなたが言及したことはどれも私にとってはうまくいきませんでした。受け入れられた答えは私にとってもうまくいきませんでした。
または、次のようにすることもできます。
ActiveCell.Activate
私はちょうど同じ問題を抱えていて、悪いデータ(数字ではなく文字)を入力した場合にのみ行が表示されることもわかりました。これにより行が表示されましたが、有効なデータに戻すと再び消えました。
私が見つけたのは、行をダブルクリックすると(悪いデータが表示される)、何らかの理由でSECONDARY軸上にあることを示したということです。これをPRIMARY軸に変更すると、問題が解決しました。
私もこの問題に苦労しました。最後に、カスタム関数が再計算された後、チャートデータを含むシートを再計算することでそれを解決しました。したがって、シート1には、
=ComputeScore()
VBAモジュールでは、スプレッドシートの更新後にComputeScore()が実行されるように、関数はVolatileとして定義されています。
Function ComputeScore() As Double
Application.Volatile True
. . . do some stuff to get a total . . .
ComputeScore = theTotal
End Function
次に、シート1のVBAで次のようにします。
Private Sub Worksheet_Calculate()
'Recalculate the charts data page to force the charts to update.
'Otherwise, they don't update until the next change to a sheet, and so
'chart data is always one update behind the user's data changes.
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlManual
Sheets("Charts Data").Calculate
Application.Calculation = xlAutomatic
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
したがって、Sheet 1のカスタム関数セルを参照するCharts Dataという名前のシートは、Worksheet_Calculate()がComputeScore()recalcの後に起動するため、ComputeScore()関数がSheet 1のセルを更新した後に再計算を行います。チャートデータのこの追加ラウンドの計算により、チャートは後で更新されるのではなく、今すぐ更新されます。 EnableEventsおよびxlManualの設定により、無限の再計算ループおよびその他のイベントの問題が発生しなくなります。
先週、自分のシートにさらに計算を追加したときに、仕事で同じ問題に直面しました。その後、ラジオボタンを使用してグラフに表示するデータを選択しても、グラフは更新されなくなりました。
私がこれまでに見つけた最良の説明は次のとおりです。 http://support.Microsoft.com/kb/243495
私がそれを正しく理解していれば、ファイルに別のセルを参照する65536を超える数式がある場合、Excelは計算の最適化を開始し、場合によってはグラフが正しく更新されなくなります。
VBAマクロを使用せずにこれに対する回避策がある場合、それを聞いてうれしいです(VBAマクロなしでSharePointを介してファイルを共有する必要があるため、これらを使用できません)。
ポスターと同じ問題がありました。基本的に、ダッシュボードを実行していますが、いくつかのUDFからの戻り値が設定された名前付き範囲がたくさんあります。ダッシュボードには、これらの名前付き範囲を含むセルに結び付けられたデータ系列を持ついくつかの円グラフがあります(データ系列のターゲットセルが名前付き範囲をバイパスしてUDFを直接含む場合にも問題が発生します)。
たとえば、ダッシュボードの基になる日付範囲を含むセル値を変更すると、名前付き範囲とUDFの計算が強制されます。ただし、円グラフは更新されません。何らかの理由で、他の種類のグラフは更新されます。ところで、これらはチャートオブジェクトであり、チャートシートではありません。とにかく、ソリューションにカットしましょう:
チャートのタイトルやその他の面を目に見えて変更したくはありませんでしたが、とにかくこれがチャートを一貫して更新していないことに気付きました。計算を最初にトリガーしたときにパイが更新されることがありましたが、その後の計算ではパイは更新されませんでした。ただし、コードを変更するたびにダッシュボードが機能することに気付きました。したがって:
解決策:
With ActiveWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
.AddFromString "'test"
.DeleteLines 1
End With
Workbookモジュールを使用している場合(この場合はそうではありませんでした)、新しいモジュールを作成し、代わりにそれを参照します。
私にとって、マクロはすべてのシリーズのx軸を更新しませんでしたが、最初のシリーズのみを更新しました。私が見つけた解決策は、すべてのシリーズのx軸を更新してから更新することでした(x軸の形式を変更するコードもありましたが、それが問題だとは思いません)。
ActiveSheet.ChartObjects("Diagram 7").Activate
ActiveChart.Axes(xlCategory).Select
ActiveChart.SeriesCollection(1).XValues = "={""""}"
ActiveChart.SeriesCollection(1).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(2).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(3).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(4).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(5).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(6).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(7).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(8).XValues = "=YYY!$BQ$85:$BQ$8844"
完全なマクロ。
Sub TEST()
'
' TEST Makro
'
ActiveSheet.ChartObjects("Diagram 7").Activate
ActiveChart.Axes(xlCategory).Select
Selection.TickLabels.NumberFormat = "@"
ActiveSheet.ChartObjects("Diagram 7").Activate
ActiveChart.SeriesCollection(1).XValues = "={""""}"
ActiveChart.SeriesCollection(1).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(2).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(3).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(4).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(5).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(6).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(7).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.SeriesCollection(8).XValues = "=YYY!$BQ$85:$BQ$8844"
ActiveChart.Axes(xlCategory).Select
ActiveChart.Axes(xlCategory).TickMarkSpacing = 730
ActiveChart.Axes(xlCategory).TickLabelSpacing = 730
End Sub
マクロを使用してソースセルに値を直接挿入しても、グラフは「感じ」の変化ではありません。チャートセルから値を送信する必要があります。その後、次のようなコードを使用します
Worksheets( "sheet1")。Range( "A1:K1")= Worksheets( "sheet2")。Range( "A4:K4")。Value
Excel 2013でも同じ問題が発生しましたが、使用しているいくつかの(自作の)アドインに関連しているようで、リボンにタブが追加されます。 [オプション]> [アドイン]> [ジャンプ]:[Exce-Add-Ins]> [Add_Ins Box]でこれらのアドインのフックを解除した後およびExcelの再起動(!)しかし、これらのアドインの1つをアクティブ化(フック)するとすぐに、どのチャートも更新されなくなります。この問題は他のアドイン(ソルバーなど)では発生しないため、アドインがリボンに追加のタブを作成したためか、.xlamのアドインだけが原因かを確認する必要があります。 -タイプ。
次の回避策コードの助けによってのみ、私はチャートに彼らの仕事をするように説得することができました:
Dim chtChart As ChartObject
For Each chtChart In ActiveSheet.ChartObjects
chtChart.Chart.ChartWizard
Next chtChart
奇妙なことに、。Chart.Refresh-メソッドも機能しませんでしたが、。Chart.ChartWizardは機能しましたが、パラメーターはありませんでした何も変更されないように指定されています!
(そして、はい、ワークブックの計算方法は自動/自動です)
アップデート(2019-09-17):
別の(サードパーティの)アドインはチャートの更新を妨げなかったため、さらに調査し、すべてのコードを無効にし、customUIのすべてのXMLコンテンツを削除しました-リボンおよび外部ライブラリとのすべての関係を削除しました( VBEに任せてください)。それでも、今では完全に役に立たないアドインをアクティブにするだけで、すべてのチャートの更新を確実に防ぐことができました。
最後の試みとして、すべてのコードを新しい.xlamファイルにコピーし、必要なすべてのライブラリ関係を設定して、カスタムUIエディターでリボンのXMLコードを最後に追加して、アドインをゼロから再構築しました。
そして見よ!:今ではすべてのチャートが更新され続けている:-D
証拠なし-古いアドイン(元々2011年、おそらくExcel 2007または2010で行われた)はExcel 2013と完全に互換性がないと推測できます。したがって、常に新しいセットアップ/再作成を行うことをお勧めします現在のバージョンのExcelを使用するアドイン;-)
がんばろう!
私にとってうまくいったのは、マクロを使用してチャートのデータテーブルに列を挿入/削除することでした。これにより、チャートがデータ選択を更新します。
これが最速の修正方法であることがわかりました。
グラフを更新するには、Sheets( "Sheet1")。Calculateをサブプロシージャに入れるだけです。別のタブにさらにグラフがある場合は、ワークシートループを作成します。
これは非常に基本的に見えるかもしれませんが、私はグラフのあるスプレッドシートで(F9を押して)手動計算を試してみましたが、うまくいきました! VBAコードは次のとおりです。
計算する
;)
同様の問題がありました-チャートが更新されないようです。私はこのスレッドですべてのことを試してみましたが、運はありませんでした。最終的に、コピーして貼り付けたチャートはソースデータにリンクされているため、すべて同じ結果が表示されていることに気付きました。
他のすべてのモーションを実行する前に、必ず写真をコピーして貼り付けてください。