会社や個人事業の日々の現金取引は、現金出納帳に記録しなければいけません。
Excel やスプレッドシートで現金出納帳を作ることはできます。
会社や個人事業は、日々現金の取引があります。この現金の取引は従来は、入出金伝票に手書きで記帳した後、補助簿の現金出納帳に手書きで転記する記録方法が多くとられていました。今は直接会計ソフトに入力する人が多いと思います。また、Excelで作成した現金出納帳に記録したデータを、CSVファイルに加工して会計ソフトに取り込むというやり方もあります。今日は、まず伝票や現金出納帳への手書きの業務をやめたいという方に向けて、Excel で簡単に現金出納帳を作る方法を紹介します。計算に関数は使わず、足し算と引き算のみで作れ... 手書きをやめるための超簡単なExcel(エクセル)現金出納帳の作り方 - My タックスノロジー |
スプレッドシートは、Excel(エクセル)の Web版みたいなものです。Google アカウントさえあれば、Google ドライブの中で無料で使うことができます。Google ドライブへは Google のトップページからアクセスすることができます↓「新規」から「Google スプレッドシート」を選択します。するとこのような↓シートが開きます。パッと見 Excelとそっくりですよね。このスプレッドシートですが、使い勝手も Excel と似ています。さて、今日は Excel(エクセル)で作った現金出納帳をスプレッドシートに取り込んで共有して使う方法を紹介しま... Excel(エクセル)現金出納帳を Google スプレッドシートに取り込んで共有して使う... - My タックスノロジー |
Excel やスプレッドシートへの入力は普通は PC でキーボードを使って行いますが、最近は音声入力も注目されています。
自分でも色々と試してみると、 キーボードでの手入力よりも楽なケースもあると感じています。
今回、PC を開かなくても、スマホに向かって入出金の内容を喋れば登録できる現金出納帳を作ってみましたので、作り方紹介したいと思います!
以下のツール↓ を使っています。
・IFTTT
・Google Assistant
・スプレッドシート
・GAS(Google Apps Script)
それでは行きますね!
なお、後に説明します IFTTT の設定については同業者の方のブログを参考にさせて頂きました。ありがとうございました!
GoogleHome+IFTTT+Googleスプレッドシート&freee。声で経理、レシート入力ができる可能性。
1、音声入力現金出納帳の仕組み
音声入力現金出納帳の使い方
どのような仕組みを作ったのか、まず使い勝手からお話しします。
スマホで Google Assistant を開きます。
そして、例えば店舗の売上 125,400円分の現金入金があった場合
「入金 125,400円 店舗売上」
と3つの単語を少し間を開けて続けざまに喋ります。
すると、まず Google Assitant が「125,400円 店舗売上 を入金として登録しました!」と反応します。
そして、その内容がスプレッドシートの現金出納帳に入金項目として自動的に入ってくるというものです。
出金であれば、最初の一言を「出金」に変えます。
例えば 540円のボールペンを買った場合
「出金 540円 ボールペン」
と Google Assistant に向かって喋れば今度は出金項目として入ってきます。
このようにして、音声入力を行い入力が楽にすることができる可能性があるツールとして作ってみました。
ただ、完ぺきなものではありません。
後で若干手作業で編集する必要があります。
入出金の項目として、音声入力できる項目の数は数字が1つ、テキストが1つという制約があるので
今回は
・数字として「入出金額」
・テキストとして「摘要」
を当てることにしました。
「入出金額」については、かなり正確に読み込んでくれるのでありがたいのですが、他でキーボードによる手作業が必要な部分はあります。
摘要・勘定科目
摘要についてですが、先の例で540円のボールペンを買った場合
「出金 540円 ボールペン」
と「ボールペン」を摘要として入力することをお話ししました。
本来であればボールペンをどこから買ったのかも同時に音声入力できればいいのですが、テキスト入力は1つだけなのでこれについては後で付け足す必要があります。
また、勘定科目については Google Apps Script(GAS)を使って摘要から該当するものを探し出して自動的に表示されるようにていますが、これも全てを自動で表示させることは不可能です。
後で別途入力が必要なところもあります。
摘要の追加・訂正、勘定科目の追加はキーボードで手作業する必要があります。
日付欄の編集
本当は日付も音声入力できたらいいのですが、無理なのでそこは諦めて「入力した日の日付」が現金出納帳に表示されるようにしました。
ですので、お金の入出金があった日に入力する前提で使うものということになります。
なお、後で日付を変更したい場合はスプレッドシート上で日付の欄をダブルクリックすればカレンダーから選ぶことができます。
音声入力現金出納帳の仕組み
さて、音声入力現金出納帳の仕組み(どのようにして喋った内容が現金出納帳に入ってくるのか)をお話しします。
まず、Google Assistant で喋った内容を入出金別にスプレッドシートに読み込みます。
Google Assistant とスプレッドシートの連携には IFTTT を使っています。
なぜ、入出金別にスプレッドシートを分けたかと言うと、1つのシートに入出金をごちゃまぜに読み込むと、後で GAS により現金出納帳に取り込む際に入金か出金かの判断がつかないからです。
さて、次にこのようにして入出金別に別々のスプレッドシート(入金は「入金音声入力」、出金は「出金音声入力」)に読み込んだデータを
GAS を使って「音声入力_現金出納帳」シートに取り込みます。
そして、現金出納帳に読み込んだデータは削除されるようになっています。
なお、後でもお話ししますが GAS によるプログラミングは1分間に1回(時間は変更可能)実行するようにしているので、ほぼ音声入力をした直後にデータが現金出納帳に取り込まれることになります。
2、IFTTT を設定して Google アシスタントによる音声入力をスプレッドシートに取り込む
さて、まず IFTTT を使って Google Assistant とスプレッドシートを連携させる方法についてお話しします。
冒頭でお話ししました、こちらの記事を参考にさせて頂きました。
これは同様の設定を入出金別に2回行う必要があります。
出金の場合を例にあげて説明します。
IFTTT は「if this then that」の略で
「この条件(this)に当てはまる時に、あの操作(that)を行う」
という意味になります。
IFTTT を開き「My Apperets」で右上の「+」を押します。
すると「New Appelet」が開くので「+ this」を選択します。
「Google Assistant」と検索すると出てくるので、選択します。
次に一番下を選択します。音声入力する項目が数字とテキスト両方という意味です。
Google Assistant に向かってどのように喋れば登録されるか設定します。
出金の場合
「出金」→「金額」→「摘要」
の順番に間を空けて喋るように設定するのですが、その場合「出金 # 円 $」のように入力します。
# は数字、$ は文字列を意味します。
次に喋って登録が完了した後に、Google Assistant がどのように反応するか入力します。
「円 $ を出金として登録しました!」と入力します。また、言語は日本語を選択します。
次に「+ that」を選択して、上記の条件に当てはまる場合の動作を設定します。
喋った内容をスプレッドシートに登録するわけですね。
「google sheet」と検索してスプレッドシートを選択します。
「Add row to spreadsheet」を選択します。Google Assistant に喋った内容をスプレッドシートの新しい行に登録するという意味になります。
スプレッドシートのファイル名を決めて入力します。
「出金音声入力」としました。
これで最後に「Finish」を押せば設定完了です。
これで Google Drive の「Google」という名前のフォルダの中にシートができるようになりました。
3、GAS による現金出納帳への入力
さて、次に GAS による現金出納帳への入力についてお話しします。
スプレッドシート現金出納帳
スプレッドシートで現金出納帳を作っておきます。
なお、Excel で作った現金出納帳をスプレッドシートにインポートする方法についてはこちら↓ の記事に書かせて頂きました。
スプレッドシートは、Excel(エクセル)の Web版みたいなものです。Google アカウントさえあれば、Google ドライブの中で無料で使うことができます。Google ドライブへは Google のトップページからアクセスすることができます↓「新規」から「Google スプレッドシート」を選択します。するとこのような↓シートが開きます。パッと見 Excelとそっくりですよね。このスプレッドシートですが、使い勝手も Excel と似ています。さて、今日は Excel(エクセル)で作った現金出納帳をスプレッドシートに取り込んで共有して使う方法を紹介しま... Excel(エクセル)現金出納帳を Google スプレッドシートに取り込んで共有して使う... - My タックスノロジー |
差引残高の行にのみ数式を入れてあります。
これにデータが入るとこんな感じになります↓
なお、現金出納帳の右側に「摘要」と「勘定科目」のリストを作っておきます。
GAS を実行したときに音声入力した摘要に該当する勘定科目を検索して、現金出納帳に書き出します。
すべての摘要を検索することは無理ですが、頻繁に出てくるものをリストアップしておきます。その分の科目がすぐに埋まるだけでも、手作業による科目入力の手間が多少は省けます。
GAS による仕組み
GAS で音声入力したデータを現金出納帳に書き出します。
音声入力した入金データが最初に入るのは Google フォルダの中にある「入金音声入力」ファイルです↓
シート名も「入金音声入力」にしておきます。
また、音声入力した入金データが最初に入るのは「出金音声入力」ファイルです↓
シート名も「出金音声入力」にしておきます。
全GAS コード
GAS コードは「音声入力_現金出納帳」ファイルの中に記述しています。
全コードを以下に示します。
関数名は「Genkin_Suitou」としています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
function Genkin_Suitou() { //音声入力用のスプレッドシートファイル var SpreadSheet_Nyukin = SpreadsheetApp.openByUrl('入金音声入力ファイルの URL'); var SpreadSheet_Syukkin = SpreadsheetApp.openByUrl('出金音声入力ファイルの URL'); //ファイル中のシートを指定 var Sheet_Nyukin_Input = SpreadSheet_Nyukin.getSheetByName("入金音声入力"); var Sheet_Syukkin_Input = SpreadSheet_Syukkin.getSheetByName("出金音声入力"); //現金出納帳のスプレッドシート var SpreadSheet_Genkin = SpreadsheetApp.openByUrl('現金出納帳の URL'); //シートを指定 var Sheet_Genkin = SpreadSheet_Genkin.getSheetByName("現金出納帳"); //音声入力シート内で入力がある最後の行数を取得 var Lastrow_Nyukin_Input = Sheet_Nyukin_Input.getLastRow(); //入金音声入力シート var Lastrow_Syukkin_Input = Sheet_Syukkin_Input.getLastRow(); //出金音声入力シート //現金出納帳の変数 var Start_Row = 7; //現金出納帳の最初の行 var Kamoku_Start_Row = 6; //勘定科目設定用データの最初の行 var Counter = 0; //空白のカウンター var today; //今日の日付 var Kingaku; //入金額 var Tekiyou; //入金の摘要 var Kamoku; //勘定科目 var Tekiyou_Search; //摘要 検索用 var Kamoku_Search; //勘定科目 検索用 var Tekiyou_Num = 10; //検索できる摘要の数 //現金出納帳内で記入のある最後の行数を取得 for(var i = 1; i <= 10000; i++) { var x = Sheet_Genkin.getRange(Start_Row + i - 1, 3).getValues(); if(x==""){ Counter++; if(Counter==5){ var Lastrow_Genkin = Start_Row + i - 1 - 5; break; } }else{ Counter = 0; } } //入金データを現金出納帳に書き出し for(var i = 1; i <= Lastrow_Nyukin_Input; i++) { today = new Date(); //今日の日付 Kingaku = Sheet_Nyukin_Input.getRange(i, 2).getValue(); //入金額 Tekiyou = Sheet_Nyukin_Input.getRange(i, 3).getValue(); //入金の摘要 Kamoku = ""; for(var j = 1; j <= Tekiyou_Num; j++) { Tekiyou_Search = Sheet_Genkin.getRange(j + Kamoku_Start_Row -1, 13).getValue(); Kamoku_Search = Sheet_Genkin.getRange(j + Kamoku_Start_Row -1, 14).getValue(); //摘要から勘定科目を決める if(Tekiyou == Tekiyou_Search){ Kamoku = Kamoku_Search; //Browser.msgBox(Kamoku); break; } } Sheet_Genkin.getRange(i + Lastrow_Genkin, 3).setValue(today); //日付 Sheet_Genkin.getRange(i + Lastrow_Genkin, 4).setValue(Kamoku); //勘定科目 Sheet_Genkin.getRange(i + Lastrow_Genkin, 6).setValue(Kingaku); //入金額を現金出納帳へ入力 Sheet_Genkin.getRange(i + Lastrow_Genkin, 5).setValue(Tekiyou); //入金の摘要を現金出納帳へ入力 } if(Lastrow_Nyukin_Input>0){ Sheet_Nyukin_Input.deleteRows(1, Lastrow_Nyukin_Input); //入金データを削除 } Lastrow_Genkin = Lastrow_Genkin + Lastrow_Nyukin_Input; //出金データを現金出納帳に書き出し for(var i = 1; i <= Lastrow_Syukkin_Input; i++) { today = new Date(); //今日の日付 Kingaku = Sheet_Syukkin_Input.getRange(i, 2).getValue(); //出金額 Tekiyou = Sheet_Syukkin_Input.getRange(i, 3).getValue(); //出金の摘要 Kamoku = ""; for(var j = 1; j <= Tekiyou_Num; j++) { Tekiyou_Search = Sheet_Genkin.getRange(j + Kamoku_Start_Row -1, 13).getValue(); Kamoku_Search = Sheet_Genkin.getRange(j + Kamoku_Start_Row -1, 14).getValue(); //摘要から勘定科目を決める if(Tekiyou == Tekiyou_Search){ Kamoku = Kamoku_Search; break; } } Sheet_Genkin.getRange(i + Lastrow_Genkin, 3).setValue(today); //日付 Sheet_Genkin.getRange(i + Lastrow_Genkin, 4).setValue(Kamoku); //勘定科目 Sheet_Genkin.getRange(i + Lastrow_Genkin, 7).setValue(Kingaku); //出金額を現金出納帳へ入力 Sheet_Genkin.getRange(i + Lastrow_Genkin, 5).setValue(Tekiyou); //出金の摘要を現金出納帳へ入力 } if(Lastrow_Syukkin_Input>0){ Sheet_Syukkin_Input.deleteRows(1, Lastrow_Syukkin_Input); //出金データを削除 } } |
GAS コードの説明
GAS コードの説明をします。
変数
最初にまとめて変数を記述しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
//音声入力用のスプレッドシートファイル var SpreadSheet_Nyukin = SpreadsheetApp.openByUrl('入金音声入力ファイルの URL'); var SpreadSheet_Syukkin = SpreadsheetApp.openByUrl('出金音声入力ファイルの URL'); //ファイル中のシートを指定 var Sheet_Nyukin_Input = SpreadSheet_Nyukin.getSheetByName("入金音声入力"); var Sheet_Syukkin_Input = SpreadSheet_Syukkin.getSheetByName("出金音声入力"); //現金出納帳のスプレッドシート var SpreadSheet_Genkin = SpreadsheetApp.openByUrl('現金出納帳の URL'); //シートを指定 var Sheet_Genkin = SpreadSheet_Genkin.getSheetByName("現金出納帳"); //音声入力シート内で入力がある最後の行数を取得 var Lastrow_Nyukin_Input = Sheet_Nyukin_Input.getLastRow(); //入金音声入力シート var Lastrow_Syukkin_Input = Sheet_Syukkin_Input.getLastRow(); //出金音声入力シート //現金出納帳の変数 var Start_Row = 7; //現金出納帳の最初の行 var Kamoku_Start_Row = 6; //勘定科目設定用データの最初の行 var Counter = 0; //空白のカウンター var today; //今日の日付 var Kingaku; //入金額 var Tekiyou; //入金の摘要 var Kamoku; //勘定科目 var Tekiyou_Search; //摘要 検索用 var Kamoku_Search; //勘定科目 検索用 var Tekiyou_Num = 10; //検索できる摘要の数 |
「入金音声入力」ファイルを指定して変数に入れる際には
1 |
var SpreadSheet_Nyukin = SpreadsheetApp.openByUrl('入金音声入力シートの URL'); |
と URL で指定します。
IFTTT で設定して作成したスプレッドシートの URL(https からはじまる) をコピペして置き換えましょう。
また、ファイルの中のシート名を「入金音声入力」としてあり、以下のように指定します。
1 |
var Sheet_Nyukin_Input = SpreadSheet_Nyukin.getSheetByName("入金音声入力"); |
同様に「出金音声入力」ファイル、「現金出出納帳」ファイルも指定しています。
現金出納帳内で記入のある最後の行数を取得
現金出納帳にデータを追加していくために、入力がある最後の行数を把握する必要があります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//現金出納帳内で記入のある最後の行数を取得 for(var i = 1; i <= 10000; i++) { var x = Sheet_Genkin.getRange(Start_Row + i - 1, 3).getValues(); if(x==""){ Counter++; if(Counter==5){ var Lastrow_Genkin = Start_Row + i - 1 - 5; break; } }else{ Counter = 0; } } |
日付の行が5行連続で空白になったら、その直前の行を最後の行数として把握します。
入金データを現金出納帳に書き出し
「入金音声入力」ファイルに入力されたデータを現金出納帳に書き出す過程です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
//入金データを現金出納帳に書き出し for(var i = 1; i <= Lastrow_Nyukin_Input; i++) { today = new Date(); //今日の日付 Kingaku = Sheet_Nyukin_Input.getRange(i, 2).getValue(); //入金額 Tekiyou = Sheet_Nyukin_Input.getRange(i, 3).getValue(); //入金の摘要 Kamoku = ""; for(var j = 1; j <= Tekiyou_Num; j++) { Tekiyou_Search = Sheet_Genkin.getRange(j + Kamoku_Start_Row -1, 13).getValue(); Kamoku_Search = Sheet_Genkin.getRange(j + Kamoku_Start_Row -1, 14).getValue(); //摘要から勘定科目を決める if(Tekiyou == Tekiyou_Search){ Kamoku = Kamoku_Search; //Browser.msgBox(Kamoku); break; } } Sheet_Genkin.getRange(i + Lastrow_Genkin, 3).setValue(today); //日付 Sheet_Genkin.getRange(i + Lastrow_Genkin, 4).setValue(Kamoku); //勘定科目 Sheet_Genkin.getRange(i + Lastrow_Genkin, 6).setValue(Kingaku); //入金額を現金出納帳へ入力 Sheet_Genkin.getRange(i + Lastrow_Genkin, 5).setValue(Tekiyou); //入金の摘要を現金出納帳へ入力 } if(Lastrow_Nyukin_Input>0){ Sheet_Nyukin_Input.deleteRows(1, Lastrow_Nyukin_Input); //入金データを削除 } Lastrow_Genkin = Lastrow_Genkin + Lastrow_Nyukin_Input; |
レシートなどを入手した当日に入力する前提で、日付は今日の日付にしています。
先に書いたように後で変更することもできます。
入金額と摘要はそのまま現金出納帳の「収入金額」欄と「摘要」欄に入ります。
また、摘要から勘定科目を検索してします。
データを現金出納帳に書き出したら、最後「入金音声入力」ファイルの中身を空にしています(データが入っていた行を削除)。
出金データを現金出納帳に書き出し
「出金音声入力」ファイルに入力されたデータを現金出納帳に書き出す過程です。
入金の場合と内容はほとんど同じです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
//出金データを現金出納帳に書き出し for(var i = 1; i <= Lastrow_Syukkin_Input; i++) { today = new Date(); //今日の日付 Kingaku = Sheet_Syukkin_Input.getRange(i, 2).getValue(); //出金額 Tekiyou = Sheet_Syukkin_Input.getRange(i, 3).getValue(); //出金の摘要 Kamoku = ""; for(var j = 1; j <= Tekiyou_Num; j++) { Tekiyou_Search = Sheet_Genkin.getRange(j + Kamoku_Start_Row -1, 13).getValue(); Kamoku_Search = Sheet_Genkin.getRange(j + Kamoku_Start_Row -1, 14).getValue(); //摘要から勘定科目を決める if(Tekiyou == Tekiyou_Search){ Kamoku = Kamoku_Search; break; } } Sheet_Genkin.getRange(i + Lastrow_Genkin, 3).setValue(today); //日付 Sheet_Genkin.getRange(i + Lastrow_Genkin, 4).setValue(Kamoku); //勘定科目 Sheet_Genkin.getRange(i + Lastrow_Genkin, 7).setValue(Kingaku); //出金額を現金出納帳へ入力 Sheet_Genkin.getRange(i + Lastrow_Genkin, 5).setValue(Tekiyou); //出金の摘要を現金出納帳へ入力 } if(Lastrow_Syukkin_Input>0){ Sheet_Syukkin_Input.deleteRows(1, Lastrow_Syukkin_Input); //出金データを削除 } |
トリガーの設定
次にトリガーの設定についてお話しします。
1分間に1回 GAS を実行するように設定しています。
なお、スパンは変更することができます。
スクリプトエディタ(GAS が書き込んであるところ)の「編集」から「現在のプロジェクトのトリガー」を選択します。
次に「トリガーが設定されていません。今すぐ追加するには・・・」の部分を選択します。
そして、時間主導型、分タイマー、1分ごとを選択します。
これでトリガーの設定が完了しました。
音声入力をするとほぼすぐ後に現金出納帳にデータが入ります。
4、まとめ
音声入力の現金出納帳を作成してみました。
完全なる音声入力というのは現時点では実現が難しいように思えます。
今回作ったものは、手作業による修正がどうしても必要になりますし。
ただ、最初にざっと音声で登録した後に細かい修正をするようにした方が、量が多い場合には効率が良いでしょう。
編集後記
昨日(10/16)は午後、下町ロケットに登場する神谷弁護士のモデルとなった方の講演を聞いてきました。
弁護士でありながら、知財戦略、経営戦略的な助言までできるスタンスに感銘を受けました。
夜は商工会議所青年部の委員会の打合せ。終了後は久しぶりに飲み会に出席し遅くまで飲んでました。