見出し画像

【GAS】Google Apps Script 活用事例 健康診断などで、スタッフ別フォルダを一括作成する時に使えるスクリプト

千葉県でも外出自粛命令が出ました。週末に出かけなくても、月曜に会社に出かけていたら、結局、同じな気がします。週末は危なくても平日はOK?ナニソレって感じです。やるなら徹底して欲しいですね。

ところで衛生管理者の勉強が全く出来ていなくて、落ちそうだったので、「コロナ対策のために試験日を順延してもらえませんか?」と相談したところ、OKが出ました。GASだけではなく、こちらも頑張らないと。

診断結果の個人票は、5年保管義務がある。

実務では、在留資格更新作業のために、スタッフ別にフォルダを作成する必要があります。それまでパートさんがやってくれていた仕事だったのですが、休校措置でパートさんが来れなくなり、その仕事を俺がやる羽目に。

パートさんがいなくなって初めて、「こんなクソだるい仕事をやっていたのか!!」と気づきました。こんな仕事を文句もつけずにやっていたのだなと。モチベーションを奪う、人を腐らせる仕事を、自分のスキルで減らせていけたらいいなと思います。

在留資格更新作業は、比較的レアケースかと思いますが、健康診断は法定で会社の義務なので、スタッフや社員別にフォルダを作る機会もあるんじゃないかなと思います。そこで、今回は、spreadsheetから、ID、スタッフ名などのデータを読み取り、フォルダ名としてリネーム。そして階層まで考慮したフォルダを一発作成するスクリプトを書いてみたいと思います。

使うシートはこんな感じ

スクリーンショット 2020-03-28 9.09.38

これは本当に頭から湯気が出るくらい、大変でした。for文、3回使いました。備忘録として残しておかないと、確実に覚えていないでしょう。

橋田鈴羽じゃなくて、天音だったかもしれん......。

実行時のイメージ

完成形のスクリプト


function idAndName() {
 const spreadsheet  = SpreadsheetApp.getActiveSpreadsheet();
 const sheet        = spreadsheet.getSheetByName('シート1');
 const values       = sheet.getDataRange().getValues();
 values.shift();
 const folderName   = [];
 
/*IDと名前だけを抽出*/
 for(let i = 0; i < values.length; i++){
   folderName.push(values[i][0] + '_' + values[i][1] + '_' + '診断結果個人票');
 }
 console.log(folderName);
 return folderName
}


function swiftFolderCreate() {
 const folder = DriveApp.getFolderById('***********');//自分のGoogle Drive
 console.log(folder.getName());
 
 //下位フォルダのタイトル
 const rootFolderName       = '健康診断結果';
 const createRootFolder     = folder.createFolder(rootFolderName);
 
 const newFolderId          = createRootFolder.getId();
 const hubFolder            = DriveApp.getFolderById(newFolderId);
 console.log(newFolderId);
 
 const folderName1st        = idAndName()//11111 岡部倫太郎
 const folderContents2nd    = ['1年目','2年目','3年目','4年目','5年目'];
 const folderContents3rd    = ['原本','産業医報告用'];//お好きに変えてください。
 let arrayFolder            = [];
 let arrayFolder2           = [];
 

 for(let i = 0; i < folderName1st.length; i++){
   arrayFolder[i] = hubFolder.createFolder(folderName1st[i]);
   
   for (let j = 0; j < folderContents2nd.length; j++){
    arrayFolder2[j] = arrayFolder[i].createFolder(folderContents2nd[j]);
     
     for(let k = 0; k < folderContents3rd.length; k++){
      arrayFolder2[j].createFolder(folderContents3rd[k])
     }//k
   }//j
 }//i
}

実行すると、

健康診断結果 > 11111 岡部倫太郎 > 1年目 > 原本......みたいな感じで3階層のフォルダが生成されます。実務では20人ぐらいを一気に作成したのですが、3分くらい掛かりました。GASにしては、ちょい長め.....。

格納するスタッフ別のファイルを作成する

お......重い。神エクセル(紙に印刷する前提のスプレッドシート)にgetRangeで一回、一回、値を代入していきます.....。マジか......。

月次作業時の連番フォルダ作成はこちら

ローカルでフォルダを一括で作るには?

ノンプロ研の先輩である、もりさんがお手軽にフォルダを100作るスクリプトを書いています。VBA俺も勉強しなきゃ。

もりさん、書籍デビュー本、ちょっと辛口レビュー


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