第3章 ケーススタディ:月次の売上表を整える ・ MISSION 12
ミッション12:自分のメニューから動かす(onOpen)
お題
スプレッドシートを開いたら「月次処理」というメニューが出て、「大口を判定」で markLarge が動くようにしよう。保存したら、ブラウザの再読み込み(F5)で開き直し、メニューから実行する。
10月の売上 - Google スプレッドシート
10月の売上
ファイル編集表示挿入表示形式データツールヘルプ
A1fx日付
A
B
C
D
E
1
日付
担当
取引先
金額
区分
2
10/1
佐藤
青葉商事
85000
3
10/2
鈴木
東西物産
150000
4
10/6
高橋
北斗工業
42000
5
10/8
佐藤
南星堂
100000
6
10/14
鈴木
青葉商事
230000
7
10/20
高橋
東西物産
67000
8
10/27
佐藤
北斗工業
98000
9
10
練習のため、実行するたびに表は最初の状態に戻ってから動きます(本物のスプレッドシートでは戻りません。スクリプトの変更は Ctrl+Z で戻せることもありますが、まとめては戻せません)。
Apps Script無題のプロジェクトデプロイ ▾
ファイル +
コード.gs
function onOpen() {
SpreadsheetApp.getUi()
.('月次処理')
.addItem('大口を判定', '')
.();
}
function markLarge() {
const sheet = SpreadsheetApp.getActiveSheet();
const lastRow = sheet.getLastRow();
const amounts = sheet.getRange(2, 4, lastRow - 1, 1).getValues();
const labels = amounts.map((row) => [row[0] >= 100000 ? '大口' : '']);
sheet.getRange(2, 5, labels.length, 1).setValues(labels);
}
Ctrl+S: 保存 ・ Ctrl+R: 実行(エディタ) ・ F5: 開き直す
第3章 ・ MISSION 12
自分のメニューから動かす(onOpen)
スプレッドシートを開いたら「月次処理」というメニューが出て、「大口を判定」で markLarge が動くようにしよう。保存したら、ブラウザの再読み込み(F5)で開き直し、メニューから実行する。
A
B
C
D
E
1
日付
担当
取引先
金額
区分
2
10/1
佐藤
青葉商事
85000
3
10/2
鈴木
東西物産
150000
4
10/6
高橋
北斗工業
42000
5
10/8
佐藤
南星堂
100000
6
10/14
鈴木
青葉商事
230000
7
10/20
高橋
東西物産
67000
8
10/27
佐藤
北斗工業
98000
9
10
A
B
C
D
E
1
日付
担当
取引先
金額
区分
2
10/1
佐藤
青葉商事
85000
3
10/2
鈴木
東西物産
150000
大口
4
10/6
高橋
北斗工業
42000
5
10/8
佐藤
南星堂
100000
大口
6
10/14
鈴木
青葉商事
230000
大口
7
10/20
高橋
東西物産
67000
8
10/27
佐藤
北斗工業
98000
9
10
コードの読み方
- function onOpen() {
- スプレッドシートを開いたときに自動で動く関数。名前を変えると動かない。
- SpreadsheetApp.getUi().createMenu('月次処理')
- 画面(Ui)に「月次処理」というメニューを作る。
- .addItem('大口を判定', 'markLarge')
- 項目を足す。押すと markLarge という関数が動く。
- .addToUi();
- できたメニューをメニューバーに出す。
onOpen という名前の関数は、スプレッドシートを開いたときに自動で動く。ここでメニューを足しておけば、Apps Script を開かない人でもメニューから処理を動かせる。チームで使うシートに向いている。
GAS の始め方とよく使う書き方は、記事にまとめています。GAS とは? 始め方とよく使う書き方
書いたコードは、このページの中の隔離した場所で動きます。ページの外やほかのサイトには届きません。
※ Google スプレッドシートと Apps Script の挙動を模擬的に表現したものであり、本来の挙動と一部異なる可能性があります。
※ Google スプレッドシートは Google LLC の商標です。当サイトは Google とは関係ありません。