まずは自己紹介から.
- アプリ開発団体jackの まっつんくん です.
- 名古屋大学情報学部コンピュータ科学科知能システム系専攻の3年生です.
- 低レイヤーが好きな人です.最近Ciscoのルーターとアクセスポイントを中古で買いました.(まだ買っただけ)
簿記3級とは.
簿記とは.
以下商工会議所の検定試験より引用.
簿記は、企業規模の大小や業種、業態を問わずに、日々の経営活動を記録・計算・整理して、経営成績と財政状態を明らかにする技能です。
簿記の種類.
実は‼️簿記には色々な種類があるんですよ〜〜!!びっくりですよね💦
まあ,ここで紹介するのはめんどくさいので詳細は各々調べてください.
簿記3級勉強録.
起
ある日,日商簿記3級というものを受験しようと思ったんすよね(唐突).
とりあえず近所の書店でこの書籍を買ってお勉強したんすよね.
承
どうやら簿記には重要な5要素があるんですよね.それぞれ,資産・負債・資本・収益・費用って言うのがあるらしいんすよね.経営状態を表したり財務状態を表したりするらしくて難しいですね.あと借方・貸方のどっちに書くとかあー難しい〜〜〜って感じだったんすよね.そこで思ったんですよ,「簿記3級むずくね」と.モチベもだんだん下がってきてしまった.
転
腐ってもアプリ開発団体jackのメンバー,まっつんくん.あることをよぎりました:「てか簿記の知識を使って独自の帳簿システム作ったら面白くね?簿記3級なんてもう取らなくていいや.」
てかよく情報系じゃないお友達にどんなアプリ作ってんの?って聞かれたときにまともなアプリを紹介できてないなーって思ったんすよ.今まで「競艇予想AI(ほぼ失敗)」,「大学の醜いサイトを見やすくする拡張機能」,「X(旧Twitter)のBot(API有料化に伴い終了)」とかしか作ってなくて,あんまり上手く紹介できてなかったんですよ.じゃあ,みんな知ってるスプレッドシートとかグーグルフォームを上手く利用すればいい感じになるんじゃね?って思ったんすよね.GASを使ってこいつら連携させるcar…
- まずはグーグルフォームを作るか.
- よし,GASを開くか.右上のやつを3点リーダーを押すか.
- プログラミングするか.
const spreadSheet = SpreadsheetApp.openById("俺のID");
/// 科目を追加したいとき↓(注意!!!→順番を間違えたら挙動がバグります!!!)
/// このコードを書き換える
/// スプレッドシートにも科目を加える
/// google formにも加える.
const cintAccountsShift = 5;
const strsAssets = [
"現金", "PayPay", "Meica", "当座預金(愛知銀行)", "当座預金(ゆうちょ)",
"当座預金(楽天)", "立替金", "貸付金", "株(楽天証券)", "株(安藤証券)",
];
const strsLiabilities = [
"事業主借", "借入金",
];
const strsEquity = [
"資本金",
];
const strsExpense = [
"食費", "浪費", "交際費", "研修費",
];
const strsRevenue = [
"給与所得", "雑所得",
];
const strsAccounts = [...strsAssets, ...strsLiabilities, ...strsEquity, ...strsExpense, ...strsRevenue];
function onSubmit(e) {
/// <日付を取得し,シートを特定する.>
let sheetDate;
// 質問の取得
const questions = e.response.getGradableItemResponses();
for (const question of questions) {
const answer = question.getResponse();
Logger.log(answer);
switch(question.getItem().getTitle()) {
case "日付":
sheetDate = answer ?
answer :
e.response.getTimestamp();
break;
default:
break;
}
}
sheetDate = new Date(sheetDate);
const targetSheetName = sheetDate.getFullYear() + "/" + (sheetDate.getMonth() + 1);
/// </日付を取得し,シートを特定する.>
/// <シートの取得>
// targetSheetName = sheetDate;// e.response.getTimestamp(); // 存在を確認するシート名
const sourceSheetName = 'template'; // コピー元のシート名
const targetSheet = spreadSheet.getSheetByName(targetSheetName);
if (!targetSheet) {
// ターゲットシートが存在しない場合、コピー元のシートをコピーして新しいシートを作成
const sourceSheet = spreadSheet.getSheetByName(sourceSheetName);
if (sourceSheet) {
const newSheet = sourceSheet.copyTo(spreadSheet);
newSheet.setName(targetSheetName);
Logger.log('新しいシートが作成されました。');
} else {
Logger.log('コピー元のシートが見つかりません。');
}
} else {
Logger.log('ターゲットシートは既に存在します。');
}
const sheet = targetSheet
/// </シートの取得>
// const sheet = spreadSheet.getSheetByName("2023/8");
// 入力する行を取得
const rowTotalPast = sheet.getLastRow();
sheet.insertRowBefore(rowTotalPast);
const row = rowTotalPast;
let price;
for (const question of questions) {
const answer = question.getResponse();
switch(question.getItem().getTitle()) {
case "金額":
sheet.getRange(row, 3).setValue(answer);
price = answer;
break;
case "勘定科目":
// sheet.getRange(row, 1).setValue(e.namedValues["勘定科目 [現金]"]);
for (let i=0; i<strsAccounts.length; i++) {
// sheet.getRange(row+1, 1).setValue(answer[5]);
// 勘定科目として入力があったとき
if(answer[i]) {
// 貸方 xor 貸方科目の増加を右に書く科目の時
((answer[i] === "貸方") ^
((strsAssets.length <= i && i < strsAssets.length + strsLiabilities.length + strsEquity.length) ||
(strsAssets.length + strsLiabilities.length + strsEquity.length + strsExpense.length <= i && i < strsAssets.length + strsLiabilities.length + strsEquity.length + strsExpense.length + strsRevenue.length))) ?
sheet.getRange(row, i+cintAccountsShift).setValue(-price) :
sheet.getRange(row, i+cintAccountsShift).setValue(price);
};
};
break;
case "コメント":
sheet.getRange(row, 4).setValue(answer);
break;
case "日付":
answer ?
sheet.getRange(row, 2).setValue(answer) :
sheet.getRange(row, 2).setValue(e.response.getTimestamp());
break;
default:
sheet.getRange(row, 1).setValue("defaultが実行されました.");
break;
}
}
}
- 実際に試してみるか.
- 今こんな感じで何も記入されていないですね.
- 今日のお昼に食べた大学生今日のバランスセット(550円)を登録しましょう.
- ちゃんと記録されていますね.
結
上手くプログラムは動作しているけど,コードとかが汚すぎる.コメントで書いたけど,拡張性が終わってる.でも,GASの機能を上手く使えていないせいで手続きちっくになってしまった.GASは自分の性にあって無いので,これからスプレッドシートとかを使ったアプリを作るときは極力GASを使わないようにしようと思ったね.
最後に,筆者が今回簿記3級etcのお勉強をお勉強して学んだことは以下のことです.
- GASがゴミすぎる.
- GASはファイル分割しても,ファイルが読み込まれる順番を意識しなくてはならない.
- GASはJavaScriptの記法が一部使えない.
- GASはデバッグのためのコンソール出力の確認ステップが手間.
- GASはデバッグ環境と本番環境の切り分けが絶望的に難しい(て言うかできない)
- GASをGitHubで管理するにはサードパーティの拡張機能を入れる必要がある.
- 簿記には5要素を意識するのが重要であり,借方と貸方という概念がある.
皆さんも是非簿記3級etcのお勉強をやってみてください!!
この記事を読み終わっている頃には簿記3級の知識がいい感じについていると思います!!!
P.S.
オススメのYouTubeで活動されている方をここで紹介します.天竜川ナコンさんです!!!!
彼は現実チャンネルというチャンネル名でYouTubeで活動しています!!その中でもオススメの動画を置いておきます.