「名前付き関数」について.2 ※範囲を自動で設定するテクニックはプログラミングで壁をのりこえるために必要※【関数】【Googleスプレッドシート】
名前付き関数のテスト実例として、どんなものを作ってみようか考えたのですが、将来的には範囲を自動で設定するということを学ぶ必要があるので、
スプレッドシートの入力された範囲を自動で取得するという体験を表現してみました。
範囲を自動で指定する。
Google Apps Scriptを使いこなす次の段階で必要になることがあります。
「A1:D3」のような範囲の指定ではなく、「データが入力されている範囲」という指示に対して指定範囲を返す方法です。
このnoteでは、配列と同じようにしばらくは扱う予定がありません。
当面は、getRange、getValue、setValueと+少しのなにか、で業務改善の参考になるスクリプトをお伝えしていくつもりです。
今回は、あくまで、名前付き関数の事例としてご参考ください。
作成する関数は、MAXとMATCHを組み合わせて、ある列の一番下の行数を返すということができるようになっています。
=MAX(MATCH(MAX(A:A)+1,A:A,1),MATCH("",A:A,-1))
たぬさんの記事を参考にさせていただいてます。詳細の説明もありますので、深く理解されたい方はこちらをどうぞ
名前付き関数で、「LASTROW」を新規作成
スプレッドシートの「データ」から、「名前付き関数」を選択し、サイドバーを開きます。下の「新しい関数を追加」をクリックします。「関数をインポート」は最後に解説します。
このように入力しました。
今回引数は一つだったので、見た目はシンプルです。
省略可の項目が意外に多いので、関数を利用するときにどのように表示されるのか対応表を作成してみました。①②③④のような対応表です。
関数を利用するときに表示される項目
それぞれの項目が、出力される先です。作成者ではない利用者に、使用用途を伝えれる設計のようですね。
そのように見てみると、③の例の表現として、「A:B」のように複数の列はまたがないでねというメッセージだったのですが、わかりにくいですね。
LASTROWを使ってみる
表示画面の結果になります。
=MAX(MATCH(MAX(A:A)+1,A:A,1),MATCH("",A:A,-1))
=LASTROW(A:A)
くらべてみるとすっきりしますね。複数個所で繰り返し利用するときは、メンテナンスを考えても設定してみると便利そうです。
関数をインポートする
「データ」から、「名前付き関数」を選択し、サイドバーを開きます。下の「関数をインポート」をクリックすると、ほかのスプレッドシートが選択できます。検索やURL指定で、選択ください。指定したスプレッドシートに名前付き関数が登録されていれば、次の画面に遷移します。(登録されてなければNGとなります。)
前回作成した、THREEPLUSをインポートしてみます。チェックで個別指定するか、すべてインポートするか選択できますね。
増えました。
結構お手軽です。社内拡販する場合、どこかにマスター作って元を抑えておいてもいいかもしれないですね。
こちらシートです。
スクリプトでは、getLastRow は、「シート全体」の一番下の列を返します
今回作成したLASTROWは、「ある列」の一番下の行数です。これがどうも関数では再現できませんでした。すいません。方法をご存じの方は、ぜひお教えくださいませ。
GASでは、getLastRowのほうが簡単です。