マクロ。横方向の複数データでグラフ作成できません。

マクロでグラフを作っています。横方向の複数データでグラフ作成できません。

グラフを作成する時、
データの範囲で行内のデータ系列を選択した時と同じ動作をするマクロが分かりません。

たくさん検索しているのですが、すべて列内のデータからグラフを作る説明しかないので困っています。

oRangeAddress(0).StartColumn = 4
oRangeAddress(0).StartRow = 29	
oRangeAddress(0).EndColumn = 21
oRangeAddress(0).EndRow = 29


oRangeAddress(1).StartColumn = 0
oRangeAddress(1).StartRow = 12	
oRangeAddress(1).EndColumn = 13
oRangeAddress(1).EndRow = 12		


oRangeAddress(2).StartColumn = 0
oRangeAddress(2).StartRow = 12 +8	
oRangeAddress(2).EndColumn = 13
oRangeAddress(2).EndRow = 12 +8	

oCharts.getByname(oTitle).setRanges(oRangeAddress)
oChart = oCharts.getByName(oTitle).getEmbeddedObject()
oChart.Diagram = oChart.createInstance("com.sun.star.chart.AreaDiagram")

列内のデータなら上手くできるけど、行内データだとできないんです。
助けて下さい。
これが作りたいです。
2023y01m07d_142925773

実際のサンプルファイルをアップロードすることは可能でしょうか?
私が詳しくないせいもありますが、状況が掴みきれなかったです。


これ以上の部分は公開できないですが、申し訳ありません。

この表にある赤枠のROWSデータ(行)を抽出してチャートの作成をしています。(実際は複数年)
普通なのか分かりませんが、ネットに公開されているデータはすべてCOLUMN(縦列)なので
データ抽出は気にしなくてもグラフ作成できますが
ROWSデータ(行)を抽出している物がなく困っています。

現在、解決策の糸口になりそうな抽出法をひらめき掛けている所なので、数日後にでも試してみる所ですが、うまくいくかどうか?

凝り始めると、次から次へ欲求が出てきてしまって大変ですが頑張って見ます。
趣味レベルですが、製品に負けないものを目指して2ヶ月程没頭している所存です。

(今行っている事、ダイアログによる未入力データの検出における表の自動スクロール)
(スクロールしてもチャートの画面固定)
(全自動更新)
(その他機密情報の管理POPアップ)

皆さんの協力を得る事ができたら嬉しく思います。

1 Like

おそらく、「行列」を入れ替えた捨てシートを(マクロか何かで)作成し、それを参照してグラフを作成するのが、もっとも手っ取り早い方法に思えます。

1 Like

表に対する貴方の認識が誤っています。
時系列は縦でなければなりません。
つまり、貴方はその一部分をとって一年を表として
見ているのですけど、実際は時間は連続しています。
その前の年も、その次の年も連続しているのです。

データとしては縦に準備するのが鉄則なんです。

その表から任意の一年のみを取り出して横並べにすることは
簡単に実現可能です。

エクセルは縦の列が項目名、つまり性格の異なるデータを
縦に取ることが求められることを認識してください。

フィルターやピボットテーブル等多くのexcelの機能は
項目名が列になっている事を要件とします。
貴方の表はそれらの機能を無力にします。

そう考えれば、グラフが列単位で作成される理由も自明と思いますので。

1 Like

ask86183.ods (22.2 KB)

これのMainを実行した場合は?

1 Like

親切な回答ありがとうございます。

しかし、私のデータは縦列のデータでは無く、横列のデータなのでグラフ作成できません。
私の方でも色々思案しながら頑張って見ます。

※注)質問とは一切関係ありません

himajin100000 さんの 添付された sampleファイル ask86183.ods についての補足です

おそらく、ほとんどデフォルト状態で利用されている方の場合、次のどちらかを設定しなければ動かないと思います。

  1. 実験的な機能を有効にする
  2. マクロを一部書き換える

1. オプションの2か所を設定します。

  • ツール > オプション > LibreOffice > 詳細 >
    オプションの機能・実験的な機能を有効にする を :ballot_box_with_check:
  • 再起動
  • ツール > オプション > LibreOffice > Basic IDE オプション >
    言語機能・拡張機能を使用 を :ballot_box_with_check:
  • としてマクロを実行します。
Dim chartdoc As com.sun.star.chart2.data.XDataReceiver

という書き方は Basic IDE で補完機能が働く正しい様式ですが、実験的な機能を有効にしないと動きません。


参照 Basic IDE
https://help.libreoffice.org/latest/ja/text/shared/optionen/BasicIDE.html


ただし、Version 7.4 以降の

  • PortableApps.com の Portable版 」 と
  • 「 SI-GUI を利用してインストールした Windows 32bitバージョン 」では、

「実験的な機能を有効にする」 を :ballot_box_with_check: しただけで、再起動しなくなるバグが有るため利用できません。
おそらく、レジストリファイルを書き換えないと元に戻りません。


2. 現在の環境を変えたくない場合は、マクロを書き換えます

次の3行

Dim chartdoc As com.sun.star.chart2.data.XDataReceiver
Dim arg as com.sun.star.beans.PropertyValue
Dim dataprovider as com.sun.star.chart2.data.XDataProvider

を全て As object の形式

Dim chartdoc As object
Dim arg as object
Dim dataprovider as object

に置き換えて実行します。

3 Likes

Version 7.4 以降に発生していた不具合は Version 7.5.1 以降で解消されました。
Portable版に於いても同様に解消される見込みです。

2 Likes

ask86183macro7-2.ods (25.6 KB)
それっぽく動作します

よくわかってないのですが、
データ系列を新たに作りなおさなければならないんだと思います

2 Likes

上記ファイルですが
番地の指定を間違ってました

チャートに関する情報って少ないですね