日程調整に便利なツールといえば、「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のように日付と時間帯の指定を行えば、ワンクリックで、調整さんに貼ることができるようになりました!
こういう自動化って大事だと思っているんですよね。自分のプログラミングのモチベーションでもあります。
それじゃあ今日はこんなところで!