概要
スプレッドシート上で簡単に所得税等を計算したかったのでGoogleAppsScriptで自作関数を作りました。
2023-07-02時点で私が確認した情報をもとにしています。
各種税率などは頻繁に改正されているようなので、あくまで参考情報としてご活用ください。
使い方
-
適当なスプレッドシートを開きます。
-
プロジェクトを保存してスプレッドシートに戻ってください。
-
スプレッドシート上で先程コピペした関数が使えるようになります。
注意
元々用意されている関数(SUM()など)と違って、関数のレコメンドは出てきません。
コード一覧
入出力はすべて年額です。
課税所得から住民税を計算
// 課税所得から所得税を計算
// 課税所得は所得税と住民税で変わってくるため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;
}
参考にさせていただいた記事・サイト