2

1 つのシートにコンパイルされたデータを取得するために、他のいくつかのスプレッドシートにリンクするスプレッドシートがあります。このデータをグラフ化するためにシートを修正する任務を負っています。個人のレポートには、月ごとに 12 スロットの行があります。人がその月に働いていた場合、その月は適切なスロットに表示されます。グラフでは、動的な名前範囲を使用して、グラフの月数が線に存在する月数と等しくなるようにしました。唯一の問題は、人が開始した月に基づいて開始点が変わることです。

入れ子になったかなり大きな if ステートメントを作成することはできますが、それは私の問題を解決するための良い方法とは思えません。VBA スクリプトで動的な名前範囲の値を変更したり、グラフの値を直接変更したりする方法はありますか? これが実行可能なオプションではない場合、動的な名前付き範囲以外にこの問題に対処する方法はありますか?

このレポート シートは仕事に関連するスプレッドシートであるため、レポート シートの動作を変更することはできません。私は単にグラフ機能を追加しようとしています。

例:

https://www.dropbox.com/s/zn6yt4l6kjvwq33/Example1.xlsx https://www.dropbox.com/s/j88tgoik68s4lhx/Example2.xlsx

最初の例では、エージェント名の横にあるドロップボックスから「2 番目」を選択した場合の問題の例を示しています。グラフに無意味なデータが含まれています。

2 番目の例では、グラフで使用される動的な名前付き範囲に if ステートメントを追加することで問題を解決しました。しかし、ご覧のとおり、2 か月を含めると膨大になり、12 か月すべてを含めることはほぼ不可能です。3 月に開始した 3 番目の人を追加すると、2 番目の例でも機能しなくなります。

動的な名前の範囲の値を VBA で変更できるようにする方法はありますか? VBA を使用してグラフの値を直接変更できますか? VBA を使わずにこの問題を回避する方法はありますか?

ありがとう。

4

2 に答える 2

0

Name次のように VBA で を追加または変更できます。

Dim nm As Name
Dim rng As Range

'Here, you could use a more complicated expression'
' to derive the proper address dynamically.'
Set rng = Sheets("Sheet1").Range("A2:A25")

'Now, add a Name to the workbook:'
Set nm = ActiveWorkbook.Names.Add("My_Name", rng)

一部の文字列関数/変数を使用すると、VBA で範囲アドレスを導出/計算できます。

于 2013-04-16T15:01:35.617 に答える
0

(私は問題を 100% 理解しているとは言えませんが、これは少なくとも問題を解決するのに役立つかもしれません...)

次のように、3 つの名前を定義してみてください。

start_month
data 
chart_data

start_monthチャート化する列の番号が含まれている場所は、dataデータの 12 列すべてであり、データから必要な列=OFFSET($C$1,0,0,COUNT($A:$A),12)chart_data選択します。=INDEX(data, , start_month)

WorkbookName!chart_dataワークブックの名前を使用して、グラフのシリーズを に設定します。start_month値が変化すると、グラフに表示される値も変化します。

于 2013-04-16T08:11:57.560 に答える