プログラミング 作品 アイデア12選|スプレッドシートから始める
要約
プログラミング 作品 アイデアを、今使っているスプレッドシートから探す方法を紹介します。リマインダーや集計などの初心者向けの作品から、Excelの Python 機能を使う上級者向けの作品まで、12の例を難易度順に並べました。言語はファイルの置き場所で選び、最初の作品は小さく始めるのがおすすめです。
スプレッドシートを毎朝開いているなら、それはもうプログラミングの題材です。プログラミング 作品 アイデアを探しているなら、まず手元のシートから始めてみてください。メールを送ってくれる追跡表、勝手に整う表、更新を待たなくていいダッシュボード。どれも実際に作れる作品で、必要なデータはすでにシートの中にあります。以下では、「午後ひとつ」で終わるものから「週末ひとつ」かかるものまで、私が作った、または同僚が作るのを見てきた12の例を紹介します。
ToDoアプリより自分のスプレッドシートが良い理由
ほとんどのアイデア一覧は同じ5つを挙げます。ToDoアプリ、電卓、天気ウィジェットです。悪くはありません。ただ、結果を誰も必要としないので退屈です。
スプレッドシートの作品は、現実の面倒ごとから始まります。毎週金曜に同じ数字を同じ列へコピーしている。承認をメールで一件ずつ催促している。毎月同じレポートを作り直している。面倒ごとが本物なら、最初の利用者はあなた自身なので、最後まで作り切れます。
理由はもう一つあります。スプレッドシートには、画面、データベース、共有の仕組みが最初から揃っています。多くの初心者プロジェクトをつまずかせる環境構築を飛ばして、すぐロジックに集中できます。
どの言語をどのシートに使うか?
流行りではなく、ファイルの置き場所で道具を選びましょう。
Google スプレッドシート: Google Apps Script(JavaScript)。メール送信、メニュー、トリガー、フォームの連携に向いています。
Excel 365: Office スクリプトまたは Excel の Python 機能。データ整形、集計、グラフに向いています。
古いデスクトップ版 Excel(2016、2019): VBA。ファイルをノートパソコンの外に出さないマクロに向いています。
どちらでも: LAMBDA と名前付き関数を使った数式。スクリプトなしで再利用できるロジックを作れます。
バージョンには注意してください。Excel の Python 機能と LAMBDA には Excel 365 が必要です。Apps Script はスプレッドシートだけ、VBA はデスクトップ版 Excel だけで動きます。会社の制限が厳しいPCなら、アイデアに惚れ込む前に確認しましょう。
コードを書いたことがないなら、Apps Script から始めるのがおすすめです。JavaScript ですが、入口が優しくできています。「拡張機能」から「Apps Script」を開けば、そのシートに紐づいたエディタがすぐ使えます。

初心者向けの作品アイデア(午後ひとつ分)
どれも20〜60行ほどのコードで作れます。この順番で試すのがおすすめです。
1. 掃除を実行するカスタムメニュー。 余分な空白を消し、大文字と小文字をそろえ、空行を削除する関数を書きます。それを onOpen でメニューに追加します。関数、範囲、メニューの仕組みを一度に学べます。人が本当に使い続ける最初のスクリプトになりやすいです。
2. 月次サマリーシート。 生データのタブから値を読み取り、カテゴリごとに合計して、別のタブに書き出します。SUMIF を遠回りして書くようなものですが、それがポイントです。数式が裏で何をしていたかが見えます。すでにピボットテーブルを使いこなしているなら飛ばして構いません。学ぶのは結果ではなく繰り返しの仕組みです。
3. 誕生日や更新期限のリマインダー。 日付の一覧を置き、毎日実行されるトリガーで、一週間以内に迫った項目をメールで知らせます。Apps Script のトリガーは多くの人にとって「あ、これか」という瞬間になります。寝ている間に何かが動くのです。
4. データ入力チェッカー。 列をスキャンして、ルールに違反した行をすべて色付けします。不正なメールアドレス、マイナスの価格、ID の欠落などです。最初の正規表現を書いて少しうんざりするでしょうが、それは普通のことです。
実際のスクリプトはこうなります。私が知っている中で一番シンプルなリマインダーで、Apps Script のエディタにそのまま貼り付けられます。
function sendReminders() {
const rows = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
rows.slice(1).forEach(([name, date]) => {
const days = (new Date(date) - new Date()) / 86400000;
if (days > 0 && days <= 7) {
MailApp.sendEmail("you@example.com", "Coming up: " + name, "Due " + date);
}
});
}各部分を説明します。getValues() は全行を配列で返します。slice(1) はヘッダー行を飛ばします。MailApp.sendEmail(宛先, 件名, 本文) が実際の送信を行います。時間主導型トリガーを設定すれば、毎朝自動で動きます。個人アカウントは1日あたり100件までしか宛先に送れず、1回の実行は6分で止まります(Apps Script のクォータ)。個人のリマインダーには十分ですが、メルマガには向きません。
中級者向けの作品アイデア(週末ひとつ分)
ここからは、シートを外の世界とつなぎます。
5. フォームから入力する経費トラッカー。 Google フォームがシートに書き込み、スクリプトが各行をカテゴリ分けし、集計タブで月ごとの支出を表示します。面倒な入力はフォームが担当するので、ルール作りに集中できます。
6. 価格や在庫の監視。 公開ページや API から UrlFetchApp で数値を取得し、1時間ごとにタイムスタンプ付きで記録して、推移をグラフにします。私は一度、旅行の航空券価格をこの方法で追跡したことがあります。残念ながら分かったのは、買おうと決めた日に価格が上がるということでした。
7. 承認ワークフロー。 行に「承認待ち」の状態を付けると、承認者に2つのリンク付きメールが届き、クリックするとシートが更新されます。日本の稟議書のような流れを、小さな業務システムとして作る感覚です。職場で一番頼まれやすいプロジェクトでもあります。
8. シートから Slack へのダイジェスト。 毎週月曜に、期限超過の上位5件をチャンネルに投稿します。Webhook は HTTP の呼び出し1回で済みます。その1回を自分で書きたくなければ、ノーコードのコネクタに配管を任せ、あなたはロジックに集中できます。

上級者向け: シートの枠を超えるアイデア
シートが小さく感じ始めたら、シートは画面として残し、重い処理は外に出しましょう。
9. Excel の Python 機能によるクリーニング処理。 20万行の重複を削除し、会社名のあいまい一致を取り、数行の pandas で外れ値に印を付けます。セットアップは Microsoft の Python in Excel のドキュメントにあります。Excel 365 でのみ動き、数式は引き続きグリッドを管理します。
10. 照合スクリプト。 2つのエクスポート(銀行明細と仕訳帳、受注と請求書)を比べ、片方にしか存在しないものを一覧にします。経理や業務チームは毎月これを繰り返しているので、粗削りでも数時間分の節約になります。まずは完全一致から始め、金額と日付の許容範囲を後から足しましょう。
11. シートの上に作る個人用 API。 doGet を使ってシートを小さなWebアプリとして公開し、JSON を返して他のツールから読めるようにします。安上がりで少し力技ですが、API とは何かを理解するには最適です。
12. 再利用できる LAMBDA ライブラリ。 スクリプトではありませんが、数えてよいでしょう。よく使う数式の5パターンを名前付き関数にまとめ、ロジックを一か所に置きます。Biscuit なら「見つけやすい場所に骨を埋めておく」と言うでしょうね。
最初の週末をつぶす3つのエラー
どのスプレッドシートのスクリプトも、同じ数か所で壊れます。先に知っておけば何時間も節約できます。
承認の確認画面。 スクリプトが初めてメールを送ったり別のファイルに触れたりすると、Google が権限の承認を求めます。画面を閉じてしまうと、スクリプトは黙って失敗し、コードが間違っていると思い込みがちです。エディタから関数を一度手動で実行し、表示される確認に同意してください。
日付に見えて日付ではないもの。 日付らしく見えるセルが実は文字列の場合があり、スクリプトが文字列と数値を比べてしまいます。typeof で確認するか、値を new Date() で包みましょう。Excel でも同じ罠があり、文字列として保存された日付は並べ替えを拒みます。
時間切れ。 セルを1つずつ読み書きするループは遅くなります。呼び出しのたびにサーバーへ往復するからです。getValues() で範囲を一度に読み、配列上で処理してから、setValues() で一度に書き戻しましょう。4分かかっていたスクリプトが数秒になることも珍しくありません。Apps Script で最も効果の大きい高速化ですが、初心者向けの解説ではあまり触れられません。
何かが壊れたら、console.log() を追加して、実行数パネルで実際のエラーを読みましょう。メッセージは見た目より役に立つことが多いです。
現実的な最初の1週間
一覧ではなく計画がほしいなら、同僚に渡している順番を紹介します。1日目は困りごとを一つ選び、望む結果を一文で書きます。2日目は作業を一度手作業でゆっくり行い、すべての手順をメモします。3日目は、その手順をデータを読んで結果をログに出す関数にします。4日目は結果をシートに書き戻します。5日目はトリガーかメニュー項目を追加して、一人に見せます。完璧なスクリプトに賞はありません。毎朝動く荒削りなものは、「あとで」というフォルダに眠る磨かれたものに勝ります。
AI について: 使うけれど、書かれたものは読む
AI のコーディング支援は、この種の作業が得意です。スクリプトは短く、目的も説明しやすいからです。列の名前、起きてほしいこと、出力の形を伝えましょう。数秒で最初の下書きが得られます。
私が守っている2つのルールがあります。まず、元のシートではなく必ずコピーで実行すること。スクリプトは「元に戻す」より速く列を上書きできます。次に、AIに一行ずつ説明させてから、自分で一つの値を変えてみること。結果を予測できないなら、そのコードはまだあなたのものではありません。

具体的なプロンプトの例はこうです。「A列に名前、B列に期限があります。期限が7日以内のものを、毎日一回メールで送ってください。」入力、出力、タイミングが明確です。「シートを自動化して」のような曖昧な依頼からは、曖昧なコードしか返ってきません。そして、曖昧なコードには見つけにくいバグが潜みます。最初の下書きが失敗したら、プロンプトを一から書き直すのではなく、エラーメッセージをそのまま貼り付けて修正を頼みましょう。
数式だけで済むなら、スクリプトは不要です。問題を説明すれば、数式と、Excel と Sheets のどちらで動くかの注記が返ってきます。
完成まで持っていける1つの選び方
最初のバージョンが一番小さいプロジェクトを選びましょう。「期限が近づいたらメールで知らせる」は「本格的な顧客管理システム」より優れています。粗削りなままリリースし、2週間使ってから、一番イラッとくる部分を直します。何が壊れたかを書き留めてください。そのイライラの一覧が、次の3つのプロジェクトになります。今も使っているスクリプトの多くは、人に見せるのが少し恥ずかしい4行の即席コードから始まりました。
3つのフィルターが役立ちます。
そのファイルを毎週触りますか? 触らないなら効果を実感できず、やめてしまいます。
最初のバージョンは1つのタブに収まりますか? 収まらないなら範囲を削りましょう。
ほかの人も使いますか? 同僚の「この列も追加できる?」は、最高のモチベーションです。
安全に作って壊せる場所がほしいなら、クラウドのコーディング環境が、シートの外に出る中級プロジェクトに役立ちます。
月曜日に私ならどこから始めるか
私の選択は3番、リマインダーです。短く、トリガーを使い、結果が受信トレイに届くので、動いていることがすぐわかります。次に1番の掃除メニューを加えて、ワンクリックで使えるようにします。月末には、信頼できるスクリプトが2つと、次に作るべきものの明確なイメージが手に入っているはずです。
ToDoアプリは飛ばしてください。あなたのスプレッドシートには、すでによりよいアイデアが入っています。