Excelでは複数人で同時に利用するときにはちょっとつかいにくいところがあります。そういうシートについてはExcelをGoogleスプレッドシートにアップロードして、Googleスプレッドシートで管理するようにするようにしています。
長い間使っているシートだと行数がとても多くなってきて、毎回スプレッドシートを開いてから自分が使いたいセルに移動するためにスクロールバーを使って移動することになります。
面倒だなぁと思っていたのですが「そうだGoogle Apps Scriptがある!」ということに気がついたのでGoogle Apps Scriptを使ってその面倒を減らしてみました。それについて書きます。
Google Apps Scriptとは?
以前、マイクロソフトのExcel VBAを使って請求書や見積書を作っていました。VBAは普通にプログラムが組める上に、Excelのシートの制御ができたので大変便利です。
Excelといえば最近はGoogleスプレッドシートがほぼ同じような使い勝手なのでどこまで同じ事ができるのかなと思っていました。たぶん、VBAと同じような使い勝手なのではないかと思っていたのですが、なかなか試す機会がありませんでした。今回、よく使うスプレッドシートを開いて毎回一番下の行まで移動するのが面倒だなということでようやくApps Scriptを使おうと思いました。
そしてググった結果こちらのページを発見しました。
Google Apps Scriptの基本を覚える (1/7) libro
こちらの記事はとってもわかりやすく、順を追って進められます。最初の数ページを見て、Apps Scriptの始め方がわかりました。
- 余談ですがApps Scriptだけでなく他の言語の記事もあり、いつかやってみたいなと思うものがいくつかあったのでまた別の機会に参考にさせていただこうと思っています。
Apps Scriptをちょっと触ってみてやはりVBAにとても似ているなと思いました。メッセージをポップアップで表示するのはVBAだと
MsgBox ("こんにちは")
ですが、Apps Scriptだと
Browser.msgBox("こんにちは");
ほとんどおなじかんじですよね。他の関数も似ているものが多かったです。大きく違うのは文末に ; が付くか付かないかのあたりです。
実際に使いたいシートの例
実際に使いたいGoogleスプレッドシートは、
こういう感じです。全部で3000行を超えた長いシートです。このスプレッドシートを開くと表示は一番上なので、追加するために毎回3000行以上、下に移動するのが面倒だなと思います(^_^;
Google Apps Scriptを使う準備
Apps Scriptを使うには
ツール>スクリプトエディタ をクリック
一番最初はこのような表示がポップアップされます。一からプロジェクトを作るので、
空のプロジェクト をクリック
こんな感じの表示になります。ここにApps Scriptを記述していくことになります。
とりあえず 保存 をクリックして
空のプロジェクトを
適当な名前にしてOKをクリックして保存しておきます。
Google Apps Scirptでスプレッドシートを開いたときに一番下の行に移動する
ということでGoole Apps Scriptでこのスプレッドシートを開いたときに一番下の行に移動するようにしてみます。
まず、スプレッドシートを開いたとき実行する関数を作ります
function onOpen() { }
onOpenというトリガーです。これはオープンしたときにこの関数を通りますので、ここに行いたい処理を記述しておけばオープンしたときに実行されます。
参照:https://developers.google.com/apps-script/guides/triggers/
ということで行の最後に移動する処理を追加しました。
function onOpen() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); SpreadsheetApp.getActiveSheet().setActiveSelection("A" + sheet.getLastRow()); }
1行目で sheet という変数に現在表示されているシートを取得します。
2行目で現在のシートの選択されているセルを A列の最終行(sheet.getLastRow())に位置づけます。
ここまで書いたら保存します。
一旦シートを閉じて
ダブルクリックして開きます。
開くと、
このように最終行に位置していました!
Excelと関数は似てはいますが形式を指定して保存ではダメでした
GoogleスプレッドシートとExcelはいままで 形式を指定して保存 すればスプレッドシートを簡単にExcelファイルにすることができました。
もしや…と淡い期待を抱いたのですが、
形式を指定して保存 のところに xlsx の形式しか表示されていないので「やっぱりだめかー」と思いました。ExcelでVBAを使ったExcelファイルは Excelマクロ有効ブック .xlsm で保存しているからです。ダメ元でxlsxで保存しましたがやはりシート部分しか入っていませんでした(^_^;。
Excelで同じようにしたい場合も簡単です。
開発タブ Visual Bacic をクリックして、
シートをダブルクリックし、
オブジェクト で Worksheet を選択
プロシージャ で Activate を選択して
Private Sub Worksheet_Activate() Range("A1").Select Selection.End(xlDown).Select End Sub
A1セルを選択してから、Selection.End(xlDown).Select という、その列の一番最後のセルを選択する処理を書きます。これでシートがアクティブになったとき(オープンしたときやシートが切り替えで表示されたとき)に一番下のセルに移動します。
Excelには マクロの記録 というものがあり、記録しておくとVBAのコードとして記録してくれるので、このように自分でコードを書くときに調べなくても、どのようにコードを書けばいいかわかるのでとても便利です。Apps Scriptには調べたのですが同じような機能がないようでそれがちょっと残念でした。
おまけ:Apps Scriptを書かなくても(^_^;いやしかし…Apps Scriptが書けるようになったから良しとします
Excelで最終行に移動するということを調べていて ctrl + ↓ で最終行に移動できるということを知り、マクロの記録でコードもわかりました。
そして上の項まで書き終えて 「……… あれ? Googleスプレッドシートもそれで移動できるんじゃない?」と気がついたのでした。
そして ctrl + ↓ をやってみると………… 最終行に移動しました!!
ということで、今回Apps Scriptを書いて最終行に移動するという事をしましたが、キー操作だけで簡単に移動できることがわかってしまいました。
とはいえ、毎回押すよりは自動的に移動した方がいいし、本当はもっと行があって(このシートには先の日付の記入も本来はある)現在の日にちに近い行に移動したいと思っています。なので今度はApps Scriptを使って「現在の日付に近い行に移動する」ということを実現したいと思ってます。
Apps Scriptが書けるようになって色々楽しいことができそうです。
コメント
コメント一覧 (4件)
こんにちは、
スプレットシートを例のように使う用途が出てきてしまいました。
一番下ではなく、今日の日付へジャンプするにはどのようなスプリクトを組めばよいのか公開していただけませんか?
無二斎さん、おはようございます。 今のところ今日の日付へジャンプする記事を書く予定はありませんが、「Google Apps Scriptでスプレッドシートを開いたとき今月のセルに移動」←これで今日の日付ではないですが、今月の行にジャンプする記事を書いています。なにかの参考になればと思います。
ありがとうございます。試してみます。
兎本さま
まさに「現在の日付に近い行に移動する」スクリプトを探していてたどり着きました。
なかなか難しいと思いますが、そんな機能ができたら良いですね。
記事がアップされる日を心待ちにしております。