音声認識経理で売上・経費の重みをより感じる方法。Googleアシスタント&GoogleAppsScript & Googleスプレッドシート

毎日、声で経理をしています。
声で経理をするメリットの1つは売上や経費の重みを感じることができること。
音声認識経理の方法を含めて解説します。

※Google Nest Hubで音声認識経理   RICHO GRⅢ

 

声なら、売上・経費の重みをより感じる

私が日々の経理をすすめている理由の1つは、その重みを感じるためでもあります。
もちろん経理をしなくても十分重みを感じているかもしれませんが、日々の自分の活動を数字に置き換えるという経理をやっておくと、数字=現実とより向き合うことができるわけです。

今は音声認識入力を使って経理をやっています。
声で「 Ok Google、経理して タイムコンサルティング 売掛金 売上高54000円」 と入れれば、このように Google スプレッドシート(Googleが提供するExcel)へデータが入ります。
(ごーよんぜろぜろぜろ と入れることもできます)
(image
声の聞き取りの精度は100%ではありませんが、少なくとも数字に関しては正確に読み取ってくれますし、かなり高い精度です。
もちろん、言い間違いがない、クセをなくす、はっきり話す、マイクの精度を上げるなどの工夫は欠かせません。

さらには、ひと手間入れて、仕訳の形式に変更しています。
(会計ソフトに取り込むならその形式にするのもかんたんです)

image

この仕訳形式の変更には、Google スプレッドシートで使えるGAS(ガス。グーグルアップススクリプト)というプログラムが必要です。

声で経理をやっているとよりその重みを感じます。
売上を声に出して記録すると、その感謝と嬉しさが増すのです。
私は売上が確定した都度、入力するようにしています。

経費も同様に声でやれば重みを感じ、無駄遣いしていることも感じることができるのです。
預金や Amazonは、データを連動したり加工していますが、自分でカードやSuicaなどで払ったものを声で経理するだけでも十分その効果があります。
( クレジットカードはカード明細のデータからを加工することもできますが、使ったタイミングで記録するため、重みを感じるためにはその都度やったほうがおすすめです)。

この音声認識経理には、下準備、設定が必要です。

音声認識経理の下準備 IFTTTの設定

音声認識入力に使うのは Google のGoogle アシスタントです。
Google アシスタントは音声認識の精度が高く、なおかつさまざまな連携ができます。

スマホ(iPhoneでも使えます)、 Google Home、 Google Nest Hubなどさまざまな端末で使えるというのもメリットです。

私は Google のスマホ Pixel 3や、最近導入した Google Nest Hubで音声認識経理をやっています。

Google Home (スピーカー)よりも、スマホを使っているのは、自分の音声をどのように聞き取ったかというのがテキストで表示されるからです。
スマホだと音声認識の結果がすぐにテキストで表示されます。
(スピーカーにはディスプレイがありません)

同じ理由で Google Nest Hub(ディスプレイつきスピーカー)も、音声認識結果がテキストで表示されますので、今はこちらのほうが使用頻度が高くなりました。
Pixel 3だとスマホを握るだけで Google アシスタントが起動し Ok Google と言わなくて済みます。
スマホを手にせず Ok Google と言いさえすれば入力できる Google Nest Hubと比べると、一長一短ではあります。

さらばiPhoneか。GoogleのスマホPixel3とAppleのスマホiPhone XS比較。 | EX-IT

Google Nest Hub。7インチディスプレイは、スマートスピーカーの完成形 | EX-IT

 

この音声認識経理の下準備として、IFTTTという複数のサービスをつなげることができるしくみを使わなければいけません。

詳しくは、こちらの記事を読んで設定してみていただければ。

音声認識入力で経理。GoogleAssistant×Googleスプレッドシート | EX-IT

イメージだけここに書いておきます。
Screenshot_1 IFTTTで、で Google アシスタントの「Say a Phase with both a number and a text ingredient」(数字とテキストの両方を言う)を選び、 Screenshot_3Google Assistant でどう入れるかというのを設定します。
$の位置にはテキストが入り、#の位置には数字が入ります。Screenshot_4

その結果をScreenshot_6

Googleスプレッドシート(IFTTTでは、GoogleSheet)にAdd row to spreadesheet(行を追加)で、
Screenshot_7

経理(任意です)というスプレッドシートに、数字とテキストを追加していきます。

Screenshot_9

Googleドライブから探すと、見つかりやすいです。

Screenshot_11

たとえば、タイムコンサルティングへの売上が54000円だった場合、

6月29日 売掛金/売上 54000円 タイムコンサルティング

と入れます。

しかしながら、現状の Google アシスタントでは、テキストが1つ、数字が1つしか入りません。
何かをあきらめめざるを得ないのです。
まず日付をあきらめました。
日付は後から入れるか、計算していれるかしかありません。

テキストには、「売掛金」「売上高」といういわゆる借方と貸方と、「タイムコンサルティング」という内容(摘要)を入れています。
Googleアシスタントに話すときは「タイムコンサルティング 売掛金 売上高 」と入れるわけです。
数字には、金額を入れます。

「Ok、Google、経理して タイムコンサルティング 売掛金 売上高  54000円」
(※「経理して」も任意です。IFTTTで設定します)
といえば、Google スプレッドシートに、次のように入るわけです。

B列に数字、C列にテキストが入ります。
image
このままExcelに写して加工するという方法もありますが、このままGASというプログラムを使って加工します。

「タイムコンサルティング 売掛金 売上高 」と入っているテキストを、うまく3つに区切ることができればいいのですが、音声認識入力をするとスペースが変なところに入ってしまいます。
「売上高」が「売上 高」となっているわけです。

これは Google アシスタントのしくみ上しかたなく、空白で区切るということはできず、別の方法を使わざるを得ません。

まず、「タイムコンサルティング 売掛金 売上高 」から空白を取り除き、処理しやすくします。
一括して半角スペースを空白に置き換えるという処理です。

leftというシートに、借方(左側)に入る項目(勘定科目)を入れます。
サンプルでは「売掛金」というものを入れてみました。
売上の場合は、売掛金/売上と入れるという想定です

image

音声認識入力した「タイムコンサルティング 売掛金 売上高」にこの「売掛金」があるかどうかを探します。
もし見つかった場合は「売掛金」を処理後のデータ(シート「data」)のB 列に入れれば分割できるのです。
さらには、音声認識入力した「タイムコンサルティング売掛金売上高」(空白除去後)で、ヒットした「売掛金」を空白に変換し、「タイムコンサルティング売上高」にします。
最終的には、「タイムコンサルティング」という内容のみにするためです。
image

次にrightというシートに、貸方(右側)に入れるものを入れておきます。
ここでは「売上高」を入れましょう。

image

先ほど処理した「タイムコンサルティング売上高 」に「売上高」があれば、その「売上高」をシート[data」のC列に入れておきます。
image

「タイムコンサルティング売上高 」の「売上高」を空白に置き換え、「タイムコンサルティング」をシート「data」のE列に入れます。
image

日付は、翌日(私の場合は翌朝)に経理することを考えて、音声認識入力をする日の前日(昨日)の日付をA列に入れるようにしました。
あとは、金額をD列に入れれば仕訳の完成です。

image

流れとしては
・音声認識入力で Google スプレッドシートに入れる
↓
・プログラムを動かして形式を整える
↓
・その後Excelで処理または会計ソフトに取り込む。
というものです。

私は日々の経理をExcelで集計していますので(決算時のみ会計ソフトを使います)、この Google スプレッドシートのデータをExcelに貼り付けます。

 

音声認識経理 GASで仕訳作成

プログラムは、次のように設定してみましょう。

シート、ショートカットキーの準備

IFTTTで設定した後、「経理」という Google スプレッドシートができているはずです。
Google ドライブからそのスプレッドシートを探してみましょう。
Google アシスタントで音声認識入力してスプレッドシートに記録されるか確認します。

練習として、「売掛金売上高タイムコンサルティング54000円」と入れてみてください。

image
そのシート名をinputとし、シートを3枚追加し、それぞれdata、left、rightと入れます。
image

このシート名を、プログラムの中で使っています。
シート「left」とシート「right」には、先ほどの例のような科目を入れます。
leftには売掛金、

image

rightには、売上高。

image

その後、ツール→マクロで、[マクロの記録]をクリックします。
これをやるのは、プログラムをショートカットキーで操作するためのものです。
。Screenshot_17
そのまま保存をクリックしてScreenshot_18

ショートカットキーを設定します。Screenshot_19ツール→スクリプトエディタで、Screenshot_16開いたところで、プログラムを書いていきます。

Screenshot_20

 

スクリプトエディタに貼り付け

プログラムをペタッと、スプレッドエディタに上書きで貼り付けましょう。

image

function myFunction() {

  var sp = SpreadsheetApp.getActiveSpreadsheet();
  var sheet_input = sp.getSheetByName('input'); //シート「input」読込
  var sheet_data = sp.getSheetByName('data');  //シート「data」読込
  var sheet_left = sp.getSheetByName('left');  //シート「left」読込
  var sheet_right = sp.getSheetByName('right'); //シート「right」読込

//シート「data」を選択し、クリア
  sheet_data.activate();
  sheet_data.clear();

//シート「input」のデータ数だけ繰り返し処理
  for(var row=1;row< sheet_input.getLastRow()+1; row++){


  //シート「input」のC列のデータ読込
    var contents = sheet_input.getRange('c'+row).getValue();


  //シート「left」のリストの読込・検索を繰り返し処理
    for(var i=1;i< sheet_left.getLastRow()+1; i++){

      var left = sheet_left.getRange('a'+i).getValue();   //シート「left」のA列を読込
      var contents = contents.replace(/\s+/g, "");        //入力データの空白を除去
      
      if  (contents.match(left)) {               //入力データに、「left」のデータがあれば
        var contents = contents.replace(left,'');      //入力データの「left」を空白に
        sheet_data.getRange('b'+row).setValue(left);     //シート「data」のB列に「left」を書込

      }; 
        
    };


 //シート「right」のリストの読込・検索を繰り返し処理
    for(var i=1;i< sheet_right.getLastRow()+1; i++){

      var right = sheet_right.getRange('a'+i).getValue();  //シート「right」のA列を読込
      var contents = contents.replace(/\s+/g, '');         //入力データの空白を除去
      
      if  (contents.match(right)) {                        //入力データに、「right」のデータがあれば
        var contents = contents.replace(right,'');         //入力データの「right」を空白に
        sheet_data.getRange('c'+row).setValue(right);      //シート「data」のC列に「right」を書込

      }; 
        
    
    };

 //日付、金額、内容の入力
      var date = new Date();
      var today = new Date(date.getFullYear(),date.getMonth(),date.getDate(),0,0);
      var yesterday = new Date(date.getFullYear(),date.getMonth(),date.getDate()-1,0,0);
      sheet_data.getRange('a'+row).setValue(yesterday);         //シート「data」のA列に昨日の日付
      
      var amount = sheet_input.getRange('b'+row).getValue();   //入力データの「金額」
      sheet_data.getRange('d'+row).setValue(amount);        //シート「data」のD列に金額

    sheet_data.getRange('e'+row).setValue(contents);       //シート「data」のE列に内容

                    
   };


};

 

 

 

プログラムの承認

プログラムを実行(Ctrl+R)すると、、次のような警告が出てきます。
[許可を確認]をクリックし、Screenshot_22

Googleアカウントを選び、

image

次の警告では、「詳細」をクリックし、

Screenshot_24

[〇〇(安全ではないページ)に移動]をクリックし、

Screenshot_25

[許可]をクリックします。

Screenshot_26

警告が出て、気持ちが落ち着かないかもしれませんが、こういうものだと思ってください。

再度、プログラムを実行し、Google スプレッドシートのシート「data」が次のようになっていればOKです。

image

音声認識入力
↓
スプレッドシートを開く
↓
設定したショートカットキーを押す
で、データが完成します。

 

このしくみを使えば経費でも同じことができます。
「OK、Google、スタバ打ち合わせ 会議費 カード 313円」と言えば、次のように入り、
image

leftに会議費、

image

rightにカードと入れて、プログラム実行すれば、

image

このように仕訳になります。

image

マッチするものがない場合

leftやrightに、該当するものがない場合は、このように空欄になります。
項目を入れてから、再度プログラムを実行しましょう。

image

 

IFTTTの設定や機器をそろえたりすること、音声認識に慣れることは確かに手間ではあります。
認識ミスもあり得ますので、その都度修正も必要です。
それでも声で経理できるメリットはあるので、私は気に入っています。

会計ソフトが音声認識で入力できるようになるかもしれませんが、いつになることかわかりませんし、自分なりにカスタマイズできる、こういったしくみを使ったほうが応用もきくのでおすすめです。

 



■編集後記

アベンジャーズ・エンドゲームの4KUHDの予約が始まりました。
プレミアムボックスにしようかと思いつつ、特典があまり魅力的ではなく。
普通のにしようかと思いきや、Amazon限定で、フィギュア10体つきのものが……。
それなりに高くなるのですが、予約しました。
楽しみです。
(商売上手です……)

 

■「1日1新」

コロンバン

 

■娘(2歳)日記
黒いおばけっぽいい、ムーミンのスティンギーが気になっています。
ジブリのまっくろくろすけも気に入って、ジブリの森に行ったときに買いました。
さ、最近見てませんが……。