2

私は Google スプレッドシートを作成しており、そのスプレッドシートに大量のデータを入力してから、別のシートでそこから統計を取得したいと考えています。値を正しくカウントするのに苦労しています。

私が達成しようとしていること -関数のターゲット/引数に基づいて繰り返し値をカウントすることにより、特定の列の統計を取得するために任意のセルに追加できる関数を構築します。

例:

シート 1 には、列 E に計算する必要があるデータがあります (ステータスを示す 1 文字または 2 文字を保持します。シート 2 は、すべての統計データを取得する場所です。次のような関数を追加します: =getData("A")

関数自体は既にシート 1 と列 E を指しています。ここで関数が言っているのは、「列 E のすべてのデータを取得して、A としてマークされているセルの数を教えてほしい」ということです。 .

ここで個別に検索する約5つの異なる値があります。A、B、C、D、E とします。したがって、C を検索する場合は、次のように使用して統計シートの別のセルに統計を取得します: =getData("C")

これまでに得たもの (それはうまくいきません) - 私はこのようなコーディングはかなり大雑把なので、まだ多くのことを学んでいます。これが私がこれまで試みていたことです:

function getData(target) {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SHEET1");
  var lrow = ss.getLastRow();
  var r = ss.getRange(2, 5, lrow, 1);
  var data = r.getValues();
  var count;

  for (var i = 0; i < lrow ; i++) {
    var count = 1;
    for (var j = 0; j < i; i++) {
      if (data[j][0].value(target) == data[i][0].value(target)) {
        count++;
      }
    }
  return (count);
  }
}

私も試しました: if (data.value() == target) { count++; }

しかし、それも役に立たなかったようです。私は何を間違っていますか?正しくカウントしていないか、データをプルして正しくカウントしていません。かなりの数の投稿を検索しましたが、必要なものをまとめることができないようです。

誰かが提供できる助けに感謝します。ありがとう。


解決されたコード (@ScampMichael に感謝) - このわずかな違いにより、実際には =getData("Example1","Example2") の形式を使用して複数の値を検索し、合計を数えることができます。

function getData(target1, target2) {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("SHEET1");
  var lrow = ss.getLastRow();
  var r = ss.getRange(2, 5, lrow-1, 1); // lrow-1 to not count header
  var data = r.getValues();
  var count = 0; // 0 must be declared here or you'll get error: Overflow on the spreadsheet

  for (var i=0; i<data.length; i++) {
    if (data[i][0] == target1) { // can repeat this part depending how many values you want to search for
      count++;
    }
    if (data[i][0] == target2) {
      count++;
    }
  }
  return (count);
}
4

1 に答える 1

2

編集: var r = ss.getRange(2, 5, lrow, 1); を見逃しました する必要があります

 var r = ss.getRange(2, 5, lrow - 1, 1);  // because starting at row 2

ソース データは幅が 1 列しかないため、ループ内にループは必要ありませんが、ソースに複数の列が必要な場合に備えて残しました。

  for (var i = 0; i < data.length ; i++) {
    for (var j = 0; j < data[i].length; j++) {
      if (data[i][j] == target) {
        count++;
      }
    }
  }

単一の列の場合、次のことができます。

  for (var i = 0; i < data.length ; i++) {
      if (data[i][0] == target) {
        count++;
    }
  }

組み込み関数もあります: =COUNTIF(SHEET1!E2:E,"A")

于 2013-04-10T15:52:17.517 に答える