引用:
データ入力及びマクロ実行ボタン設置シートと
グラフ設置シートが別である
引用:
グラフは4枚ありますが、各グラフ8,000行弱×20系列弱あり
・4 つのグラフが挿入されたワークシート(以下[グラフシート])と、
それらのデータソースの大元となる表があるワークシート(以下[データシート])と、
任意のパラメータ値を入力し、マクロを実行させるためのインターフェースとなる
ワークシート(以下[パラメータシート])、そしてこれらのワークシートを
参照、操作するプロシージャが記述されたモジュールがあらかじめ
作成されているマクロ有効ブックがある。
引用:
グラフのx値y値自体は、offsetとcountaを使って定義した名前
(y軸1、y軸2等)を指定しているため、常に紐付が完了している
・[グラフシート]内の各グラフのデータソースは、そのブック内で
定義された名前付きセル範囲である。
・それぞれの名前付きセル範囲の参照先として、[パラメータシート]上のセルを
参照する COUNTA 関数や OFFSET 関数を用いて[データシート]上の表の範囲を
部分的に参照する数式が設定されている。
つまりその数式が返す結果により、グラフのデータソースとして
実際に参照されるセル範囲は動的に変化する。
引用:
このマクロでは加えて別途生データcsvの取込(取込区間は
特定の値が条件を満たす範囲)も実施しています。
・このマクロ有効ブックとは別に、一定の間隔(日ごと、週ごと、月ごと)に
作成される CSV ファイルが存在する。
(この CSV ファイルのレイアウトが常に一定であるか否かは不明)
・上記の CSV ファイルをインポートし、[データシート]上に展開する
プロシージャ(以下[インポートマクロ])がマクロ有効ブックの
モジュールに作成されている。
したがって、[データシート]上の表の内容は[インポートマクロ]が
実行されるごとに異なる。
引用:
マクロ実行前のデフォルトの各パラメータは、
エクセル作成日時(指示の入った程度)によってまちまちで、
例えばエクセル100.xlsm(先週作成)とエクセル150.xlsm(昨日作成)と
エクセル200.xlsm(今日作成)では異なった値です。
引用:
エクセル1.xlsmでグラフ作成、コピーしてエクセル2.xlsmを作成、開いて編集
・ユーザーが実際に使用しているのは、上記のマクロ有効ブックを
テンプレートとして複製されたブック(レプリカ)である。
したがって、[データシート]と[パラメータシート]上のデータ、
および[グラフシート]上の 4 つのグラフにプロットされる範囲は
それぞれのレプリカごとに異なる。
また、[データシート]上の一部のセルの値や[グラフシート]上の
グラフの書式が、ユーザーの手によって改変されている可能性がある。
引用:
数百あるロットをほぼ同じような見た目でまとめようとしている
引用:
まとめ作業が進むにつれて適時入る、フォントサイズの変更や
軸名称の修正、表示系列の増減の指示に対応するために、ご推察の通り、
統一するマクロを実行しようとしています。
・ユーザーによって編集された複数個のレプリカ(のコピー)を
1 つのフォルダ上に保存し、フォルダ内のブックを 1 つずつ開いて
それぞれの[グラフシート]上のグラフの書式を統一するマクロを
実行しようとしてる。
概ねこんな感じのことをなさろうとしているのだと仮定します。
引用:
With .PlotArea
.Top = エリア(1)(1)
引用:
wsグラフシートがアクティブなだけではエラーが出て、一度
グラフを描画済みの状態(グレーアウト+アイコンではない状態)にすれば
エラーは出なくなります。逆に、一度描画してしまっていれば、
wsグラフシートが非アクティブでもエラーは出ません。
ブックを開かれてから一度もグラフをプロットされていない状態では、
そのプロットエリアの位置やサイズなどの描画に関する情報
( Left / Top / Width / Height )が読み込まれておらず
「未定義」に近い扱いになっているためか、もしくは
Excel によって開始されたグラフのプロット処理と
衝突してしまっているため(恐らく後者)ではないかと推察します。
例えばブックを開いた時点で[グラフシート]が非アクティブだったとして、
そのままマクロを実行すれば件の実行時エラーが発生しますが、
同じマクロをもう一度実行すれば実行時エラーが発生することなく
マクロの実行が完了するはず。
また、PlotArea の Top / Left / Width / Height プロパティの設定を
後回しにして、先に ChartTitle の設定を行なってやると
実行時エラーが発生しないこともこちらでは確認できました。
-------------------------------------------------------------
With グラフ
.Height = 324
.Width = 556
With .Chart
.ChartTitle.Top = .ChartTitle.Top
With .PlotArea
.Top = エリア(1)(1)
-------------------------------------------------------------