0

Google スプレッドシート ドキュメントの特定のシートにセルの列があります。この列は、組み込みの JOIN コマンドを使用して別のシートの複数の値を参照します。

=JOIN(", ",Regular!B3,Regular!B9,Regular!B10,Regular!B11,Regular!B12,Regular!B13,Regular!B14)

そのような各セルの典型的な出力は、カンマで区切られた整数のリストです。

2、5、10、12、13

一部のセルは、次のように範囲を使用します。

=JOIN(", ",Regular!B3:B9)

これらのセルを数式でロックしたい:Regular!$B$3,Regular!$B:$9...

現在、各参照で列と行の両方をロックしたいのですが、行、列、またはその両方を選択できるソリューションの方が優れています。

1) カスタム スクリプトを使用せずにこれを行う方法が見つかりませんでした。

2) 私のカスタム スクリプト ソリューションは未完成です。

function eachCellInRange(range, op) {
  var numRows = range.getNumRows();
  var numCols = range.getNumColumns();
  for (var i = 1; i <= numRows; i++) {
    for (var j = 1; j <= numCols; j++) {
      op(range.getCell(i,j), i, j);
    }
  }
};

function lockCell(cell, row, col) {
  var formula = cell.getFormula();
  if(formula) {
    var startIdx = formula.indexOf('(');
    if(startIdx > 0) { 
      //!! REGEX HERE !! //
      cell.setValue(formula);
    }
  }
}

function lockRows() {
  var range = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getActiveRange();
  eachCellInRange(range, lockCell);
};

式の B3、B9... の部分を識別し、それらを $B$3、$B$9... に変更する正規表現パターンを作成する必要がありますが、B1:B8 の場合でも壊れません。

現在、すべての参照には SheetName という接頭辞が付いています! (Regular!B9:B20 など)、将来的にはそうでないものもあるかもしれないので、最も一般的な解決策が優先されます。

4

2 に答える 2