sironekotoroの日記

Perl で楽をしたい

GASでジャパンネット銀行の振込み手数料判定カスタム関数を作った

ネタがどんどん経理に傾いてきてますが、そういう時期なんですね。

さて、ジャパンネット銀行という銀行があります。2000年に開業した日本初のネット専業銀行です。

法人口座の手数料は以下となっています。

www.japannetbank.co.jp

  • ジャパンネット銀行の口座宛であれば金額にかかわらず55円

  • 他行の口座宛であれば、30,000円未満は176円、30,000円以上だと275円

これを Google Apps Script でカスタム関数にしてみました。

カスタム関数

カスタム関数とは、こういうものです。

例えば、2つのセルの合計を求める時には sum 関数というものを使います。

=sum(A1, A2)

この sum のような関数を自分で作ることができるのが Google Apps Script のカスタム関数です。

tonari-it.com

ジャパンネット銀行手数料関数

ジャパンネット銀行の手数料を計算する時、判定の材料は2つです

Perlだったら、引数を2つ取るサブルーチンにしてこんな感じにしますかねー

sub japannet_fee {
    my ( $bank, $remittance ) = @_;
    if ( $bank eq 'japannet' ) {
        return 55;
    }

    if ( $remittance < 30000 ) {
        return 176;
    }
    else {
        return 275;
    }
}

では、これをそのままカスタム関数にしてみます。

Google Apps Script はJavaScriptなので・・・と言ってもあまりPerlと変わらないっすね。

function japanNetBankFee(bankName, num) {
  let fee = 0;

  if (bankName === "ジャパンネット") {
    return 55;
  }

  if (num < 30000) {
    fee = 176;
  } else {
    fee = 275;
  }

  return fee;
}

ちょっと手直し

コード中に直接、振込み手数料の金額を書いています。

このような数字はマジックナンバーと呼ばれ、避けるべきものとして知られています。

ja.wikipedia.org

というわけで、定数に置き換えていきましょう。ついでに、ドキュメンテーションコメントも追加します。

/**
 * ジャパンネット銀行の手数料(同行宛:55円, 他行宛:30000円未満176円、30000円以上275円)
 *
 * @param {string} 銀行名
 * @param {num} 振込額
 * @return {num} 振込手数料
 * @customfunction
 */
function japanNetBankFeeV2(bankName, num) {
  const FeesBetweenJNB = 55;
  const FeeOfLessThan30000 = 176;
  const FeeOf30000OrMore = 275;

  let fee = 0;

  if (bankName === "ジャパンネット") {
    return FeesBetweenJNB;
  }

  if (num < 30000) {
    fee = FeeOfLessThan30000;
  } else {
    fee = FeeOf30000OrMore;
  }

  return fee;
}

さらに、この関数は2つの仕事を持っているのでそれを切り出して・・・って程でもないので、今回はここまで!とします。

f:id:sironekotoro:20200807174818p:plain

f:id:sironekotoro:20200807174921p:plain

補足

来年にはペイペイ銀行になるそうな

nlab.itmedia.co.jp