3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

はじめての記事投稿

スプレッドシートで所得税を計算するための自作関数(GAS)

Last updated at Posted at 2023-07-02

概要

スプレッドシート上で簡単に所得税等を計算したかったのでGoogleAppsScriptで自作関数を作りました。

2023-07-02時点で私が確認した情報をもとにしています。
各種税率などは頻繁に改正されているようなので、あくまで参考情報としてご活用ください。

使い方

  1. 適当なスプレッドシートを開きます。

  2. スプレッドシート上段で、"拡張機能" > "Apps Script"を選択します。
    スクリーンショット 2023-07-02 16.52.44.png

    このような画面が開きます。
    スクリーンショット 2023-07-02 16.57.20.png

  3. 適当にプロジェクトの名前をつけます
    スクリーンショット 2023-07-02 16.56.09.png

  4. 下に示すコード一覧の中から利用したい関数をコピペしてください。
    スクリーンショット 2023-07-02 16.59.22.png

  5. プロジェクトを保存してスプレッドシートに戻ってください。

  6. スプレッドシート上で先程コピペした関数が使えるようになります。

    スクリーンショット 2023-07-02 17.01.58.png

注意

元々用意されている関数(SUM()など)と違って、関数のレコメンドは出てきません。

スクリーンショット 2023-07-02 17.04.00.png

スクリーンショット 2023-07-02 17.05.03.png

コード一覧

入出力はすべて年額です。

課税所得から住民税を計算

// 課税所得から所得税を計算
// 課税所得は所得税と住民税で変わってくるためbasicDeductionDifferenceで調整
function calculateResidentTax(taxableIncome){
  // 住民税率
  var residentTaxRate = 0.10;

  // 均等割額
  var equalDivision = 5000;

  // 住民税と所得税の基礎控除の差
  var basicDeductionDifference = 50000;

  var residentTax = (taxableIncome + basicDeductionDifference)*residentTaxRate + equalDivision;

  return residentTax;

}

課税所得から所得税を計算

// 課税所得(円)から所得税(円)を計算
// 入力:課税所得
// 出力:所得税額
function calculateIncomeTax(taxableIncome) {
  // 課税所得金額に対する税率と控除額のテーブル(2023年度時点)
  // https://www.nta.go.jp/taxes/shiraberu/taxanswer/shotoku/2260.htm
  var taxTable = [
    { range: [0, 1950000], rate: 0.05, deduction: 0 },
    { range: [1950000, 3300000], rate: 0.1, deduction: 97500 },
    { range: [3300000, 6950000], rate: 0.2, deduction: 427500 },
    { range: [6950000, 9000000], rate: 0.23, deduction: 636000 },
    { range: [9000000, 18000000], rate: 0.33, deduction: 1536000 },
    { range: [18000000, 40000000], rate: 0.4, deduction: 2796000 },
    { range: [40000000, Infinity], rate: 0.45, deduction: 4796000 },
  ];

  var incomeTax = 0;

  // 課税所得金額に対する税率と控除額を適用して所得税を計算
  for (var i = 0; i < taxTable.length; i++) {
    var taxRange = taxTable[i].range;
    var taxRate = taxTable[i].rate;
    var taxDeduction = taxTable[i].deduction;

    if (taxableIncome >= taxRange[0] && taxableIncome <= taxRange[1]) {
      incomeTax = (taxableIncome * taxRate) - taxDeduction;
      break;
    }
  }

  return incomeTax;
}

給与収入から課税所得金額を計算

// 給与収入から課税所得金額を計算する関数
// 入力 : 給与収入(年)、社会保険料(年)、生命保険料(年)、地震保険料(年)
// 出力 : 課税所得金額
function calculateTaxableIncome(annualIncome, socialInsurancePremium, lifeInsurancePremium, earthquakeInsurancePremium, numberOfDependents) {
  // 給与所得
  var employmentIncome = annualIncome - calculateSalaryDeduction(annualIncome);

  // 所得控除
  var incomeDeduction = calculateIncomeDeduction(socialInsurancePremium, lifeInsurancePremium, earthquakeInsurancePremium, numberOfDependents);

  // 課税所得
  var taxableIncome = employmentIncome - incomeDeduction

  return taxableIncome;
}

給与収入から給与所得控除額を計算


// 給与所得控除を計算する関数
// 入力:給与収入
// 出力:給与所得控除額
function calculateSalaryDeduction(salaryIncome) {
  // 所得控除額の上限と階層別の所得控除額(2023年度時点)
  // https://www.nta.go.jp/taxes/shiraberu/taxanswer/shotoku/1410.htm
  const deductionTable = [
    { range: [0, 1625000],        rate: 0.0, const_deduction: 550000},
    { range: [1625000, 1800000],  rate: 0.4, const_deduction: -100000},
    { range: [1800000, 3600000],  rate: 0.3, const_deduction: 80000},
    { range: [3600000, 6600000],  rate: 0.2, const_deduction: 440000},
    { range: [6600000, 8500000],  rate: 0.1, const_deduction: 1100000},
    { range: [8500000, Infinity], rate: 0.0, const_deduction: 1950000 }
  ];
  
  let salaryDeduction = 0;
  
  // 給与所得控除額の計算
  for (var i = 0; i < deductionTable.length; i++) {
    var deductionRange = deductionTable[i].range;
    var deductionRate = deductionTable[i].rate;
    var deductionConstDeduction = deductionTable[i].const_deduction;

    if (salaryIncome >= deductionRange[0] && salaryIncome <= deductionRange[1]) {
      salaryDeduction = (salaryIncome * deductionRate) + deductionConstDeduction;
      break;
    }
  }
  return salaryDeduction;
}

各種条件から所得控除額を計算

社会保険料控除、生命保険控除、地震保険控除、扶養控除のみを考慮に入れています。
その他にも所得控除の項目がありますが、私は直近で関係なかったため実装しませんでした。

// 各種保険料、扶養家族人数から所得控除額(年額)を計算
// 入力はすべて年額
function calculateIncomeDeduction(socialInsuarncePremium, lifeInsurancePremium, earthquakeInsurancePremium, numberOfDependents) {
  // 基礎控除(合計所得が2400万円以下と仮定)
  var baseDeduction = 480000;

  // 社会保険料控除
  var socialInsuarnceDeduction =  socialInsuarncePremium;

  // 生命保険料控除
  var lifeInsuranceDeduction = calculateLifeInsuranceDeduction(lifeInsurancePremium);

  // 地震保険料控除
  var earthquakeInsuranceDeduction = calculateEarthquakeInsuranceDeduction(earthquakeInsurancePremium);

  // 配偶者控除

  // 扶養控除(一般)
  var dependentDeductionBase = 380000;
  var dependentDeduction = dependentDeductionBase * numberOfDependents;
  

  // 所得控除
  var incomeDeduction = 
  baseDeduction + socialInsuarnceDeduction + lifeInsuranceDeduction + earthquakeInsuranceDeduction + dependentDeduction;

  return incomeDeduction;
}

給与収入から社会保険料を計算

// 給与収入から社会保険料(年額)を計算
// 社会保険料 = 健康保険料 + 介護保険料 + 厚生年金保険料 + 雇用保険料
// 入力 : 給与収入(年額), 年齢(介護保険料の有無に関わる)
// 出力 : 社会保険料(年額)
function calculateSocialInsurancePremium(annualIncome, age) {
  // 健康保険料の計算 https://www.kyoukaikenpo.or.jp/~/media/Files/shared/hokenryouritu/r4/ippan/r40223aichi.pdf

  // 標準報酬月額(給与収入を12で割る形で概算
  var standardSalary = annualIncome/12;

  // 健康保険料(月額)の計算
  var healthInsuranceRate = 0.0993;
  var healthInsurancePremium = standardSalary * healthInsuranceRate / 2 ; // 労使折半
  
  // 厚生年金保険料(月額)の計算 健康保険料pdf参照
  var pensionInsuranceRate = 0.1830;
  var pensionInsurancePremium = standardSalary * pensionInsuranceRate / 2 ; // 労使折半

  // 雇用保険料(月額)の計算 https://www.mhlw.go.jp/content/001050206.pdf
  var employmentInsuranceRate = 0.006;
  var employmentInsurancePremium = standardSalary * employmentInsuranceRate;

  // 介護保険料(月額)の計算
  var careInsuranceRate = 0.0164;
  var careInsurancePremium = 0;
  if (age >= 40) {
    var careInsurancePremium = standardSalary * careInsuranceRate;
  }

  // 社会保険料(月額)
  var socialInsurancePremium = healthInsurancePremium + pensionInsurancePremium + employmentInsurancePremium + careInsurancePremium

  // 社会保険料(年額)
  var socialInsuarncePremiumYear = socialInsurancePremium * 12;

  return socialInsuarncePremiumYear;
}

生命保険料から生命保険料控除額を計算

// 生命保険料控除を計算
function calculateLifeInsuranceDeduction(lifeInsurancePremium){
  // 生命保険料控除
  var lifeInsuranceDeduction = 0;
  if (lifeInsurancePremium < 20000){
    lifeInsuranceDeduction = lifeInsurancePremium;
  } else if (lifeInsurancePremium >= 20000 && lifeInsurancePremium < 40000) {
    lifeInsuranceDeduction = lifeInsurancePremium*0.5 + 10000;
  } else if (lifeInsurancePremium >= 40000 && lifeInsurancePremium < 80000) {
    lifeInsuranceDeduction = lifeInsurancePremium*0.25 + 20000;
  } else {
    lifeInsuranceDeduction = 40000;
  }

  return lifeInsuranceDeduction;
}

地震保険料から地震保険料控除を計算

// 地震保険料控除を計算
function calculateEarthquakeInsuranceDeduction(earthquakeInsurancePremium){
  // 地震保険料控除 
  // https://www.nta.go.jp/taxes/shiraberu/taxanswer/shotoku/1145.htm
  var earthquakeInsuranceDeduction = 0;
  if (earthquakeInsurancePremium < 50000){
    earthquakeInsuranceDeduction = earthquakeInsurancePremium;
  } else {
    earthquakeInsuranceDeduction = 50000;
  }

  return earthquakeInsuranceDeduction;
}

参考にさせていただいた記事・サイト

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?