28
3

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 1 year has passed since last update.

HRBrainAdvent Calendar 2022

Day 2

GASでアドベントカレンダーの日付を自動割当できるスクリプトを作成した

Last updated at Posted at 2022-12-01

この記事はHRBrain Advent Calendar 2022の2日目の記事です。

はじめに

バックエンドエンジニアをやっている入中です。

この記事ではGoogle Apps Scriptとスプレッドシートを使用して、アドベントカレンダーの何日目の担当かをサクッと決められるスクリプトを作成したので紹介します。

誰に向けた記事

  • GASを使ってみたい方
  • 開発環境構築せずに、プログラムを動かしてみたい方
  • アドベントカレンダーの日程割に困っている方

経緯

私の発案で2022年のHRBrainアドベントカレンダーの担当日を決める際に、くじ引きで日にちを決めようと決意し、みんなにくじを引いてもらいました。(アナログな手作りくじ)くじを引いてもらったのはいいのですが。。。その後、自分が引いてたくじ番号をNotionに書いてもらったり、リモートで就業している方がくじをひけなかったり、自分自身もアドベントカレンダーの日程管理に時間を取られたりと、なかなか反省の多い施策でした。。。

やりたかったことはアドベントカレンダーに参加してくれる人にランダムで日程が割り付けられることなので、スプレッドシートの日付に参加者を充てるスクリプトを作成し、在宅・出社問わずアドベントカレンダーの日程決めに参加できる誰が何日の担当かの確認の煩わしさが起こらないようにしようと考えました。

作ったものの動き

output-pallete.gif

  • 空白行があった場合に除外することを確認するため、1行空白を入れています。
  • 2022年のHRBrainアドベントカレンダーは参加者が25名以上になりました。参加者が25名以上の場合、スプレッドシート結果ページの1列目には25以降に1を入力し、カレンダー2の1日に割り当たるようにしました。
  • シートに記載している名前は名前生成APIで作成したものです。

コード

AssignCalendar.js
function assignCalendar() {

  const spreadSheetId = 'xxxxxxxxxxxxxxxxxxxxxxxxxx'
  const sheet = SpreadsheetApp.openById(spreadSheetId)
  const memberSheet =  sheet.getSheetByName('参加者')
  const resultSheet =  sheet.getSheetByName('結果')

  const membersList = memberSheet.getRange(1,1,memberSheet.getLastRow())
  const members = membersList.getValues()

  const m = []
  let num = 0
  for (let i = 1; i < members.length; i++) {
    if (members[i][0]== "") {
      // 空白セルがあったときにスキップする
      continue
    }
    num++
    m.push([members[i][0]])
  }
  const shuffleMembers = shuffleItems(m) 
  const memberRow = resultSheet.getRange(2,2,num)
  memberRow.setValues(shuffleMembers)
}

function shuffleItems(items){
  l = items.length
  while (l) {
    j = Math.floor( Math.random() * l );
    t = items[--l];
    items[l] = items[j];
    items[j] = t;
  }
  return items
}

まとめ

1~1.5hくらいで簡単にできたので、アドベントカレンダー日程決めの前に用意できていたらなと改めて思いました。来年、もし機会があればこのスクリプトで日程決めができたらいいなと思います。

最後まで読んでいただきありがとうございます。

補足

GASの始め方

  【Gas開発環境にアクセスするまでの手順】
  ※ Gasを使用して開発するにはGoogleアカウントが必要です。

  1. GoogleDriveにアクセス

スクリーンショット 2022-11-24 19.16.41.png

  2. Google Apps Scriptにアクセス

スクリーンショット 2022-11-24 19.21.03.png

  3. コードを書いて ▶実行を押下して動かす

スクリーンショット 2022-11-24 19.29.34.png

sheetIdとは

スクリーンショット 2022-11-24 19.08.24.png

スプレッドシートを表示した際のURLの/d/#edit に挟まれた英数字

sheet.getSheetByName({スプレッドシート名})の指定方法

sheet.getSheetByName()には、スプレッドシートのシート名を入れてください

スクリーンショット 2022-11-24 19.49.24.png

参考:

JavaScript リファレンス

【GAS】スプレッドシートでGASを使用する

28
3
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
28
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?