スプレッドシートの固定というと、スプレッドシートに沢山データが広範囲に渡って入力されているときに特定部分のセルを固定する事で、見出しとなる行やセルの一部を常に表示しておくことで何のデータを表しているのか分かるようにする機能の事です。
エクセルの場合のセルの固定方法は直感でわかりやすいのに、Googleスプレッドシート(以下スプレッドシート)の固定のやり方はチョット分かりにくいと感じるのは私だけでしょうか?
Contents
なぜ分かりにくいのかについて少し考えてみました。
エクセルの場合は:メニューで表示>ウインドウ枠の固定 の3つから選びますね。
固定するセルをアクティブにしてそのセルの上側及び左側を固定する事になります。
スプレッドシートの場合は:メニューの表示>固定 の8つから選びます。
「行なし」、「列なし」というチョット分かりづらい表現がありますが、これは固定解除の時に選ぶものになります。
1行、2行、1列、2列とはアクティブにしたセルの位置とは無関係で、行の場合は1つ目のセルの下か2つ目のセルの下かという事で、列も同じ様にセルの1つ目の右か2つ目の右かという事です。
「現在の行まで」「現在の列まで」というのはアクティブにしたセルの下側あるいは右側になるんです。
エクセルになれている場合はコレをよく分からないまま何となく使っていると、積み重ねで時間のロスになっているかもしれませんよ。
この際まとまった時間を少しだけ費やしキチント理解してから使うようにしてみましょう。
空白でもいいですが、固定されたあとにデータがある程度入っていないと固定した意味が確認しにくいので適当なデータを用意してから固定をしてみます。
一つ適当なデータとしては例えば統計局の消費者物価指数をエクセルでダウンロードできるので、そのダウンロードしたものをスプレッドシートで開いてみましょう。
統計表1-1 中分類指数(全国)のテータをダウンロードします。
スプレッドシートでインポートし読み込みます。
インポートのやり方はメニューのファイル>インポートを選び、ダウンロードしたファイルのアップロードで読み込みます。
アップロードしたデータを読み込んだら、固定したいようにメニューの表示>固定から行、列それぞれあるいは両方固定してみます。
用意したデータは行、列ともに固定されているのでいったん固定を解除します。
解除方法はメニューの表示>固定から行なし、列なしをそれぞれ順番に行えば解除されます。
次に、セルの位置に基づいて固定する場合は固定される位置はスプレッドシートの場合は指定したセルの下と右の境界線になるので、そのようにセルを配置します。
それ以外はセルの位置に基づかない場合で行、列それぞれ固定を1行にするか2列にするかで組み合わせとしては、
と全部で8通りあります。
エクセルで私がよく使うのがセルを選び行も列も一度に固定する方法ですが、スプレッドシートでは一度にはできないようです。
これを少し効率化する為に、マクロ作成を試みてみます。
メニューでツール>マクロ>マクロを記録 を選択。
マクロはスクリプトエディターのマクロ.gs として保存されます。
コードを表示すると以下のようになります。
マクロ記録を絶対参照にて始めて、
最初に例えばA1セルをアクティベートさせ、それぞれ現在の行および列で固定を行った場合のマクロ記録は以下のようになります。
スプレッドシートにて例えばA1セルをアクティベートさせた後にマクロ記録を相対参照にて始めて、
最初にB5セルをアクティベートさせ、それぞれ現在の行および列で固定を行った場合のマクロ記録は以下のようになります。
のようになっています。
この中の
spreadsheet.getActiveSheet().setFrozenRows(x);
spreadsheet.getActiveSheet().setFrozenColumns(y);
が列および行をそれぞれ固定するコマンドスクリプトであります。
x, y は固定するセルの位置に対応するセルの位置情報であり、例えばA1セルならxは1、yは1
B5セルならxは5、yは2となります。
function myFunction() {
} と共に{…}の...部分には
自動作成されたマクロでは目的を達成できないので、その作成されたスクリプトを修正していきます。
修正したマクロは以下の通りです。
function kotei(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var cel = SpreadsheetApp.getCurrentCell();
var row = cel.getRow();
var col = cel.getColumn();
ss.setFrozenRows(row-1);
ss.setFrozenColumns(col-1);
}
上から順番に解説します。
0. 走らせるGASプログラム名を kotei() として定義します。この名前はなんでもOK!
1. アクティブなスプレッドシートを変数ssとして定義し取得します。
2. アクティブなセルを変数celとして定義し取得します。
3. 列の位置をrowとして定義し取得します。
4. 行の位置をcolとして定義し取得します。
5. rowの位置情報に基づき列を固定します。行の位置をエクセルと同じにする為にマイナス1で調整。
6. colの位置情報に基づき行を固定します。列の位置をエクセルと同じにする為にマイナス1で調整。
ポイントは列や行の位置情報をいかにして取り出すかです。
一つその手助けになるのは、実行ログ情報を表示させることにあります。
以下のようなスクリプトを行に加えて実行ログ情報を表示させてみて下さい。
実際成功するまでは、手順1から3の次に、失敗したら頭を悩ませながら修正する手順4があります。
手順1 >>手順2 >手順3 >手順4 >手順2.... のループ作業です。
実行方法としては3つあり、
1.GASページにて実行する。
2. スプレッドシートにおいてメニューのツール>マクロ 作成した名前を選択する。
3. ショートカットキーとして、Ctrl+Shift+Alt+数字 を設定したならば、その組み合わせキーで実行する。
1の場合は、スプレッドシートで反映させるときの状況が見えないので、2あるいは3で実行するのがいいのです。
ベストな固定方法は、もちろんシート上にてセルをクリックしアクティブにして3のショートカットキーボードで実行。
スプレッドシートでもエクセルと同じように簡単にできるようになったでしょうか?
同じように記録したマクロを別のマクロ名として登録しそのショートカットキーも登録します。
修正するのは、
ss.setFrozenRows(0);
ss.setFrozenColumns(0);
のように括弧の中を0にするだけ。
作成して実行してみましょう。
答えは下の方に記しておきます。
ちなみにマクロで記録したスクリプトはスプレッドシートを表示させた状態でメニューから選び実行できますが、スクリプトエディターでスクリプトを記述して作成したものもインポートして登録する事でスプレッドシート側から実行できるようになります。
ショートカットキーもマクロの管理から登録できます。
いかがだったでしょうか?
マクロを使い記録して自動作成されたスクリプトを修正したGASスクリプトでも固定機能を使えるようになったでしょうか!?
固定機能のみでなくとも、色々とより使いやすく便利にする為に動作をスクリプトに反映でき比較的分かりやすいマクロから試してみてくださいね。
コメントフォーム