TKC電子申告システム(e-TAX1000)で数十件の地方税申告の受信通知を自動ダウンロードしてくれるRPAを逐条解説

大きな会社は、数十件の自治体に地方税の電子申告するわけですが、結果、税理士は、その申告受付完了通知(地方税の受信通知)も大量にダウンロードしないといけません。

一括ダウンロードできればいいけど、業務ソフトにはそんな機能はない(多分ないと思う)。

何十回もマウスとキーボードの同じ操作を繰り返すのなんて嫌だ! と思うのが当然。そこで、RPA ( Microsoft Power Automate ) の出番です。

RPAを使いこなすコツは、何でもRPAにやらせようとしないこと。繰り返しの手動操作の部分だけ、RPAで代行しましょう。

1回だけで済む下ごしらえが、人間の仕事です。e-TAX1000の「地方税メッセージボックス」の「発行日時」を、今回の申告書群の受信通知の範囲で絞りこみます。最初と最後の分数を調べて、範囲指定します。

で、Power Automateの作例が以下。

今回は36件の提出先があったので、変数に1を格納して、ループごとに1増加させ、36以下の間だけループさせるようにしました。ここは手動で設定し、件数に応じて編集するようにします。

業務ソフト(e-TAX1000)を認識させるには、「ウィンドウにフォーカスする」を使うと安定します。

コツとしては、最初の1行目だけはクリックすることです。これで、確実に1行目からスタートすることができます。こういうのに「マウスを画像に移動」を使います。「1」の数字のところだけドラッグして取り込みましょう。

1行目がクリックされた状態で、Enterを押せばその受信通知が開くので、ここではレコーディングではなく、「キーの送信」でReturnを送り込みます。

新しいウィンドウが開くときは、「ウィンドウにフォーカスする」の代わりに「Title Bar」をクリック をレコーディングすると手軽です。

TKCソフトのウィンドウ上下のボタン類は、レコーディングの際、すべてまとめて赤枠で認識されてしまうので、「マウスを画像に移動」を使い、ボタンの画像の左上から左下まで、きれいにドラッグしてボタンを取り込みます。

ウィンドウ内のボタン類は、レコーディングで正しく認識されるので、ふつうに処理します。

ウィンドウが開いたり閉じたりするときは、Wait 1秒を設定するとスムーズなようです。「Title Bar」のクリックと同様、なくてもうまくいくこともありますが。

ここではF4入力完了をキーストロークの送信でやっています。このほうが速いことが多いですが、レコーディングのほうがうまくいくこともあります。

めでたくPDFがフォルダに保存されたら、変数を1増やします。

すると、ここで変数=1+1 で 2 となり、この 2 を、e-TAX1000メイン画面の右下の行数を入れる小窓に入力してやります。

コツは、何でもRPAでテキストボックスを指定したりせず、画面を開いたときにデフォルトで選択されているボックスがあれば、それを生かして、RPAでは文字列だけ送り込むことです。

ここでループ終端。最初に戻って、2行目の受信通知を開き…と繰り返してくれるのです。

Bing AI が書いた Excel マクロ コード を直すのは人間

Sub MoveData()
    Dim i As Integer
    For i = 0 To 1000 Step 4
        Range("E2").Offset(i, 0).Value = Range("D4").Offset(i, 0).Value
        Range("D4").Offset(i, 0).ClearContents
        Range("G2").Offset(i, 0).Value = Range("F4").Offset(i, 0).Value
        Range("F4").Offset(i, 0).ClearContents
        Range("H2").Offset(i, 0).Value = Range("T4").Offset(i, 0).Value
        Range("T4").Offset(i, 0).ClearContents
    Next i
End Sub

会社が作成した Excel の勘定科目内訳明細書を、税務ソフト読込用のフォーマットに合わせるためのマクロを、Bing AI に考えてもらいました。

会社作成の Excel は、典型的なエクセル方眼紙で、まず、これをセル結合のない表形式に直す必要があります。

シートが1枚だけなら、エクセル方眼紙を PDF に出力して、その PDF を Word に食べさせて、得られた表を Excel にコピペする…としてもエクセル方眼紙を直せるのですが、シートの枚数が多くなると厳しい。

エクセル方眼紙であっても、使いたい部分をコピー&ペーストで直に Excel に値として貼り付けることで、セル結合は解除され、マクロで加工する余地がある状態にできます。

表の形としては崩れているものの、崩れ方が規則的なので、これを正しいフォーマットにするときこそ、マクロの出番です。

まず、1 セット分、ずれた位置から正しい位置に移すコードを Bing AI に考えてもらって、次のセットに移してそれを繰り返させるコードを考えてもらったのが、上のコードです。

ちなみに当初は

For i = 1 To 1000 Step 4

だったのですが、これでは意図どおりに動作せず、ここは自分でコードを読み解くことで、初期値を 0 に手直して、正規化された表を得ることができました。

Bing AI でマクロのコードを書いてもらうことは、人間が暗記や調べものをすべきことを代行してもらうことなのですね。AI の出力物を直せる力が、人間に求められていると感じました。

その他の手直し

このマクロで得られた表は、空き行だらけなので、全体にフィルタをかけ、「空白」のある行のチェックを外せば詰まった表が得られます。

これで、読込用のフォーマットにそのままコピー&ペースト(値貼り付け)できるようになりました。

離れた複数の列を同時に削除するExcelマクロが動かない原因と対処法

今日び、Excelマクロは、「新しいBing(チャット)」に聞けば、正しいコードをどんどん書いてくれるので、非常にとっつきやすいものになっています。

でも、コードが正しくても、動作しないということがあります。

それが、操作する対象の表が「テーブル(任意のセルをクリックしてCtrl+Tを押すとなるやつ)」であるときです。

テーブルは、手作業でも削除などの操作がうまくできなかったり(できていても画面のリフレッシュが遅くて、スクロールさせないと消えたように見えなかったり)して、好きじゃない人も多いと思います。

マクロで削除しようとしても、ほぼエラーの原因になるのです。

なんと、テーブルを、別のマクロ入りファイルに値のみ貼り付けしても、やっぱりエラーになる。

たちが悪いのは、相手がテーブルでも、1列だけ削除ならマクロでできることです。複数の列を削除しようとすると、テーブル相手ではエラーの連続になります。

正しい対処法は、テーブルのExcelファイルをいったんCSV形式で保存して閉じ、Excelで開きなおしたものを、マクロのファイルにコピー&ペーストして、そこで複数列削除のVBAコードを実行することです。

テーブルとして扱いたいときは、そのあとにマクロなどでテーブル化しましょう。CSV保存しても日付などの書式は失われないので、安心して試してみてください。

TKC TPS2000 の所得の内訳入力を Power Automate で効率化

テキストボックスに入力するアクションで 1 行目に戻ってしまうときは

税務ソフト等で Excel データを RPA 入力するノウハウとして一般的なのが、レコーダー機能で 1 行だけ自分で手入力してみて、その後、手入力した値のところだけを、 Excel の変数に置き換えるという方法があります。

しかし、それでうまくいく場合と、いかない場合とがあります。

TPS2000 の「所得の内訳」の入力で、この方法で For Each ループさせたときに、毎回 1 行目に戻って入力してしまう失敗が起きます。

レコーダー機能で記録されるアクションだと、 TssEdit テキストボックスが指定されるので、そのボックスのある 1 行目に戻ってしまうのでしょう。

何度やってもうまくいかないときは、その理論を捨てて、別の理論で考えてみましょう。

「キーの送信」アクションのみを使うことで解決

「所得の内訳」の最後の値「月」を入力して、 {Return} のキーストロークを送信すると、次の行に行きますよね。

なら、次の行を入力してくれそうなものですが……。

{Return} さえ送れば次のテキストボックスを自動的に掴んでくれているのですから、改めて Power Automate でボックスを指定する必要はないのではないか。

そのように考えると、もう、 Enter キーを押した時点でカーソルはボックスにいるのだから、あとやるべきことは、テキストを入力するだけだと気づきます。

じゃあ、全部「キーの送信」で必要なデータを自動入力してしまえばいいのではないか。

そのように考えたのが、次のフローです。「キーの送信」で Excel データである CurrentItem [n] を送信してしまうのです。

%CurrentItem[0]%
こう入力すると、フローでは CurrentItem [0] と表示される
意味は、いまいる Excel の行の 1 列目の値を取り出す

これでうまくいきました。

16 行目、切れてますが Return をもう 1 回送ってくださいね。

8 行目で、 {Return} を 6 回送信していますが、自分で手入力すると、 5 回しか Enter を押していない気がします。でも、レコーダーだと 6 回記録され、 6 回でないとエラーを起こしますので、理屈はともあれ、フローが動くのであれば、その方法を採用しましょう。

Power Automateで画像としてボタンを認識すべきとき

(1) レコーダーの赤枠が、アプリの複数のボタンをまとめて選択してしまう場合

Power Automateが楽しかったので、戸村涼子先生のRPAセミナーに参加しました。そこで得た情報。RPAがボタンを認識する方法には、

  1. 構造解析型
  2. 画像認識型

の2つがあります。Power Automateではどちらも使えますが、デフォルトでは構造解析型で記録されます。赤枠でボタンやメニューを選ぶやつです。

ただ、その赤枠が、クリックしたい「あるボタン」を単独で認識してくれない場合、画像認識型の出番です。アクション名は「マウスを画像に移動」です。

(2) 新たなボタンが追加されて、これまで指定していたボタンの名前が変わってしまった場合

ブラウザ型のアプリを使用していると、アップデートがかかって、ボタンの画像としては変化がなくても、並び順の変更から、構造上の名前が変わってしまうことがあります。この場合に画像認識を使います。

Power Automate の基本動作:Excel から税務ソフトに入力する

ExcelをRPAのデータテーブルとして読み取るには

Power Automate(RPA)を使うからには、やはりExcelから税務ソフトへの転記をやってみたい。これが王道であると思います。

ここでは、TKCの法人税ソフトで事業概況説明書の毎月の源泉徴収税額の入力をやってみましょう。まずは仕訳帳を加工してシンプルなExcelデータを用意。合計行など使わないセルは削除してから、Book1.xlsxとしてworkフォルダに保存します。

年月(12カ月分)取引金額(貸方:預り金)
2022 41,000

このExcelファイルをRPAで読み取るところが第一の関門。読み取るところだけでサブフローを作りましょう。1画面で全部見えるような長さでサブフローに分けるのがコツです。

3行目がポイント。Excelの操作上は、「1」が1列目・1行目を表します。先頭から最終までの範囲指定ができるようにするには、一操作が必要。Column=列、Row=行を頭に叩き込みましょう。これを逆に入れると失敗します。「- 1」で最初の空セルの一つ手前までの範囲を指定して、読み取ります。

試しに実行してみて、ちゃんと読み取れたかは、実行後にExcelDataの「表示」をクリックして、元のExcelと同じ表ができているかどうか確かめます。

どうやってRPAに税務ソフトを認識させるか

まず、税務ソフトの「651 事業概況説明書」を開いた状態にしておきます。(RPAも、この状態から実行します)

税務ソフトのウィンドウを認識するには、「ウィンドウにフォーカスする」を使います。その後、入力すべき欄をクリックする操作の保存は、レコーダーで行います。

Excelの行を1行ずつ入力するには

Excelの行を一つずつ繰り返して入力するには、For each~Endを使います。

データテーブルの2列目にある取引金額を入力するには、CurrentItem [1]と設定します。この[1]は、さっきのExcelの列・行の「1」とは異なり、2列目のことです。Excelを、RPAのデータテーブルとして読み込んだあとは、1列目・1行目は[0]として数えます。

そして税務ソフトの挙動を確認。税務ソフトで次の行に行くにはEnterキーを押すので、それをRPAにも教えてあげます。Enterは、RPA上では[Return]と呼ばれていて、用語が違うんですけどね……。

フローの名前の付け方のコツ、実行遅延

RPAは、パソコンがどういう状態のときに実行するかを明確にしておく必要があります。「事業概況説明書を開いた状態」から実行するのだ、ということが分かるようなフロー名にしておきましょう。

あと、編集画面の一番下に「実行遅延 100ミリ秒」というのが入っていますが、これは、税務ソフト操作では10ミリ秒に短くしても問題なく動作します。動く範囲で短くしておくとよいでしょう。

Excelマクロを使うべきとき:データ+フォーマット(交通費精算書の作成例)

勤め人の方は、毎月の交通費の精算書を会社に出していると思います。精算書は、Excelのフォーマットですか? でしたら、データもあれば、毎月の作業を効率化できます。

SUICA(交通系IC)をカードリーダーに読み込ませてCSVファイルを取得すれば、データが手に入ります。

Excelマクロ(VBA)は、いつ使うのか? それは、手もとにフォーマットとデータの2つが揃ったときです。

データは下ごしらえが必要

SUICAのCSVデータは新しい順に並んでいますが、交通費精算のフォーマットは古い順に書くと思います。そこで、あらかじめデータの方に行番号を振って降順(古い順)に並べ替えておきます。

あと、データに列を追加してそこに訪問先を入力し、フィルタで全選択→空欄除外で精算対象だけを抽出して、フォーマットの隣のシートにデータを貼り付けます。

これで、データとフォーマットが揃いました。あとはコードを書いて、データからフォーマットに転記するだけです。

作例

左のフォーマットの適切な列に、右のシートにあるデータの必要な列のデータを転記していく、ごく初歩的なマクロです。左のRangeのセル指定は、お手もとのフォーマットに応じて適時変えてくださいね。

Option Explicit

Sub koutuhi() '交通費精算書のフォーマットにSUICAのデータ(古い順に並べ替え後)を転記する
    Dim i
    'シートデータの最大行を数える
    For i = 2 To Worksheets("data").Range("a" & Rows.Count).End(xlUp).Row
        Worksheets("fmt").Range("a" & i + 2).Value = Worksheets("data").Range("b" & i).Value
        Worksheets("fmt").Range("b" & i + 2).Value = Worksheets("data").Range("m" & i).Value
        Worksheets("fmt").Range("d" & i + 2).Value = Worksheets("data").Range("g" & i).Value
        Worksheets("fmt").Range("e" & i + 2).Value = Worksheets("data").Range("e" & i).Value
        Worksheets("fmt").Range("g" & i + 2).Value = Worksheets("data").Range("h" & i).Value
        Worksheets("fmt").Range("h" & i + 2).Value = Worksheets("data").Range("i" & i).Value
    Next
End Sub

井ノ上陽一先生のセミナーで学んだExcelマクロの使い道と作成のコツ

マクロの使い道

Excelマクロ(VBAとも)の使いどころを知るために、税理士の井ノ上先生のセミナーを受講しました。すると、その使い道が大きく2つあることが分かりました。

  • 宛先別の請求書を、請求書一覧表にまとめる
  • 請求書一覧表から、宛先別の請求書を作成する

個人的には1つ目の、一覧表を作成するマクロを作っています。一覧表とは、会計ソフトにインポートしやすい形をした表のことです。

作成のコツ

今日は、月次売上のExcelシートを作成して、そこからインポート用のCSVファイルを作るマクロを作ってみました。毎月の定型的な仕訳で、変わるのは日付・税込金額・消費税額だけなので、それ以外は転記先の一覧表シートにあらかじめ入力しておきます。

転記元のデータは、関数を使ってインポート書式に近いデータにそろえておきます。こうした事前準備で、コードを減量・シンプル化します。

事例

Sub sales()

    Dim i '転記先と転記元の行数を意味する
    
    For i = 1 To 12 '計12仕訳
        '年月日を入力
        Range("d" & i).Value = Worksheets(2).Range("j18").Value
        '取引金額を入力
        Range("o" & i).Value = Worksheets(2).Range("j" & 18 + i).Value
        '売上高の場合、消費税額を入力
        If Range("k" & i).Value = 4111 Then
            Range("p" & i).Value = WorksheetFunction.Round(Range("o" & i).Value / 1.1 * 0.1, 0)
        End If
    Next

End Sub

Power AutomateはExcel操作が不安定

以前やった、GnuCashの仕訳データから推移表を作るをPower Automateで自動化してみました。GnuCashからのCSVデータを出力し、ピボットテーブル化まで。

しかし、困ったことが。Excel操作をPower Automateの「自分のフロー」一覧画面から実行すると失敗するのに、「編集」画面から実行すると成功するフローがあります。必ずそうなります。何なんでしょうね、これは……。

あとは、「レコーダー」でExcel操作を記録しても、実行ができないことも多いです。「フィルターが適用されないドロップダウンボタンを選択」後、「ウィンドウのチェック ボックスの状態を設定」しようとすると、「チェックボックスが見つかりません」エラーが。

試行錯誤に時間がかかりすぎそうなので、そこは手動にしました。ピボットテーブルの設定を自動化すると、同じテーブルを何度も作れて便利。VBAでもいいのでしょうけど。

Power Automate の Tips

  • ブラウザー操作は、Power Automate用のブラウザーとして、普段は使わないブラウザに限定する(何となくメーカーをMS社で統一したいので、Edge)
  • Edgeのパスワード記録やポップアップブロック機能をOFFにして、レコーダー・フロー実行の邪魔にならないようにする
  • ブラウザー操作は、レコーダーで自動記録されるEdge起動は「制御不能」のエラーになるので削除して、アクションから「Edgeを起動する」を設定する
  • ブラウザー自動操作のフローは、ログアウトしたところで止めて、ブラウザを閉じないようにする。実行後、何をしたかわからなくなるため
  • Excelから読み取ったデータをEdgeに書き込ませる前に、Wait 1 second を挟んでEdge制御不能を防ぐ
  • レコーダーは、赤い枠がしっかり表示されたことを確認して操作する。
  • 記録に失敗したら、一時停止して、失敗した記録をまめに削除して、新たに記録しなおす