Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : 指定なし)
配列からグラフ(散布図)の作成が上手くいきません
投稿日時: 22/12/06 19:39:55
投稿者: norinorih

約1万行,15列程度のデータを配列に取り込んで,
一定部分を選択して,散布図を書かせようとすると上手くいきません.
例えば50-3000行で途中の800-1000行を抜くとか選択条件を変化させるので,
できれば,配列のままでやる方がいいかと思っています.
 
上手くいかない原因が何なのかよくわからなかったので,
データ数を変えてみたところ,上手くいく場合もあることがわかりました.
試しに,以下のようなサインカーブを描かせるコードで,データ数を確認したところ,
私の環境ではExcel2003だとデータ数が14で,
「SeriesクラスのXvaluesプロパティを設定できません。」とエラーになります.
Excel2019ではエラーは出ませんが,データ数が250を超えた辺りから,
グラフが途中で切れてSinの値がゼロになるまでは表示されません.
 
配列からグラフ表示させるデータ数に限界があるようで,
Web検索はしてみましたが,答えにはたどり着けませんでした.
既知の問題なのか,私のコードの書き方が悪いのか,よくわからないでいます.
ご助言の程宜しくお願いします.
 

Sub Test()
Dim sh As Worksheet
Dim myChart As Chart
Dim i As Long, cnt As Long
Dim arx As Variant, ary As Variant
Const pai = 3.141592

Set sh = ThisWorkbook.ActiveSheet

cnt = 300 'データ数

ReDim arx(1 To cnt)
ReDim ary(1 To cnt)

For i = 1 To cnt
    arx(i) = i / cnt
    ary(i) = Sin(2 * pai * i / cnt)
Next

With Charts.Add
    .Location Where:=xlLocationAsObject, Name:=sh.Name
End With

With sh.ChartObjects(1)
    Set myChart = .Chart
    .Width = 300
    .Height = 300
    .Left = 140
    .Top = 170
End With
'散布図
myChart.ChartType = xlXYScatterSmooth
  
With myChart
    .SeriesCollection.NewSeries
    .SeriesCollection(1).XValues = arx
    .SeriesCollection(1).Values = ary
    .HasTitle = False
    .Axes(xlCategory, xlPrimary).HasTitle = False
    .Axes(xlValue, xlPrimary).HasTitle = False
End With

End Sub

回答
投稿日時: 22/12/06 20:38:52
投稿者: simple

当方2019ですが、cnt=10000 として実行すると正常に表示されます。
質問者さんのような事象は観察できませんでした。取り急ぎ。

投稿日時: 22/12/06 21:52:44
投稿者: norinorih

simpleさん
 
早速のご検証ありがとうございます.
問題ないと言うことであれば,
もしかすると,ファイルが壊れているかもしれませんね.
明日にでも再度検証してみます.

回答
投稿日時: 22/12/07 09:34:01
投稿者: Suzu

Excel の仕様と制限
https://support.microsoft.com/ja-jp/office/excel-%E3%81%AE%E4%BB%95%E6%A7%98%E3%81%A8%E5%88%B6%E9%99%90-1672b34d-7043-467e-8e27-269d656771c3
 
2007 で、
 

引用:
グラフの仕様と制限
1 つのグラフのデータ系列の数 ; 255
1 つのグラフのすべてのデータ系列に含めることのできるデータ要素の数 : 256,000

 
となっています。
 
2003 の情報を見つける事ができませんでしたが
 
また、
Excel 2007 または Excel 2010 で作成したグラフは Excel 2003 以前のバージョンの Excel で作成したグラフと比べて目盛間隔やデータ系列の表示位置が異なる
https://support.microsoft.com/ja-jp/topic/excel-2007-%E3%81%BE%E3%81%9F%E3%81%AF-excel-2010-%E3%81%A7%E4%BD%9C%E6%88%90%E3%81%97%E3%81%9F%E3%82%B0%E3%83%A9%E3%83%95%E3%81%AF-excel-2003-%E4%BB%A5%E5%89%8D%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%81%AE-excel-%E3%81%A7%E4%BD%9C%E6%88%90%E3%81%97%E3%81%9F%E3%82%B0%E3%83%A9%E3%83%95%E3%81%A8%E6%AF%94%E3%81%B9%E3%81%A6%E7%9B%AE%E7%9B%9B%E9%96%93%E9%9A%94%E3%82%84%E3%83%87%E3%83%BC%E3%82%BF%E7%B3%BB%E5%88%97%E3%81%AE%E8%A1%A8%E7%A4%BA%E4%BD%8D%E7%BD%AE%E3%81%8C%E7%95%B0%E3%81%AA%E3%82%8B-119fea56-dc67-4c37-23a4-893fdeeb60d0
 
引用:
Microsoft Office Excel 2007 または Microsoft Excel 2010 で作成したグラフを含むワークシートを Microsoft Office Excel 2003 以前のバージョンの Excel で開いた場合、またはその逆で Excel 2003 で作成したグラフを Excel 2007 または Excel 2010 で開く場合、作成したグラフとは異なります。

 
互換チェックでも 弾かれないと言っていますし
 
2003 と 2007以降のグラフでは 見た目が同じになる保証は無いと認識した方が良いでしょう。

投稿日時: 22/12/07 10:01:51
投稿者: norinorih

新規ファイルで検証してみました.
昔のバージョン *.xlsでは上記同様のエラーとなり,
今のバージョン *.xlsmではエラーは起こりませんでした.
 
.xlsでも,シートから直接グラフを作成すれば,
数千行程度では,データ数制限とかは無かったように記憶していますが,
配列にしてしまうとたった13個までになるんですね.
古いver.2003とかが好きで,未だにVBAは2003で作業していることが多いですが,
こんな所に制限があるとは思わず,頓挫していたので助かりました.
 
もしその他ご助言があれば宜しくお願いします.
本質問は,もう少し空けておいてから閉じたいと思います.
 
と,ここまで書いたところで,Suzuさんからのコメント拝読しました.
ありがとうございます.
通常,パワーポイントをいじっていることが多く,
確かに,2007以降で線図などを描くと,
2003では編集できなくなったりします.
古いのを使うのは中々難しいですね.

投稿日時: 22/12/07 10:07:19
投稿者: norinorih

Suzuさん
先ほど,数千行は問題ないと書いてしまいましたが,
データ系列も255だったんですね.
それが,250を超えた辺りからの問題となるわけですね.
了解しました.

回答
投稿日時: 22/12/07 12:05:43
投稿者: Suzu

norinorih さんの引用:
先ほど,数千行は問題ないと書いてしまいましたが,
データ系列も255だったんですね.
それが,250を超えた辺りからの問題となるわけですね.

 
系列をどの様に設定しているのか判らなかったので、明言はしませんでしたが
255 は Excel 2006 でも Excel2019 でも 同じではありませんでしたか?
Excel 2003 は 判りませんが、同じではないかな。
 
 
2003 と 2019 を 共存しているのでしょうか?
 共存しているのであれば 共存起因の不具合の可能性があります
 共存していないのであれば、別 PC の環境と言う事ですから
    2003は古いマシンスペックで、低メモリ 環境の為 エラーになっている等の可能性はありませんか?
 
 
引用:
例えば50-3000行で途中の800-1000行を抜くとか選択条件を変化させる

ピボットグラフでは対応できませんか?

回答
投稿日時: 22/12/07 13:33:37
投稿者: simple

「系列」数について誤解がないですか?
少なくとも提示されたコードのグラフの系列数は1ですよ。
 
質問者さんのおっしゃる
>それが,250を超えた辺りからの問題となるわけですね.
というのが何を指して言っているのか、よくわかりませんでした。

投稿日時: 22/12/07 13:49:35
投稿者: norinorih

Suzuさん
ご指摘ありがとうございます.
先ほど書き込んだ件,
系列数とデータ数を勘違いしてました.
データ数は,2003でも数千行は大丈夫ですね.
やっぱり,xlsで配列→グラフの問題なんですかね.
 
2003と2019は同じマシンで使ってます.
メモリーは,32GBなので不足する心配は無いようです.
ご指摘のように共存環境は問題があるかもしれません.
身近にあるマシンはどれも2003と2013,2019等を共存させているので,
環境検証までは至っておりません.
 
ピボットグラフは,ほとんど使用したことがないので,
少し検索してみましたが,
今回のデータは,実験計測値で余り意味の無い数値の羅列ですので,
ちょっと適してないかと思いました.
外してたらすみません.
 
と,ここまで書いたところで,simpleさんのご指摘がありました.
ご指摘の通り間違っていました.
ありがとうございます.

回答
投稿日時: 22/12/08 09:44:10
投稿者: Suzu

引用:
系列数とデータ数を勘違いしてました.
データ数は,2003でも数千行は大丈夫ですね.
やっぱり,xlsで配列→グラフの問題なんですかね.

 
2003との事なので、検証環境が無いので何とも言えません。
 
引用:
2003と2019は同じマシンで使ってます.
メモリーは,32GBなので不足する心配は無いようです.

 
であれば、マシンスペックに依る部分は少なくなりそうですが、
何とも言えないですね。
 
 
引用:
新規ファイルで検証してみました.
昔のバージョン *.xlsでは上記同様のエラーとなり,
今のバージョン *.xlsmではエラーは起こりませんでした.

先のVBAコードを実行し xls では エラー、 xlsm では 通常実行 との事
2003/2019 どちらのアプリケーションバージョンでの話でしょうか?
(2003でも互換機能パックを入れれば xlsx/xlsm 開けますよね)
 
新規ブックから、保存前の状態だと どうでしょう?
 
当方が提示できたのは、2007 の仕様 ですのが、
2003だと ヘルプはオンラインヘルプではなく、ローカル保存版でしたよね?
ローカル版であれば、ご自身で、要素数/データ数の上限はご確認頂ければと思います。
 
データ数が上限に抵触しては居ない様ですが
表示上 差異が生じてしまっているのかと思ったのですが・・
エラー表示「SeriesクラスのXvaluesプロパティを設定できません。」とは違いますもんね。
 
 
 
っつと。。。あ。。これか・・・?
 
数式の長さ 制限
2003    1024文字
2019 8192 文字
 
グラフの 系列 を選択したとき、数式バーに 数式が表示されます。
 
範囲指定の場合
=SERIES(Sheet1!$D$11,,Sheet1!$D$12:$D$14,2)
 
配列指定の場合
=SERIES(,{0.00333333333333333,0.00666666666666667,〜〜
 
の様になり、コードそのまま実行すると 8434文字 になりそう。
とすると、2019の 8192 を超えているのですが、実行できている。。
となると、グラフ では この制限は適用されていない。。どの数値になるのか判りませんが
 
少なくとも、系列の 数式にも制限があり、その制限に抵触しているのではないでしょうか。
 
 
 
引用:
.xlsでも,シートから直接グラフを作成すれば,
数千行程度では,データ数制限とかは無かったように記憶していますが,

こちらは セル値を代入すれば良いだけなので、コードをちょと変えれば 確認できると思いますよ。
 
 
データの内容も判らないので ピボットグラフに適しているかどうかは、ご自身で判断ください。
とても便利な機能ですので、使用したことが無い と言う事で 選択肢から外すのはもったいないです。
ぜひ試される事をお勧めします。
 
2003の機能と比較すれば
・VLookUp関数を使わずに、テーブル/リレーションシップ/ピボット を使って集計ができる
・VBA ではなく、Power Query (M式言語)を使って 繰り返し処理ができる
あたりも かなり使える機能と思います 食わず嫌いなのであれば試してみてください。
 
 
 
何にしても2003 は
・グラフ上の表記に差異が生じる可能性がある
・サポートが終了している
・扱う ファイル形式が xlsx の方が多い
・SDI/MDI の兼ね合いで どうしても VBA の動作確認も SDI で行う事が必要
・制限が厳しい (逆に制限が緩い部分もありますが)
開発環境としては、お勧めできませんね。

投稿日時: 22/12/12 15:13:12
投稿者: norinorih

Suzuさん
コメントありがとうございます.
他の仕事があって,ご返事遅くなり申し訳ありません.
 
一応,xlsmを2003で開いてみましたが,
制限は変わってませんでした.
やっぱり,2003特有の問題ですね.
 
2007から変わった数式の長さの話ですが,
今回のデータから察するに,10倍以上違うので,
何か釈然としないものが残ります.
多分,昔からあった問題でしょうから,
何か情報がありそうだなと思い,今回の質問となりました.
 
2003でまだやっているのは,
特に,ネットとかにつながずに,
今回の分析のようなデータ解析のみに特化しているマシンとかを利用しているので,
相変わらず開発環境として使用している次第です.
 
とりあえず,xlsmでできるので,その方向でやります.
Suzuさん,simpleさんお付き合いいただきありがとうございました.
閉じます.