1

3枚のスプレッドシートがあります。2つはと呼ばれ20122011同様のデータがたくさんあります。最後のシートは、データ間の比較を行います。

2011年を選択できるようにするために、またはのいずれかを記述できるセル(D1)を使用しています2012。次に、数式はINDIRECT関数を使用して、このセルを参照の一部として含めます。

INDIRECT(CHAR(39)&$D$1&CHAR(39)&"!F:F")

これはきれいな解決策ではなく、式を非常に長く複雑にします。

=IFERROR(SUM(FILTER( INDIRECT(CHAR(39)&$D$1&CHAR(39)&"!M:M") ;  (INDIRECT(CHAR(39)&$D$1&CHAR(39)&"!B:B")=$A4)+(INDIRECT(CHAR(39)&$D$1&CHAR(39)&"!B:B")=$A5)+(INDIRECT(CHAR(39)&$D$1&CHAR(39)&"!B:B")=$A6)+(INDIRECT(CHAR(39)&$D$1&CHAR(39)&"!B:B")=$A7)+(INDIRECT(CHAR(39)&$D$1&CHAR(39)&"!B:B")=$A8); MONTH(INDIRECT(CHAR(39)&$D$1&CHAR(39)&"!D:D"))=$B$1 ; INDIRECT(CHAR(39)&$D$1&CHAR(39)&"!F:F")=D$3));0)

これを行うためのより良い方法はありますか?

計算シート用に別のスプレッドシートを作成し、VMERGE(スクリプトギャラリーのカスタム関数)を使用して2つのシートのデータを1つのシートに一緒にインポート(インポート)しようとしましたが、これら2つのデータにはかなりの量がありますシートとインポートには長い時間がかかります。変更(年の変更など)も、再計算に長い時間がかかります。

4

2 に答える 2

0

この種のことを行うと、データベース機能がよりクリーンになる傾向があります。

https://support.google.com/docs/bin/static.py?hl=en&topic=25273&page=table.cs&tab=1368827

データベース関数の学習には時間がかかりますが、強力です。

または

INDIRECT(CHAR(39)&$ D $ 1&CHAR(39)& "!B:B")をセルに単独で配置できます。

于 2012-06-18T05:13:50.627 に答える
0

スキーマが同一である2年間の情報があると思います(列Cは両方のシートに同じタイプの情報があります)。また、列Bが年を追跡していると仮定しています。

その場合は、すべての情報を1枚のシートに保持し、スプレッドシート機能「QUERY」を使用してビューを作成することを検討してください。

たとえば、この数式は、「DataSheet」という名前のシートからA1:Eの間のすべてのセルを返します。ここで、列Bの値は2010です。

= QUERY(DataSheet!A1:E; "SELECT * WHERE B = 2010"; 1)

データを2枚のシートに保存するのには本当に正当な理由がある場合があります。その場合は、スクリプトギャラリーのvMerge関数の1つを使用して、作業シートを組み立てます。次に、作業シートからビューとレポートを作成します。

function VMerge() {
  var maxw=l=0;
  var minw=Number.MAX_VALUE;
  var al=arguments.length ;
  for( i=0 ; i<al ; i++){
    if( arguments[i].constructor == Array )l =arguments[i][0].length ;
    else if (arguments[i].length!=0) l = 1 ;  // literal values count as array with a width of one cell, empty cells are ignored!
    maxw=l>maxw?l:maxw;
    minw=l<minw?l:minw;
  }
  if( maxw==minw) { /* when largest width equals smallest width all are equal */
    var s = new Array();
    for( i=0 ; i<al ; i++){
      if( arguments[i].constructor == Array ) s = s.concat( arguments[i].slice() )
      else if (arguments[i].length!=0) s = s.concat( [[arguments[i]]] )  
    }
  if ( s.length == 0 ) return null ; else return s        //s     
  }
  else return "#N/A: All data ranges must be of equal width!"      
}

お役に立てれば。

于 2012-06-18T21:38:02.943 に答える