複数のスプレッドシートで見積書の管理をしてる場合などで、一括で数式を変更したい時とかないですかね?
実際、そういうケースがあって、スプレッドシートを一つずつ開いて数式をコピペするのが面倒だったので、数式を複数のスプレッドシートで更新する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()にすれば値をコピペできるし、応用効かせられるので便利。