7

たくさんのグラフを含むスプレッドシートと、それらのグラフにデータを供給する大量のデータを含む 1 つのシートがあります。

を使用して各グラフにデータをプロットしました

=Sheet1!$C5:$C$3000

これは基本的に、C5 から C3000 の値をグラフにプロットするだけです。

定期的に、データのサブセットを見たいだけです。たとえば、最初の 1000 行だけを見たいと思うかもしれません。現在、これを行うには、各グラフの数式を変更する必要があり、時間がかかります。

これを簡単にする方法をご存知ですか?理想的には、行番号を読み取り、C5 から C の「行番号」までのすべてのグラフをプロットするセルを 1 つのシートに置くことができれば最適です。

どんな助けでも大歓迎です。

4

7 に答える 7

6

OK、もう少し調査を行う必要がありました。スプレッドシート内で (VBA を使用せずに) 完全に機能させる方法を次に示します。

A1 を目的の範囲の終わりとして使用し、チャートをデータと同じシートに配置します。

データの最初のセル (C5) に名前付き範囲として名前を付けます。たとえば、TESTRANGE とします。
名前付き範囲 MYDATA を次の式として作成しました。

=オフセット(TESTRANGE, 0, 0, Sheet1!$A$1, 1)

次に、チャートの [SOURCE DATA] ダイアログの [SERIES] タブに移動し、VALUES ステートメントを次のように変更します。

=Sheet1!MYDATA

これで、A1 セルの値を変更するたびに、グラフが変更されます。

私の以前の回答の欠陥を見つけてくれた Robert Mearns に感謝します。

于 2008-10-13T16:22:35.940 に答える
3

これは、次の 2 つの手順で実現できます。

  • 動的な名前付き範囲を作成する
  • チャート データ ソースを名前付き範囲に更新するための VBA コードを追加します。

動的な名前付き範囲を作成する

データ範囲の行数をデータ シートのセルに入力します。

データ シート (挿入 - 名前 - 定義)に、 MyRangeという名前の範囲を作成します。これには、次のような数式が含まれます。

=OFFSET(Sheet1!$A$1,0,0,Sheet1!$D$1,3)

式を更新してレイアウトに合わせます

  • Sheet1!$A$1これをデータ範囲の左上に設定します
  • Sheet1!$D$1は、これを行数を含むセルに設定します
  • 3この値を列数に設定します

名前付き範囲が機能していることをテストします。

ドロップダウン メニューの [編集] - [移動] を選択し、参照フィールドにMyRangeと入力します。グラフのデータ領域が選択されている必要があります。

VBA コードを追加する

VBA IDE を開く (Alt-F11)

VBAProject ウィンドウで Sheet1 を選択し、このコードを挿入します。

Private Sub Worksheet_Change(ByVal Target As Range)

        If Target.Address <> "$D$1" Then Exit Sub
    'Change $D$1 to the cell where you have entered the number of rows
    'When the sheet changes, code checks to see if the cell $D$1 has changed

       ThisWorkbook.Sheets("Sheet1").ChartObjects(1).Chart.SetSourceData _
         Source:=ThisWorkbook.Sheets("Sheet1").Range("MyRange")
    '  ThisWorkbook.Sheets("Chart1").SetSourceData _
         Source:=ThisWorkbook.Sheets("Sheet1").Range("MyRange")
    'The first line of code assumes that chart is embedded into Sheet1
    'The second line assumes that the chart is in its own chart sheet
    'Uncomment and change as required

    'Add more code here to update all the other charts

End Sub

注意事項

名前付き範囲をグラフのデータ ソースとして直接使用しないでください。名前付き範囲「MyRange」をチャートのソース データ - データ範囲として入力すると、Excel は名前付き範囲を実際の範囲に自動的に変換します。したがって、名前付き範囲を今後変更しても、グラフは更新されません。

上記のアプローチは、パフォーマンスに影響を与える可能性があります。

名前付き範囲のOFFSET関数は「揮発性」です。つまり、ブック内のセルが計算されるたびに再計算されます。パフォーマンスが問題になる場合は、 INDEX式に置き換えてください。

=Sheet1!$A$1:INDEX(Sheet1!$1:$65536,Sheet1!$D$1,2)

Sheet1 でデータが変更されるたびにコードが実行されます。パフォーマンスが問題になる場合は、コードを変更して、要求されたとき (つまり、ボタンまたはメニューから) のみ実行するようにします。

于 2008-10-14T00:34:53.887 に答える
1

名前ソリューションの+1。

名前は実際には範囲を参照しておらず、数式を参照していることに注意してください。そのため、名前を「= OFFSET(...)」や「= COUNT(...)」のように設定できます。名前付き定数を作成できます。名前参照を「=42」のようにするだけです。

名前付き数式と配列数式は、パワーユーザーではないワークシートに何度も何度も適用している2つのワークシート手法です。

于 2008-10-13T19:22:48.463 に答える
1

Excel でグラフの範囲を動的に設定できます。次の VBA コードのようなものを使用してそれを行うことができます。

Private Sub Worksheet_Change(ByVal Target as Range)
    Select Case Target 
    Case Cells(14, 2)
        Sheet1.ChartObjects(1).Chart.SetSourceData Range("$C5:$C$" & Cells(14,2))
    ...
    End Select
End Sub

この場合、含める最後の行の番号を含むセルは B14 です (Cells オブジェクトを参照するときは最初に行を覚えておいてください)。これを完全にコードで行いたい場合は、Cells 参照の代わりに変数を使用することもできます。(これは 2007 と 2003 の両方で動作します。) この手順をボタンに割り当ててクリックすると、最後の行を含むセルを更新した後にグラフを更新できます。

ただし、これはまさにあなたがやりたいことではないかもしれません...チャート内で数式を直接使用してソースデータを指定する方法を知りません。

編集: PConroy がコメントで指摘しているように、このコードをそのワークシートの Change イベントに配置して、コードを実行するためにボタンもキーの組み合わせも必要ないようにすることができます。一致するセルが編集された場合にのみ各グラフを更新するようにコードを追加することもできます。

これを反映するために、上記の例を更新しました。

于 2008-10-13T16:07:47.140 に答える
1

ダイナミックレンジを見ることができます。OFFSET 関数を使用すると、開始セルと、選択する行と列の数を指定できます。 このサイトには、OFFSET 範囲への名前の割り当てに関する役立つ情報がいくつかあります。

于 2008-10-13T16:14:59.230 に答える
0

これを行う簡単な方法は、含めたくない行/列を非表示にすることです。グラフに移動すると、非表示の行/列が自動的に除外されます

于 2009-08-17T20:52:10.840 に答える