② コードの作成
スプレッドシートの「ツール」→「スクリプト エディタ」からスクリプトファイルを作成します。コードは以下の通りです。
function depreciableAssets() {
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getSheetByName("減価償却資産リスト");
var lastRow = sheet.getLastRow();
var num = sheet.getRange(lastRow, 1).getValue(); //管理番号
var name = sheet.getRange(lastRow, 2).getValue(); //資産名称
var acc = sheet.getRange(lastRow, 3).getValue(); //勘定科目
var date = sheet.getRange(lastRow, 4).getValue(); //取得年月日
var year = Utilities.formatDate(date, "JST", "yyyy"); //取得年
var month = Utilities.formatDate(date, "JST", "MM"); //取得月
var life = sheet.getRange(lastRow, 5).getValue(); //耐用年数
var ratio = sheet.getRange(lastRow, 6).getValue(); //事業専用割合
var qty = sheet.getRange(lastRow, 7).getValue(); //数量
var price = sheet.getRange(lastRow, 8).getValue(); //単価
var depreciation = qty * price; //取得価格(償却費)
var rate = "=VLOOKUP(E" + lastRow + ",'参照'!$A$2:$B$100,2,FALSE)"; //償却率
var expense = depreciation * ratio; //経費算入額
var months = 13 - month; //初年償却月数
sheet.getRange(lastRow, 9).setValue(depreciation);
sheet.getRange(lastRow, 10).setValue(rate);
sheet.getRange(lastRow, 11).setValue(expense);
sheet.getRange(lastRow, 12).setValue(months);
rate = sheet.getRange(lastRow, 10).getValue();
spreadsheet.insertSheet(num + name);
var newSheet = spreadsheet.getSheetByName(num + name);
newSheet.getRange(1, 1).setValue("管理番号");
newSheet.getRange(1, 1).setBackground("#d9ead3");
newSheet.getRange(1, 2).setValue(num);
newSheet.getRange(1, 1, 1, 2).setBorder(true, true, true, true, true, false);
newSheet.getRange(3, 1).setValue("資産名称");
newSheet.getRange(3, 1).setBackground("#d9ead3");
newSheet.getRange(3, 2).setValue(name);
newSheet.getRange(4, 1).setValue("勘定科目");
newSheet.getRange(4, 1).setBackground("#d9ead3");
newSheet.getRange(4, 2).setValue(acc);
newSheet.getRange(3, 3).setValue("取得年月日");
newSheet.getRange(3, 3).setBackground("#d9ead3");
newSheet.getRange(3, 4).setValue(date);
newSheet.getRange(4, 3).setValue("耐用年数");
newSheet.getRange(4, 3).setBackground("#d9ead3");
newSheet.getRange(4, 4).setValue(life);
newSheet.getRange(3, 5).setValue("事業専用割合");
newSheet.getRange(3, 5).setBackground("#d9ead3");
newSheet.getRange(3, 6).setValue(ratio);
newSheet.getRange(3, 6).setNumberFormat("0%");
newSheet.getRange(4, 5).setValue("償却率");
newSheet.getRange(4, 5).setBackground("#d9ead3");
newSheet.getRange(4, 6).setValue(rate);
newSheet.getRange(4, 6).setNumberFormat("0.000");
newSheet.getRange(3, 1, 2, 6).setBorder(true, true, true, true, true, true);
newSheet.getRange(6, 1).setValue("経過年数");
newSheet.getRange(7, 1).setValue("1");
newSheet.getRange(6, 2).setValue("対象年");
newSheet.getRange(7, 2).setValue(year);
newSheet.getRange(6, 3).setValue("数量");
newSheet.getRange(7, 3).setValue(qty);
newSheet.getRange(6, 4).setValue("単価");
newSheet.getRange(7, 4).setValue(price);
newSheet.getRange(7, 4).setNumberFormat("[$¥-411]#,##0");
newSheet.getRange(6, 5).setValue('="取得価格"&CHAR(10)&"(償却費)"');
newSheet.getRange(7, 5).setValue(depreciation);
newSheet.getRange(7, 5).setNumberFormat("[$¥-411]#,##0");
newSheet.getRange(6, 6).setValue("経費算入額");
newSheet.getRange(7, 6).setValue(expense);
newSheet.getRange(7, 6).setNumberFormat("[$¥-411]#,##0");
newSheet.getRange(6, 7).setValue("初年償却月数");
newSheet.getRange(7, 7).setValue(months);
newSheet.getRange(6, 8).setValue('="対象年"&CHAR(10)&"経費算入額"');
newSheet.getRange(7, 8).setValue("=ROUND((F7*F4)*G7/12,0)");
newSheet.getRange(7, 8).setNumberFormat("[$¥-411]#,##0");
newSheet.getRange(6, 9).setValue('="対象年末"&CHAR(10)&"未償却残高"');
newSheet.getRange(7, 9).setValue("=F7-H7");
newSheet.getRange(7, 9).setNumberFormat("[$¥-411]#,##0");
newSheet.getRange(6, 10).setValue("備考");
for(var i = 1; i < 11; i++){
newSheet.getRange(6, i).setBackground("#d9ead3");
newSheet.getRange(6, i).setHorizontalAlignment("center");
}
newSheet.getRange(6, 1, 1, 10).setBorder(true, true, true, true, true, false);
newSheet.getRange(8, 1).setValue("=$A7+1"); //経過年数
newSheet.getRange(8, 2).setValue("=$B7+1"); //対象年
newSheet.getRange(8, 8).setValue("=ROUND(IF((I7-(F7*F4))<=0,(((F7*F4)+(I7-(F7*F4))))-1,(F7*F4)),0)"); //対象年経費算入額
newSheet.getRange(8, 8).setNumberFormat("[$¥-411]#,##0");
newSheet.getRange(8, 9).setValue("=IF((I7-H8)<=0, 1,(I7-H8))"); //対象年末未償却残高
newSheet.getRange(8, 9).setNumberFormat("[$¥-411]#,##0");
newSheet.getRange(7, 1, 1, 10).setBorder(true, true, false, true, true, false);
life = life + 1;
var row1 = 8;
var row2 = 7;
for(var j = 1; j < life; j++){
newSheet.getRange(row1, 1).setValue("=A" + row2 + "+1"); //経過年数
newSheet.getRange(row1, 2).setValue("=B" + row2 + "+1"); //対象年
newSheet.getRange(row1, 8).setValue("=ROUND(IF((I" + row2 + "-(F7*F4))<=0,(((F7*F4)+(I" + row2 + "-(F7*F4))))-1,(F7*F4)),0)"); //対象年経費算入額
newSheet.getRange(row1, 8).setNumberFormat("[$¥-411]#,##0");
newSheet.getRange(row1, 9).setValue("=IF((I" + row2 + "-H" + row1 + ")<=0, 1,(I" + row2 + "-H" + row1 + "))"); //対象年末未償却残高
newSheet.getRange(row1, 9).setNumberFormat("[$¥-411]#,##0");
newSheet.getRange(row1, 1, 1, 10).setBorder(true, true, true, true, true, false);
newSheet.getRange(row1, 1, 1, 10).setBorder(true, null, null, null, null, null, "#000000", SpreadsheetApp.BorderStyle.DOTTED);
if(newSheet.getRange(row1, 9).getValue() == 1){
break;
}
row1 = row1 + 1;
row2 = row2 + 1;
}
newSheet.protect().setWarningOnly(true); //シートの保護
sheet.getRange(lastRow, 13).setValue('=IFERROR(VLOOKUP(YEAR(NOW())-1, INDIRECT(TEXTJOIN("", TRUE,A' + lastRow + ',B' + lastRow + ')&"!$B:$H"), 7,FALSE), 0)');
sheet.getRange(lastRow, 14).setValue('=IFERROR(VLOOKUP(YEAR(NOW())-1, INDIRECT(TEXTJOIN("", TRUE,A' + lastRow + ',B' + lastRow + ')&"!$B:$I"), 8,FALSE), 1)');
sheet.getRange(lastRow, 15).setValue('=IFERROR(VLOOKUP(YEAR(NOW()), INDIRECT(TEXTJOIN("", TRUE,A' + lastRow + ',B' + lastRow + ')&"!$B:$H"), 7,FALSE), 0)');
sheet.getRange(lastRow, 16).setValue('=IFERROR(VLOOKUP(YEAR(NOW()), INDIRECT(TEXTJOIN("", TRUE,A' + lastRow + ',B' + lastRow + ')&"!$B:$I"), 8,FALSE), 1)');
}
まるっとコピペで使えるかと思います。
GASの初回実行時に承認が必要となります。無料のGoogleアカウントの場合「このアプリは確認されていません」というページが表示されます。ここで「安全なページに戻る」をクリックすると実行できませんので、「詳細」→「プロジェクト名(安全ではないページ)に移動」から承認します。