見出し画像

【Google Apps Script 通信 vol.8】数式を最終行までコピーしよう!①

こんにちは。きゅうりです。

「え、数式コピーなんて Ctrl + Dで一発じゃん」

そう、そうなんです。でもこれを作ってみたい理由ができました。

先日久しぶりに激重Excelに触る機会がありました。機会があったというか、これから2週間ほど毎日触らないといけない状況に、、、。

数式の計算完了を5分以上待たないといけない、という状況が1日で10回以上発生したのです。いや、無理。この不毛な時間を過ごすなんて無理。

ファイルを軽くする方法はいろいろ試したのですが改善の兆しゼロ。

そもそもスプレッドシートで大きなデータを扱ったことがないので、このGASで私の不満が解消されるかは確定してないのですが、やってみないと分からないので、やってみようと思った次第です。

Excelは再計算中は別ファイルを触ることができませんが、GASでやってしまえば計算中に別ファイル触ろうが何しようがOKなので、待ち時間から解き放たれる予定です。

やること

今回もサンプルのスプレッドシートを用意しました。

少しスクリーンショットが小さくなったしまったので、こちらも参考にしていただけると嬉しいです!

指示シートで指定したコピー対象列に対して、コピーしたいシートの2行目に記載した数式を最終行までコピー、というスクリプトを書いていきましょう!

無題

まずはシンプルにC列の数式だけコピー

下記サンプルコードです。

function myFunction() {

 // 現在のスプレッドシートにアクセス
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 
 // コピーしたいシートにアクセス
 var copySheet = ss.getSheetByName('コピーしたいシート');
 
 // 最終行を取得
 var lastrow = copySheet.getLastRow();
   
 // C2セルの数式をC3~最終行までコピー
 copySheet.getRange('C2').copyTo(copySheet.getRange('C3:C'+lastrow));
}

コード最終行のgetRange('C2')でコピーする数式を取得して、

その直後のcopyTo(copySheet.getRange('C3:C'+lastrow)で貼り付けるシートと範囲を指定しています。

指示シートに記載した各列に対してコピーを繰り返す

function myFunction() {

 // シート情報を取得
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var setSheet = ss.getSheetByName('指示');  
 var copySheet = ss.getSheetByName('コピーしたいシート');
     
 // 繰り返し回数を取得(指示シートの最終行数=繰り返し回数のため)
 var loop = setSheet.getLastRow();
 
 // コピーしたいシートの最終行を取得
 var lastrow = copySheet.getLastRow();
 
 // 繰り返し処理
 for (var i = 2; i <= loop; i++){ 
 
   // コピー対象列を取得(コピー対象列の情報が2行目以降のため、iは2からスタートさせた)
   var col = setSheet.getRange('A'+i).getValue();
       
   // 2行目の数式を最終行までコピー
   copySheet.getRange(col+'2').copyTo(copySheet.getRange(col+'3:'+col+lastrow));
}}

今まですべてのコードに解説を付けてきましたが、すこし長くなってきたので基礎的な部分の開設は省いています。

これはなんだ??と思ったら、そのコードをGoogle検索すると何をしているコードなのか答えが出てくると思います(*'▽')

複数シートも一括でコピーを実行したい!

ここまでで出来たのは1シート分のコピーだけですが、複数シート分も一括でコピーできたらとっても楽になりますね!

ここでvol4で作成したシート名取得のスクリプトが大活躍するのです。

では、次回以降で複数シートでコピーできるように進化させていきましょう!


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