こんにちは、おかちゃんせんせいです!
前回GAS特集で『カタカナを自動でヘボン式ローマ字に変換するスクリプト』についてお届けしました。
【GAS】カタカナ表記をパスポートでも使えるヘボン式ローマ字に変換するスクリプト今回はぼくの両親からのSOSで解決した内容について、記事にまとめることにしました。
目次
最初の課題は、ExcelデータをGoogleスプレッドシートに移行
両親からのSOSの内容は、初めは「ExcelファイルをGoogleスプレッドシートに変換したい」という話でした。
理由は尋ねると、母親のパソコンではなぜかExcelとして開けないファイルがあるらしく、それは拡張子が.xlsのものだということ。
それなら開けるパソコンで新しいバージョンに変換すれば話は解決だけれど、ネット環境があればどこでも確認できるようにしたいという要望もあったため、Googleスプレッドシートを希望したようだった。
Googleスプレッドシートに移行する方法はいくつかあるけれど、一番手っ取り早いのがただGoogle Driveにファイルをアップロードすること。
GoogleドライブにOffice製品(Excel・Word・PowerPoint)をアップロードして、そのファイルをクリックすると類似アプリが自動的に起動します。
例えば、ExcelならGoogleスプレッドシート、WordならGoogleドキュメント、PowerPointならGoogleスライドに変換されて開きます。
Excelにはあって、Googleスプレッドシートにはない機能
なので、ファイルをアップロードしただけで解決したと思いきや、追加SOSが。
その内容が、
「毎回開くときに前回閉じたセルではなく、先頭セルに移動しちゃうから移動が面倒!」
ということで……。
そうなのです。
Excelでは前回保存したセルの位置情報も保存され、次に開いたときにはそのセルにカーソルが当たった状態で開かれます。
けれど、Googleスプレッドシートの場合は、開いたときには必ず先頭シートの先頭セルにカーソルが当たって表示されます。
場合によってはGoogleスプレッドシートの仕様の方がいい場合もありますが、履歴をどんどん追加していく場合には毎回開くと最初の行に戻ってしまうのは不便です。
GoogleスプレッドシートにExcelと同様の動作をする通常機能はないため、GASでシートを開いたときに自動的にセルが移動するようにスクリプトを組むことにしました。
サンプルコード
今回の要望は、
複数シートについて『A列最終行のセルを選択した状態』にしてほしい
という要望でしたので、スクリプトは下記のようになりました。
function onOpen(){
let sheetArr = ['シート1','シート2','シート3'];
for (let i = 0; i <= sheetArr.length-1; i++){
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName(sheetArr[i]);
let lr = sheet.getLastRow() + 1;
sheet.setActiveSelection("A" + lr);
}
}
このスクリプトはスプレッドシートを開いた際に、指定した複数シートについてA列データのある最終行を選択する処理を繰り返しする、という自動処理を実行するものです。
その処理の関係上、サンプルコードを留意すべき点が2点あります。
まず1点は、最後に表示させたいシートについてです。
上記シートではシート1→シート2→シート3の順番に処理されるので、処理が終わるとシート3のA列最終行のセルにフォーカスが当たった状態となります。
もしシート1が表示された状態にしたい場合には、例えば下記のように一行目を変更すると良いです。
let sheetArr = [‘シート2′,’シート3′,’シート1‘];
もう一点は、最終行についてです。
getLastRowはデータ(値や数式)が入っている最終行を取得する関数のため、Arrayformula関数との相性がものすごく悪いこと。
Arrayformula関数は、その特性上指定行まで自動的に関数が入ります。
なので、例えば8行目までしかデータ入力がしていなくても、関数が100行目まで入っていたらカーソルは101行目に入ってしまいます。
Arrayformula関数を使いたい場合には、関数ではなくデータが入力されている行番号を動的に取得できるように工夫する必要があるでしょう。
今回は地味に要望があるものだと思い、備忘も兼ねて記事に残しました。
この情報が誰かのお役に立てば幸いです。
最後まで読んでいただき、ありがとうございました!