【GAS】セルの数式を複数の別シートにコピーする(見積書などの数式のアップデートに)

複数のスプレッドシートで見積書の管理をしてる場合などで、一括で数式を変更したい時とかないですかね?

実際、そういうケースがあって、スプレッドシートを一つずつ開いて数式をコピペするのが面倒だったので、数式を複数のスプレッドシートで更新するGAS(Google Action Script)を書いてみました。

の数式を更新したいとき、GASを共有する方法を試したところうまく権限の共有

1. 数式をコピーするupdateCellFormula関数を作ってコピーできてるか確認

下記のコードでコピーが無事にできるか確認。

function updateCellFormula(targetId=''){ const sheetName = '本体';//対象のシート名を入力 const copyCell = 'G14:G14';//コピーするセルを指定 // コピー元 var tmplId = '1gs7_....0TmfM';//ファイルIDを入力 // スプレッドシートURLの // https://docs.google.com/spreadsheets/d/ここの文字を入力/edit#gid=11111 var tmpl = SpreadsheetApp.openById(tmplId); var tmplSheet = tmpl.getSheetByName(sheetName); // コピー先 var trgId = targetId? targetId : '1dSsGK...UvnFpEo';//コピー先のスプレッドシートURLのIDを指定 var trgFile = SpreadsheetApp.openById(trgId); var trgSheet = trgFile.getSheetByName(sheetName); //数式を取得 var copyFormula = tmplSheet.getRange(copyCell).getCell(1,1).getFormula(); //console.log(copyFormula);//数式内容を確認 //数式をコピー trgSheet.getRange(copyCell).setFormula(copyFormula);
}

下記のように copyTo使おうとすると、同じシート内の時しか使えないっぽい

copyRange.copyTo(pasteRange,SpreadsheetApp.CopyPasteType.PASTE_FORMULA);

2. Google Driveで対象のシートを取得するcopyCellToFileInFolderという関数を作成

function copyCellToFileInFolder() { var folderID = "1AR9...-Y0jP";//GoogleDriveの親フォルダのIDを指定 var parentFolder = DriveApp.getFolderById(folderID); var childFolders = parentFolder.getFolders(); while(childFolders.hasNext()) { var folder = childFolders.next(); const folderName = folder.getName(); // console.log(folderName); const files = folder.getFiles(); while(files.hasNext()) { const file = files.next(); const fileName = file.getName(); //該当ファイルを指定してコピーしたいときはファイル名に含まれてる文字を指定 if(fileName.indexOf('見積書')!==-1){ targetId=file.getId(); console.log(fileName); //実際に反映したいとき下のコメントアウトを外す //updateCellFormula(targetId); } }; }; return;
}

上記のコードcopyCellToFileInFolderを実行するとgoogleドライブの中の見積書のファイル名の一覧が表示される

3. copyCellToFileInFolderの中のupdateCellFormula関数のコメントアウトを外して実行

その後、フォルダ内のスプレッドシートが実際に更新されてるか確認

まとめ

getFormula()、setFormula()をgetValue(),setValue()にすれば値をコピペできるし、応用効かせられるので便利。