こちらの記事で紹介したシート名変換機能にいくつかの機能を追加して、「初期化」ボタンを押すとスプレッドシートを初期化することができる機能を追加しました。
背景
初期化を追加した背景には、
- ヒューマンエラーを無くす
- 汎用性を高めたい
という2つの意図があります。別の目的で使用したい時に、入力した全てのデータを削除したり、シート名を変更したりしていると、手間がかかるだけでなくエラーが発生してしまう可能性を高めてしまいます。それらを解消するために、ボタン一つでシート名の初期化と入力データの削除を行える機能を追加しました。
具体的な動作
簡単に説明すると
- シート名が初期設定(sheet1、sheet2、、、)に戻る
- 入力された情報が削除される
の2点が行われます。
各シートの初期化前後比べると以下のようになります。
1.質問記入シート
⬇
2.回答待ち一覧シート
⬇
3.回答一覧シート
⬇
4.検索シート
⬇
5.設定シート
⬇
仕組みの説明
1.シート名の変更
「設定シート」の「シート名」部分に初期シート名(sheet1、sheet2、、、)を自動入力し、「質問箱改良3」のブログで投稿した「シート名変更機能」を使用してシート名を変更しています。
それぞれのシートのヘッダー部分は「設定シート」の「シート名」と連動させているので、「設定シート」の「シート名」を変更すると自動で変更されます。
2.データの削除
端的に言うと、ターゲットの列を指定してセルに値が入っているか探し、値が入っている行を削除するという仕組みです。
例として「回答一覧(初期化後はsheet3)」を使用して説明します。
今回はカテゴリー列(SpreadsheetではB列)をターゲットにしました(上の画像の赤枠部分)。初期化ボタンが押されるとB列のセルに値が入っているかどうか探索します。値が入っているセルを見つけたら、そのセルの行番号を検出して削除します。
ただし、この方法だと5列目の「カテゴリー」も値だと判別され削除されてしまいます。そこで、探索する部分を6行目以降にしました。その結果、探索する部分が以下の黄枠部分のみになります。
実際に動かしてみると、
上の画像の緑色に囲まれている部分が値が入っていると判別されるので、
このように、6・7・8行目が削除されます。
難しかった点
すでに作成していた「削除」機能や「シート名の変更」機能などを組み合わせて作成したのですが、それぞれでセルやシート名の定義がバラバラだったので、それらを統一する所が大変でした。
今後の課題
今後制作物を作成する際は、定義名を統一したり、できるだけ他の関数から引用したりすることで、応用が利くようにしたいです。
Pingback: 質問箱 – Idea Markets