1

Col A、B、C で作業しています。Col A には AE が含まれ、Col B には 1、a、3、b、5 が含まれ、Col C は重複した情報を保存する場所になります (a と b は C1 & C2 に入ります)。 . どんな助けでも大歓迎です。要約すれば; A と B の類似性を比較し、結果を C に出力する

function appendString() {
    var range = SpreadsheetApp.getActiveSheet().getRange("A1:A5");
    var range2 = SpreadsheetApp.getActiveSheet().getRange("B1:B5");
    var range3 = SpreadsheetApp.getActiveSheet().getRange("C1:C5")
    var numRows = range.getNumRows();
    var x = 0


    // var numCols = range.getNumColumns();
    j = 1 // row A
    k = 2 // row B
    m = 3 // row C
    n = 1
    // First loop though B
    for (var i = 1; i <= numRows; i++) {
        // set the current value...
        var currentValue = range.getCell(i, j).getValue();
        // In the log tell us the current value
        Logger.log("Set A:" + currentValue);
        // Loops though col B to compare to col A
        for (var l = 1; l <= numRows; l++) {
            // Sets the current value to compare value
            var compareValue = range2.getCell(l, j).getValue();
            Logger.log("Set B:" + compareValue)
            // If the compareValue and the currentValue (match)
            if (compareValue === currentValue) {
                Logger.log("MATCHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH");
                // We will write the result to col C down one row
                for (n; n <= x; n++) {
                    // this makes it only run once'
                    range3.setValue(currentValue);
                    Logger.log("Appending.................");
                    x = n + 3
                }
            }
        }
    }
}
4

1 に答える 1

0

あなたの問題文はこれに要約されると思います: 列 C に、列 A と B の両方に表示される一意の値のリストを入力します。

組み込みの javascript Array メソッドArray.indexOf()があり、一致する要素を非常に簡単に検索できます。問題が定義されているので、列を検索したいので、その方法を使用するには、列を配列として表す必要があります。このRange.getValues()メソッドを使用すると、値の範囲全体を一度にロードし、行を最初の次元とする 2 次元配列として渡すことができます。そこには列が必要であり、行列の転置によってそれを実現できます。

これが最終的な結果です。組み込みの はありませんtranspose()ので、含めました。一致を検索するとC、組み込みArray.push()メソッドを使用して、結果が Array に格納されます。最後に、配列Cは 2 次元配列として扱われ、転置され、列 C のシートに書き出されます。

function recordMatches() {
  var range = SpreadsheetApp.getActiveSheet().getRange("A1:B5");
  var data = range.getValues();

  // For convenience, we'll transpose the data, so
  // we can treat columns as javascript arrays.
  var transposed = transpose(data);
  var A = transposed[0],
      B = transposed[1],
      C = [];

  // Go through A, looking for matches in B - if found, add match to C
  for (var i=0; i < A.length; i++) {
    if (B.indexOf(A[i]) !== -1) C.push(A[i]);
  }

  // If any matches were found, write the resulting array to column C
  if (C.length > 0) {
    var rangeC = SpreadsheetApp.getActiveSheet().getRange(1,3,C.length);
    rangeC.setValues(transpose([C]));
  }
}

function transpose(a) {
  return Object.keys(a[0]).map(function (c) { return a.map(function (r) { return r[c]; }); });
}
于 2013-06-03T18:21:30.417 に答える