tappyの感覚で調整さんを作れる「調整さんさん」を作ってみた

GAS

日程調整に便利なツールといえば、「tappy」と「調整さん」の二つがありますよね! 特に大学生がいわゆる「空きコマ」(授業のない、予定のないコマ)を合わせるには、tappyがすごく便利です。

tappyのメリット

tappyのなにがいいって、やっぱり時間割形式で日程調整を作れることですよね。答える方も楽だけれど、作る方も楽です!

そんなtappyですが、1つデメリットがあります。「△」を選択できないんですよね(汗) 他にも、登録するのにパスワードをいちいち設定する必要があったりと。とにかく日程調整を一つ作ったり、答えたりするのは楽チンなんですが、実用性が調整さんに比べて少し劣るかも・・ 確かCSV書き出しとかもできなかったはず・・・ 自分の知る限りでは・・・

一方調整さんなら、△を選ぶことができます!! CSV出力もできますしね!

調整さんでやろう!

と思ったんですが、調整さんを人力かつ手動でやろうとすると・・・・

めっちゃめんどくさい・・・

例えば、6/21から、6/23まで、1コマ(10:00〜12:00)と2コマ(12:00〜14:00)と3コマ(14:00〜16:00)が空いていて、そのそれぞれに対して、日程調整を行う必要がある場合・・・ tappyなら、日付3つ分、時間帯3つ分、計6つの入力で済むわけですが、調整さんの場合、

  • 6/21 10:00〜12:00
  • 6/21 12:00〜14:00
  • 6/21 14:00〜16:00
  • 6/22 10:00〜12:00
  • 6/22 12:00〜14:00
  • 6/22 14:00〜16:00
  • 6/23 10:00〜12:00
  • 6/23 12:00〜14:00
  • 6/23 14:00〜16:00

と、9つ入力しないといけません。しかも、9つ1つ1つに設定していく必要があります。コピーアンドペーストを使おうとしても、そう簡単にはいきません。

一個ずつ変更していくなんで、めんどくさくてやってられません。

そこで!! ないなら作ればいいじゃない、っていう発想で、作りました!

その名も!!!!

「調整さんさん」

調整さんさん

「調整さんさん」のコンセプトはすごくシンプル。

A列に、6/22、6/23・・・ といった形で、候補となる日付を入力していきます。そして、1行目に、10:00〜12:00、12:00〜14:00・・・ といった形で、候補となる時間を入力。そう、これはまさしく、tappyの入力画面と同じですよね。あるいは、時間割表とか。あとは、エクセルを使いなれている方なら簡単で、交わるセルに、この日付と、時間の文字列を組み合わせて表示してあげればいいだけです。ここにプログラミングの知識は全くいりません。

「調整さんさん」のイメージ画像

そう、ここは、エクセル関数を使うだけですね。B2セルに、=TEXT($A2,"m/d(ddd)")&B$1を入力して、思い思いにオートフィルするだけです。要はやっていることは単純なわけですから。

詳しくはこちらのスプレッドシートを参考にしてください!!

というか、「調整さんさん」の基本機能を使うだけでしたら、リンク先からスプレッドシートをご自身のGoogleDriveにコピーしてもらえれば、それでそのまま動作します。

調整さんさん

シート1 10:00〜13:00,13:00〜16:00,16:00~19:00,9/4(水)10:00〜13:00 9/4(水),9/4(水)10:00〜13:00,9/4(水)13:00〜16:00,9/4(水)16:00~19:00,9/4(水)13:00〜16:00 …

ただ、このままでは、調整さんにすることはできません。調整さんはどうやって日程候補の表を作っているかといえば、候補となる日程や時間、つまり日時を1行単位にして改行して登録していきます。おそらく調整さんの内部的には、改行コードを認識して、改行コードごとに区切ってtableを作っているプログラムのはずです。つまり、この分散した候補を、一列にして上げる必要があります。

画像の場合は、B列からF列まで。セル番地でいうと、 B2:F13 を一列ずつコピペしてもいいのですが、それはそれでめんどくさい。ここまで自動化したんです。要はA列と1行目を除いた全てを、横にバーっと一列にしてあげることぐらい、なんとか自動化してしまいたいのですが・・・さすがにそれはスプレッドシートの関数だと難しいかも。やるからには、縦・横、候補の日付と時間がどれだけ伸びても、対応できる仕組みにしたいです。

ここで役に立つのがGAS(Google Apps Script)!!

各セルの候補の時間を、1列にするという作業を、スクリプトでプログラマブルに行えるようにしましょう! コードを作ってみました。

以下のコードをコピペしてください!!

function myFunction() {
  var ss = SpreadsheetApp.getActive()
  var ssA = ss.getActiveSheet()
  var ssAdt = ssA.getDataRange().getValues()
  //Logger.log(ssAdt)
  var array = []
  for(i=1;i<ssAdt.length;i++){
    for(j=1;j<ssAdt[i].length;j++){
    array.push([ssAdt[i][j]])
    }
  }
  //Logger.log(array)
  ssA.getRange(1,10,array.length).setValues(array)
}

このコードを使うことで、A列と1行目を除いたセルに入力された項目について、1次元の配列に落とし込み、それを任意のセルに出力することができるようになります。

このコードの注意点は、.getValues() で、スプレッドシート内のすべてのデータを取得するようになっているため、表以外に入力項目があるとうまく作動しないことです。このコードを一度実行したら、実行する前にその都度、出力結果を消去してから行うようにしてください。

まあ、消去するようにコードを書けばいいっちゃいいんですけどね。そこは手抜きです。笑

これによって、tappyのように日付と時間帯の指定を行えば、ワンクリックで、調整さんに貼ることができるようになりました!

こういう自動化って大事だと思っているんですよね。自分のプログラミングのモチベーションでもあります。

それじゃあ今日はこんなところで!

タイトルとURLをコピーしました