まりふのひと

Excel2010/Offset関数を使って散布図の自動更新に挑戦

 Buffalo Backup Utility が出力する BUData の解析に苦戦している。
具体的には、Excel でグラフを作っているだけだが、推移グラフ(棒ブラフ、折れ線グラフ)は従来の知見で出来たが、散布図のグラフデータの更新が出来ず、この一週間、悩んでいた...

  1. Buffalo BackupUtility の BUData から散布図を作る。
    • バックアップの間隔が長くなると「Delファイル数」が増える傾向にある。
       インターネット一時ファイル(C:\Users\ユーザー名\AppData\Local\Microsoft\Windows\Temporary Internet Files)とフィード(C:\Users\ユーザー名\AppData\Local\Microsoft\Feeds)のせいだろうか...
  2. データが増えた時、「グラフデータの範囲」をマクロで変更すると、散布図が崩れる。
    • X軸の項目が「系列」になり凡例に入る。X軸は無名数?になる。
    • マクロのせいではなかった。手動で変更しても同じ。要するに「グラフデータの範囲」を変更してもダメ‥‥ と云うことか...
  3. 「グラフデータの範囲」を変更後、グラフの種類を散布図に変えると、第2軸が消える。
  4. 以降、何かをするとドンドン散布図が崩れ、コリャ駄目だ... 



 ググって、ググって‥‥「Excel2010 散布図を自動更新させるには」(教えて!HELPDESK)を見つけた。

 追加入力されたデータで散布図を自動更新させる方法をご紹介します。
更新可能なセル範囲を返すOFFSET関数を使って範囲に名前を付け、これをデータ系列として指定します。

  1. 入力されているデータを元に散布図を作成(X軸 A2:A13 Y軸 B2:B13)
  2. まずはA列(月)の入力範囲に名前を付けるため「数式」タブ−「名前の定義」をクリック
  3. 「範囲名」を入力し「参照範囲」に OFFSET関数 でセル範囲を指定し「OK」



OFFSET(基準とするセルを指定 , ○行移動 , ○列移動 ,行数 , 列数)
→ OFFSET(Sheet1!$A$2,0,0,COUNTA(Sheet1!$A:$A)-1,1)
ここでは基準値をA2、行移動しないので0、列移動しないので0、行数は入力個数を指定するのでCountA(A:A)-1(マイナス1は「月」が入力されているA1)、列数は1 → 行数にCountA(A:A)-1が指定されているので、入力項目が増減すると、個数がカウントされてセル範囲が更新されます。
※ OFFSET関数については「指定した行数・列数の範囲を返すには」を参照してください。


 なるほど、なるほど!

  • しかし、グラフデータの範囲(右図)も Offset を使わないと「自動更新」されないのでは?
  • しかし、グラフデーの範囲を変えると散布図が崩れるしなぁ‥‥


兎に角、書いてあるとおりにやってみた。

  • 名前の定義:経過時間 ‥‥ 横軸
    • 参照範囲:“=OFFSET(グラフデータ!$C$2,0,0,COUNTA(グラフデータ!$C:$C)-1,1)”
  • 名前の定義:所要時間
    • 参照範囲:“=OFFSET(グラフデータ!$D$2,0,0,COUNTA(グラフデータ!$D:$D)-1,1)”
  • 名前の定義:サイズGBChgファイル数Delファイル数
    • 系列は「所要時間」の他に「サイズGB」,「Chgファイル数」,「Delファイル数」があり、全て定義する必要がある。
  • データソースの選択

    • 凡例項目(系列):所要(時間)
      • 系列Xの値:“=BUData解析.xlsm!経過時間”
      • 系列Yの値:“=BUData解析.xlsm!所要時間”
    • 凡例項目(系列):サイズ(GB)Chgファイル数Delファイル数
      • 同様に行う。辛いのは、何故かコピペが使えない。全て入力した。


結果

  • 成功! 
    • データ数を CountA関数で数えているところがポイントか...
    • 作るの面倒であるが、後が楽だ。(昔の Excel では、常にこのようにしていた記憶がある)
  • 推移図(棒グラフ,折れ線グラフ)も行ってみたが成功した。

    • グラフデータの範囲は、新規作成時に有効なのであって、今回は表示されなかった。
    • 横(項目)軸ラベル([編集]ボタンが使える状態にある)も変更する必要がある。


Offset関数Excel ヘルプより)

説明
 基準 のセルまたはセル範囲から指定された行数と列数だけシフトした位置にある高さと幅のセルまたはセル範囲の参照 (オフセット参照) を返します。返されるセル参照は、セル、セル範囲のいずれかの参照です。また、返されるセル参照の行数と列数を指定することもできます。
書式

OFFSET(基準, 行数, 列数, [高さ], [幅])

 OFFSET 関数の書式には、次の引数 (引数: アクション、イベント、メソッド、プロパティ、関数、またはプロシージャに必要な情報を提供する値のことです。)があります。

  • 基準 必ず指定します。基準となるセル範囲の参照を指定します。基準が、セルまたは隣接するセル範囲以外を参照する場合は、エラー値 #VALUE! が返されます。
  • 行数 必ず指定します。基準の左上隅のセルを上方向または下方向へシフトする距離を行数単位で指定します。行数に 5 を指定すると、オフセット参照の左上隅のセルは、基準の左上隅のセルから 5 行下方向へシフトします。行数に正の数を指定すると下方向へシフトし、負の数を指定すると上方向へシフトします。
  • 列数 必ず指定します。基準の左上隅のセルを左方向または右方向へシフトする距離を列数単位で指定します。列数に 5 を指定すると、オフセット参照の左上隅のセルは、基準の左上隅のセルから 5 列右方向へシフトします。列数に正の数を指定すると右方向へシフトし、負の数を指定すると左方向へシフトします。
  • 高さ 省略可能です。オフセット参照の行数を指定します。高さは正の数である必要があります。
  •  省略可能です。オフセット参照の列数を指定します。幅は正の数である必要があります。

編集後記

  • 頭の回転数が下がっているので、Offset関数の「行数」,「高さ」の使い方が理解できない。
  • 要は、グラフデータの作り方に掛かっている‥‥ ようだ。