web-dev-qa-db-ja.com

記入-スプレッドシート向けGoogle Appsスクリプト

上の行のすべての空のセルにデータを記入できる機能はありますか?

そうでない場合、Googleスプレッドシートのすべての行を調べて空のセルを確認し、見つかった場合は上の行のデータを入力できるGoogle Apps Script(または他のソリューション)で誰かが私を助けてくれますか?

このような関数は、私が考えるスプレッドシートプログラムに既に含まれている必要があります(同様に「埋める」)。

ありがとうございました!

21
Mille

このような関数は、私が考えるスプレッドシートプログラムに既に含まれている必要があります(同様に「埋める」)。

これに関連するGSheetsのnative機能を説明しようとします。

  1. 選択したセルまたは範囲の右下にある小さな青い正方形をダブルクリックすると、そのセルが左側のデータが入ったセルのブロックの終わりまで自動的に塗りつぶされます。または、この小さな青いボックス(下、上、左、または右)をドラッグして自動入力することもできます。

  2. ソースセルとその下のセルを選択して(ポイント4を参照)、 Ctrl+Enter、記入する。使用することもできます Ctrl+Enter または Ctrl+R 右に記入します。

  3. ソースセルを選択して、を押します Ctrl+C コピーするには、上のセル(または左のセル-そして再びポイント4を参照)を選択してから、 Ctrl+V 貼り付けます。これは、いっぱいになる(または左になる)効果があります。

  4. を押すと、ソースセルの下(または上、右、左)にある空白セルをすばやく選択できます。 Ctrl+Shift+Down (または上、または右、または左)。これにより、シートの制限または次のセルに移動できます。後者の場合、次に押すことができます Shift+Up (または下、左、または右)を押して、最後の空白セルに戻ります。次に、ポイント2および3に従って必要に応じて記入します。

  5. 空白セルの非隣接グループごとにこれを行う必要があります。連続しない空白セルのグループをすばやく自動入力できるようにしたい場合は、スクリプトが必要です。

47
AdamL

copyTo を使用します。私はほとんど適応します これについて私が見つけた答え ここに:

  var sheet = SpreadsheetApp.getActiveSheet();
  var originRange = sheet.getRange("A1:B1");
  var target = sheet.getRange("A2:B");
  originRange.copyTo(target);

これにより、コピー&ペーストと同様に、originRangeformulasが以下のすべてに自動入力/展開されます。

9
cregox

以下に、Googleスプレッドシートにカスタムメニューを追加するスクリプトを示します。 Googleスプレッドシートのスクリプトを読み込み、シート上の範囲を選択し、カスタムメニューから[空白セルを埋める]を選択します。空白のセルには、上のセルの値が入力されます。

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  // Or DocumentApp or FormApp.
  ui.createMenu('Custom Menu')
      .addItem('Fill Blank Cells', 'menuItem1')
      .addToUi();
}

function menuItem1() {
  fillBlankWithAbove()
}

//Iterates over the range from top to bottom
//and left to right, and fills blank cells 
//with the value right above them.
function fillBlankWithAbove() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getActiveRange();
  Logger.log('Range height is: ' + range.getHeight());
  var values = range.getValues();

  var width = values[0].length;
  var height = values.length;
  Logger.log('Width is ' + width);
  Logger.log('Height is ' + height);

  for (var i = 0; i < width; i++) {
    var lastVal = '';
    for(var j = 0; j < height; j++) {   
      var currValue = values[j][i];

      var dataType = typeof(currValue);
      //Empty string check returns true if dataType
      //is a number, and value is zero.  In that case
      //we don't want to overwrite the zero, so only
      //check emptyString for string types.
      if(currValue === undefined || 
         (dataType === 'string' && currValue == '')
        )  {
        //getCell parameters are relative to the current range
        //and ones based
         var cell = range.getCell(j+1, i+1);
         cell.setValue(lastVal);

      }
      else {
        lastVal = currValue;
      }
    }
  }
  SpreadsheetApp.flush();
}
4
lreeder
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Name");
var formulas = sheet.getRange(10, 1, 1, 10).getFormulasR1C1();
var newRange = sheet.getRange(11, 1, 1, 10);
newRange.setFormulasR1C1(formulas);

GetFormulasR1C1()を使用してからsetFormulasR1C1(formulas)を使用するこの関数は、式のマウスドラッグを模倣します。

セルに数式が含まれていない場合、エラーが表示されることに注意してください。セルを空にして、この問題を回避する必要があります。

3