タグ: VBA

Excel VBA グラフのデータソース範囲を取得・変更

投稿者:isc_blog

ActiveChart.SeriesCollection(1).Formula

(解説)

ActiveChart = 現在、選択しているグラフ

SeriesCollection(1) = グラフの線((1)なので1本目)

Formula=「シート名」!「セル範囲」

Formulaプロパティがなかなか見つからなくて苦労しました。

先人達とgoogle先生に感謝です。

これで、現在のデータソース範囲が参照できます。

シート名が取れないと、元データとグラフオブジェクトが別シートに分かれている場合に対応できないんですよ。。

それでこのプロパティの値が必要だったんです。

なお、グラフの線が1本ごとに離れた列を参照しているようなグラフではなくて、$A$1:$F$100のように固まっていれば、VBAを使用しなくても、名前定義とCounta関数の組み合わせで行けるようです。

これだけだと実用的では無いので、ちょっとアドインを作ってみました。

検証用サンプルExcel&アドイン

アドインは直接開いても構いませんが、ずっと使う場合はデフォルトのフォルダにコピーする方が分かりやすいと思います。

1.C:\Documents and Settings\%ユーザ名%\Application Data\Microsoft\AddIns

にコピー

2.ツール(T)→アドイン(I)→有効なアドイン(A)に表示されているはずなので、チェックを入れる。これで、次からはExcelを開くとアドインが有効になります。使わなくなった場合はチェックを外してください。

2011年4月27日

Excel VBA 最後の行列を取得

投稿者:isc_blog

ループさせたいが、最終行や最終列が動的に変わってしまう場合の取得方法

・最終行

cells(rows.count,1).end(xlUp).Row

(解説)

1列目(A列)を基準にして、65536行からキーボード操作のCtrl+↑した行を取得します。

rows.countやcolumns.countとすることでExcel2007以降のように100万行×1万6千列あっても動きます。

(注意)

途中で空欄があるとそこで止まってしまいますので、1つのシートに複数の表を入れているようであれば注意が必要です。

・同様に最終列の取得方法

cells(1,columns.count).end(xltoLeft).Column

2011年4月25日