見出し画像

入金情報振り分け:「繰り返し」と「条件」をつかった事例【GAS】【Googleスプレッドシート】【関数】

本記事での学習

・定型回の繰り返し
・複数の条件(new)
・列の一番下にあるセルの位置を取得(new)

結構アナログな業務

リストにある情報を、人間が目視しやすいように振り分ける作業を想定してみました。正確性と忍耐力のいる業務です。

befor
after

構成について

1.支店・名義を取得する
2.指定の支店を見つける
3.その列の一番下をさがす
4.そこに値を張り付ける
(1-4)を上から順に繰り返す
という構成になります。

「1」⇒ getRange と getValue
「4」⇒ getRange と setValue 
でできそうです。
「繰り返し」も、前回記事のように
for(y=2;y<=11;y++)
{ なんちゃら }
で対応できそうです。

今回のコードです

function myFunction() {	
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();	
	
for(let i = 3; i <= 15; i++) {	
const shiten = sheet.getRange(i, 1).getValue()	
const meigi = sheet.getRange(i, 2).getValue()	
const oosakaRow = sheet.getRange(1, 4).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();	
const hyogoRow = sheet.getRange(1, 5).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();	
const tokyoRow = sheet.getRange(1, 6).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();	
const nagoyaRow = sheet.getRange(1, 7).getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow();	
	
if (shiten == '大阪') {	
sheet.getRange(oosakaRow+1, 4).setValue(meigi)	
}	
else if (shiten == '兵庫') {	
sheet.getRange(hyogoRow+1, 5).setValue(meigi)	
}	
else if (shiten == '東京') {	
sheet.getRange(tokyoRow+1, 6).setValue(meigi)	
}	
else if (shiten == '名古屋') {	
sheet.getRange(nagoyaRow+1, 7).setValue(meigi)	
}	
}	
}	

2.指定の支店を見つける

前回の記事では、関数のMATCHのように、「その数字を探し出す」という手法を取りました。
それでもいいのですが、今回は初めから想定が決まってますし、量も少ないので、単純な条件設定で対応してみました。
大阪の時 ⇒ こうする
兵庫の時 ⇒ こうする
東京の時 ⇒ こうする
名古屋の時 ⇒ こうする
という条件分岐です。

if,else if

if (【支店が】 == '大阪') {
sheet.getRange(【一番下】, 4).setValue(【名義】)
}
else if (shiten == '兵庫') {
sheet.getRange(【一番下】, 5).setValue(【名義】)
}
else if (shiten == '東京') {
sheet.getRange(【一番下】, 6).setValue(【名義】)
}
else if (shiten == '名古屋') {
sheet.getRange(【一番下】, 7).setValue(【名義】)
}
}
このような表現で簡素化して条件分けしました。

3.その列の一番下をさがす

こちらはとりあえずは覚えましょう。
const oosakaRow =
sheet.getRange(1,4) :(1,4)=「D1」を起点に、
.getNextDataCell :次にデータの入ったセルを探す
(SpreadsheetApp.Direction.DOWN):探す方向は下向け
.getRow(); :そのセルの行番号を取得する

という意味合いです。ですので、ここで取得できる値は、「入力したいセルの一つ上」となりますね。
先ほどのif else にいれている「一番下」の指定には、+1をする必要があります。

まとめ

「一番下」を自動取得する。
この方法を学ぶと、できることの範囲が一気に広がります。

基礎編なので、繰り返しの範囲も「3-15」と規定してます。
実用だと上限があるとつかいにくいですよね。

今回の基本を発展させれば
1.名義以外にも金額や日付も入れたい
  ⇒ 項目追加で可能
2.支店を増やしても対応できるようにする
  ⇒ 前回の「serch」のようなプログラムを組み込む
3.繰返し範囲を入力した範囲にする
  ⇒ 方法はあります。また今度
4.支店ごとにシートを分ける
  ⇒ 方法はあります。また今度
のように、拡張性を上げることもできます。

今回のシートです。
https://docs.google.com/spreadsheets/d/1Rz5o5OLB4xvYZ33DcjyvCul7h3qf3L-TXy-FEFmnczk/edit#gid=1017609504






どんな記事ならサポートしてみようと思えるか、ご要望ありましたら教えてくださいね。