見出し画像

【GAS】Google Apps Script 活用事例 チェックを入れたら本日の日付を入力し、着色するスクリプト

スクリプトを書かなくても出来なくはない

挙動の様子

チェックを入れると、日付を入力するスクリプトです。

スクリプト全文

/**
 * チェックを入れたら、グレーアウトして、本日の日付を入力する
 * 
 * 以下のライブラリを使用
 * https://note.com/nepia_infinity/n/n73bb5e0f1357#e0afbb00-b8d9-49b4-bbd9-8558797e0056
 * 
 * スクリプトID
 * 18rg2maFYXNmPmB2R-8s3UuFG850j5OLw4WBvcOrghzRMlfVbQWDgOVvZ
 * 
 */
function applyGrayColorToRow() {
 
  const sheetName   = 'シート名を入力する';
  const activeSheet = SpreadsheetApp.getActiveSheet();
  
  // アクティブなシートが処理対象のシートではなかったら処理を終了する
  if(activeSheet.getName() !== sheetName) return;

  const values = activeSheet.getDataRange().getValues();
  const header = values[0];
  const column = {
    hasCheck: header.indexOf('メール送付') + 1,
    sentDate: header.indexOf('連絡日') + 1,
  }

  console.log(column);
  
  //ライブラリで定義されている関数を使用
  const activeCell = nepia_infinity.getActiveCell(activeSheet);
  
  //チェックが付いたら、次の処理を実行する
  if(activeCell.column === column.hasCheck && activeCell.value === true){

    const targetRange = activeSheet.getRange(activeCell.row, 1, 1, activeSheet.getLastColumn());
    const colors      = targetRange.getValues().map(row => row.map(value => '#999999'));

    console.log(`処理対象範囲: ${targetRange.getA1Notation()}`);
    console.log(colors);
    
    //ライブラリで定義されている関数を使用
    const today = nepia_infinity.formatDate(new Date(), 'yyyy/MM/dd');
    activeSheet.getRange(activeCell.row, column.sentDate).setValue(today);
    targetRange.setBackgrounds(colors);
  }
}

以下のライブラリを使用しています

スクリプトID

18rg2maFYXNmPmB2R-8s3UuFG850j5OLw4WBvcOrghzRMlfVbQWDgOVvZ

今回のスクリプトでは、チェックをした際に日付を入力しています。
入力時に他の処理をする必要がなければ、下記に紹介する条件付き書式でも対応可能です。必要に応じて使い分けることが大切です。

条件付き書式でも一応同じ事が出来る

=$A2="close"

後日、チェックをつけたら色を無色にするスクリプトを書きました。

/**
 * TECHOFFER管理表内にチェックを付けたら、行の色をnullに戻す関数
 * 
 */
function resetRowColor() {
  const url         = '*********';
  const sheetName   = nepia_infinity.getSheetByUrl(url, 'sheetName');
  const activeSheet = SpreadsheetApp.getActiveSheet();
  const activeCell = nepia_infinity.getActiveCell(activeSheet);

  if(activeSheet.getName() !== sheetName) {
    console.log(`処理対象のシートではないため処理を終了します。`);
    return

  }else if(activeCell.value === true){
    
    const range      = activeSheet.getRange(activeCell.row, 1, 1, activeSheet.getLastColumn());
    const values     = range.getValues();
    console.log(`処理範囲:${range.getA1Notation()}`);

    const originalColors = values.map(row => row.map(color => null));
    range.setBackgrounds(originalColors);

  }
}

この記事が気に入ったらサポートをしてみませんか?