記事の目的
TODOリストを使ってタスクを管理している人は多いかと思われます。
僕もその一人で、スプレッドシートをGASを用いて作成したので、その過程で用いた入力されたセルの両隣に自動で任意の値を入力するやり方を紹介したいと思います。
(ちょっと何言ってるのかわからないかもしれないので、画像で説明)
下の画像は分かりにくいかもですが、Googleスプレッドシートの一部です。
真ん中の列のセルにタスク名(今回は「タスク1」)を入力すると、
このように、タスク1の左のセルに入力した際の日付
右のセルにはプルダウン形式の「未着手」が自動で反映されます。
手入力すればいい話ですが、めんどくさがりなので自動化しました。
なお、「未着手」となっているプルダウンには「完了」と「未着手」の2つを設定しており、
スプレッドシートの上タブにある「表示形式」⇒「条件付き書式」を用いて「未着手」と選択された場合は赤色に、
「完了」と選択された場合は緑色にしています。
全体ソースコード
function myFunction() {
var sheet = SpreadsheetApp.getActiveSheet();
var currentRow = sheet.getActiveCell().getRow();
var currentCol = sheet.getActiveCell().getColumn();
var updateRangeData = sheet.getRange('A' + currentRow);
var updateRangeTask = sheet.getRange('C' + currentRow);
if(currentRow > 1 && currentCol == 2){
updateRangeData.setValue(new Date());
updateRangeTask.setValue("未着手");
}
}
入力されたセルを取得
まずは、タスク名を入力したセルを取得します。
下記のプログラムで、選択されているセルの列を取得します。
var currentRow = getActiveCell().getRow()
同様に行を取得する場合は下記のようにします。
var currentCol = sheet.getActiveCell().getColumn();
入力された両隣のセルを取得
次に先ほど取得した入力されたセルの左隣のセルを取得します。
(下記のプログラムではA列を指定しています。)
currentRowには、入力されたセルの列数が入っています。
これで入力されたセルの列と同じ行を取得することが出来ます。
var updateRangeData = sheet.getRange('A' + currentRow);
次に「未着手」を右隣(C列)に入れるため、そのセルを取得します。
var updateRangeTask = sheet.getRange('C' + currentRow);
条件式
if(currentRow > 1 && currentCol == 2)
上記の条件式は、1行目以降で条件を書いている理由は1行目には下図のようにタスクという項目名を入れているからです。2列目かどうかはB列の値かどうかを判定しています。
つまり、2行目以降のB列のセルが入力されたら~という条件式になります。
任意の値をセルに入力
updateRangeData.setValue(new Date());
updateRangeTask.setValue("未着手");
上記のプログラムにおける、setValueを用いて日付と「未着手」を入力しています。
new Data()で現在の日付を自動で取得してくれます。
「未着手」という文字列に関しては、プルダウン形式のセルでも問題なく入力されました。
最後に
こうして自分でTODOリストを作成すると、使いたくなりますよね(笑)
TODOリストの活用方法は人それぞれあると思うので、今後欲しい機能を見つけたら、どんどん機能追加していこうと思います。
とりあえずは、日付とタスクの状態を一目でわかる表が欲しかったので、大満足です。
お疲れ様でした!