7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【コピペで10分】Google Spread Sheetのシートを定期で複製コピーする手順を最初から

Last updated at Posted at 2021-01-02

#はじめに
毎日とか毎週とか、そういうスパンで報告書って必要なんですが、地味に毎回シート作成するのがめんどくさい場面が発生。
挙げ句「あ、後で作らなきゃ」→「忘れてたたたた」。
なんてのがチームで茶飯事的だったので、とりあえずコピーするスクリプトをGASで組んだので公開。
多分このちょっとした悩みは自分だけじゃないはず。とどけ、世の中の管理者の皆々様に。

(ちなみに、追加後にタスク管理ツールのTrelloにチケット追加するのは、反響あればそのうち公開しますので乞うご期待)

こんな人に需要あるかも

  • 定期の書類報告がある
  • スクリプトなどはよくわかりませんが、、、コピペすればよろしい?
  • エンジニア初心者なもんで!GASでライトにトライしてみたい!!

##やったこと

  • Google Spread Sheetにテンプレシートを作成しておけば、そのシートを「XXXX日付」の名称でコピーしてくれるスクリプト作成
  • シート作成のタイミングをトリガで指定

これは簡単すぎる…


##準備するもの
準備するとかしないとかの次元じゃないけど、一応。

  • Googleのアカウント

#手順

##作業1. Google Spread Sheet上での準備

スプレッドシートの準備をします。

スプレッドシートを作成したら、コピー元になるシートを「(任意)master」という名称で作成してください(数は任意、1個でもおk)。
ここでは「サンプル1master」「サンプル2master」とします(1と2は「全角」で書いてます、まんまやる人はご注意)。
image.png


##作業2.スクリプトエディタでGASを編集

スクリプトエディタを開きます。
image.png

開いたスクリプトエディタ上に、次のソースコードをコピペ。



// コピー元のマスターシートの名称を保持する配列(コピー元を追加したいときはここに追加、コピー元の名称は「XXXmaster」の形の前提)
var copySheetArray = [
  'サンプル1',
  'サンプル2'
];

// 当日のシートを作成する関数
function makeTodaySheet() {
  // copySheetArrayを回して各シート名でコピーする
  copySheetArray.forEach(function(sheeName){
    AutoSheetCopy(sheeName);
  });
}

// シート"XXXXmaster"を複製する関数
function AutoSheetCopy(sheetName){
  // スプレッドシートを取得
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  // 取得したスプレッドシートから、コピー元のシートを取得(コピー元の名称は「XXXmaster」の形の前提)
  var templateSheet = ss.getSheetByName(sheetName + 'master'); 
  // シートをコピー作成(ホントは「templateSheet」が取得できなかったとき、すでに同名のシートが存在するときの分岐もつけたい)
  ss.insertSheet(sheetName + getDate(), 0, {template: templateSheet}); 
}

// 現在の月と週数を取得する関数
function getDate(){
  // 現在の日時を取得
  var today = new Date(); 
  // 現在の日時から、日付取得(月日で)
  var out = Utilities.formatDate(new Date(), "JST", "MMDD");
  return out; 
}

シートの名称を自分でつけたものにしたい場合は、以下の「サンプル1」「サンプル2」のところを自分でつけたシート名に変更。

// コピー元のマスターシートの名称を保持する配列(コピー元を追加したいときはここに追加、コピー元の名称は「XXXmaster」の形の前提)
var copySheetArray = [
  'サンプル1',
  'サンプル2'
];

作業3. アプリケーションの承認作業

動かしながら承認するのがテストにもなって手っ取り早いです。
「makeTodaySheet」を選択して「実行」をクリック。

image.png


アラートが出ます。「権限を確認」をクリック(ビビらなくてOK)。
image.png


利用するGoogleアカウントを選択(ビビらなくてOK)。

image.png


再度警告。「詳細」をクリック(ビビらなくてOK)。

image.png


ここクリック(ビビらなくてOK)。

image.png


「許可」をクリック(ビビらなくてOK)。くどいないい加減。
image.png


ただいま、元の画面。
そうすると「実行ログ」が出てます。「実行完了」が出てることを確認したら、

image.png


スプレッドシート側でもコピーがされていることを確認します。

image.png

作業4. 定期実行のトリガを設定

最後にスクリプトの定期実行の設定をします。スクリプトが画面に戻って、目覚まし時計をクリック。

image.png


「トリガーを追加」または「新しいトリガーを作成します」をクリック。

image.png


トリガーの設定画面です。「イベントのソースを選択」だけ「時間主導型」に変更します。ほかはそのままでOKです。

image.png


お好みの設定をして、「保存」をどうぞ(今回は毎週月曜日に作成されるようにしました)。

image.png

※実はトリガの発火部分だけは月曜日に確認するので動作確認はまだです。しくじってたら後で記事編集します(汗)

#おしまい

以下定型文。

どっちかというと非エンジニア向けにいちいちキャプチャをとりながらやってみました。
ソースいじりたい方はぜひいじってみて下さい。
(というか、エンジニアの方からはソースの至らぬところに対してのアドバイスをいただきたいです。。。)


以下定型文。

あと、「やってるけど動かねえ!」みたいなあるあるのトラブルシューティングもあるんですが、それはちょっとボリューム増えちゃうので、次回とかにしたいと思います。

おわり。

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?