2025年3月6日木曜日

会計(監査)ツールとしてのPowerShell(AIもあるよ)

はじめに

会計に携わる人であれば仕訳帳や総勘定元帳を使った分析は一度はやったことがあるかと思います。一方で仕訳帳や総勘定元帳は財務報告に必要な限定的な情報が記録されているに過ぎないため詳細な情報を得ることは難しいです。
ある程度の規模の会社になると、基幹システムが導入されており、このシステムには詳細な会計事象が記録されていて、管理会計等の経営戦略に使用されています。
たとえば、スーパーやホームセンターのような小売店ではPOSシステムが導入されていて、POSシステムには例えば次のような情報が記録されています。
  • 売上日時
  • 商品
  • 商品カテゴリ
  • レジ番号
  • レジ担当者
  • 支払方法(現金、クレカ、電子マネー)
なので、POSデータを活用することで、日にちごとや曜日ごと、時間ごとに売上を集計したり、どんな商品が売れたのか、どのレジ(フロア)で売れたのか、1回の買い物で何点買って合計いくらだったのか、どの支払方法がどれだけ使われているのかといったことを知ることができます。
 
ところが実際にこれらの分析をしようとした場合、あまりにもデータの量が多すぎてExcelだとファイルを開くのにも時間がかかるし、操作のたびにExcelの反応が悪くなると思います。またファイルが日次で作成されたりするため、1か月分の分析で30個、四半期で90個のファイルを分析しなければいけません。
1つずつファイルを開いてピボットテーブルで分析してたら相当時間がかかってしまいます。PowerQueryを使えば少しは楽になるかもしれませんが、ファイルを開くのにも時間がかかるし、Excelの操作のたびにPCが重くなるのは目に見えてます。こういった待ち時間は非常にストレスですよね。
世の中に様々な分析ツールが出ていますが、こういったツールは有料なのでなかなかすぐに使えないという難点があります。
 
今回はPowerShellを使ってすべてを解決する方法をご紹介します。

この記事の対象者

この記事の想定読者は次の通りです。
上記ではPOSシステムのデータを扱うことを想定していますが、総勘定元帳や仕訳帳といったものにも適用可能です。
  • 総勘定元帳や仕訳帳をExcelで分析することに限界を感じている人
  • POSシステムやECサイトのログなどの膨大なデータを分析したい人
  • 導入コストをあまりかけたくない人
  • 簡単なプログラミングに興味がある人
  • Excelの関数やの使い方やセルの書式の違いがある程度わかる人

 PowerShellとは

 PowerShellとはWindowsに標準でインストールされている簡易なプログラムを書けるツールです。Windowsのスタートメニューから起動することができます。
 
PowerShellのいいところはこんな感じです。
  • Windowsに標準で入っているのでインストール不要ですぐに使える
  • Windowsを買えばついてくるので追加の費用なし
  • Excelでやるよりも早い
  • 書き方次第でExcelでやるよりもメモリの使用量が少ないためPCが重たくならない
  • 一度動くものを書いてしまえば勝手に処理してくれるので待ち時間がなくなりストレスフリー
  • やり方次第でExcelよりも複雑な処理をさせられる
  • やり方次第で市販のツールよりも柔軟な分析ができる 
  • 一度プログラムを作ってしまえば、フォーマットが変わらなければずっと使える
  • Microsoftが提供しているのでわからないことはCopilotに聞けば教えてくれる 
一方デメリットは。
  • 動かすまで大変
  • CUI(文字ベースのインタフェース)なので市販のツールのようなグラフィカルな操作性は期待できない
  • プログラミングの知識が多少必要になる
  • 簡単な処理や小さなデータであればExcelでやった方が早い場合がある
  • データが間違っているとそもそも使えない(ファイルの重複や不足などはプログラムは判断できない)
  • データのフォーマットが変わったら修正しなくちゃいけない
  • 作った人がいなくなったらメンテナンスできなくなる 
  • たまにPowerShellがバージョンアップしてプログラムの仕様が変わる

とりあえず動かしてみる

 まずはPowerShell ISEを起動してみます。こちらの3分割された画面が出ます。上の白い画面にプログラムを書いて、下の青みがかった黒い画面に実行結果が出力されます。
もし上の白い画面が出ていないようでしたら「ファイル」の下にある新規作成のアイコンをクリックすると出てきます。
何かプログラムを書いてみましょう。
といっても何の知識もないとどう書いたらいいかわからないので、こういう時は今流行りのAIです。MicrosoftのCopilotに聞いてみましょう。試しに1から100までの素数を出力するプログラムを聞いてみたらサクッと答えてくれました。
右上に「コピー」ボタンも用意してくれて至れり尽くせりです。

これをさっきのISEの上の白いスペースにペーストしたら丸で囲った緑色の三角のボタンで実行しましょう。F5ボタンでもOKです。

出力結果は各々で確認してみてください。

会計っぽいことをやってみる

せっかくなので会計っぽいもう少し複雑なプログラムを考えてみます。
たとえば、次のような列データの総勘定元帳のCSVファイルがあったとします。 
  1. 日付
  2. 自勘定科目コード
  3. 自勘定科目名
  4. 相手勘定科目コード
  5. 相手勘定科目名
  6. 借方金額
  7. 貸方金額
  8. 残高
ここから、日付ごとの「売上」を集計したいのでCopilotに次の通りお願いしてみました。
 GL.CSVというファイルがあって、CSVファイルの要素は次の通りです。 
1.日付 
2.自勘定科目コード 
3.自勘定科目名 
4.相手勘定科目コード 
5.相手勘定科目名 
6.借方金額 
7.貸方金額 
8.残高 
このCSVファイルを読み込んで、自勘定科目名が「売上」となっているものの貸方金額を加算し、借方金額を減算したものを日付ごとに出力したい。PowerShellで。

するとこんな風に答えてくれました。

# CSVファイルのパスを設定
$csvPath = "GL.CSV"

# CSVファイルをインポート
$data = Import-Csv -Path $csvPath

# "売上"をフィルタし、日付ごとにグループ化して計算
$result = $data | Where-Object { $_."自勘定科目名" -eq "売上" } |
    Group-Object -Property "日付" |
    ForEach-Object {
        $date = $_.Name
        $totalCredit = ($_.Group | Measure-Object -Property "貸方金額" -Sum).Sum
        $totalDebit = ($_.Group | Measure-Object -Property "借方金額" -Sum).Sum
        [PSCustomObject]@{
            日付       = $date
            合計金額   = $totalCredit - $totalDebit
        }
    }

# 結果を出力
$result | Format-Table -AutoSize

これをISEにコピペして実行すればいつもはExcelのピボットテーブルでやってた作業がPowerShellで代替することができました。
大きな総勘定元帳データの作業でもPowerShellが勝手に処理してくれるからお茶でも飲んで待ってましょう。 
ちなみに上記のコードにサンプルのデータを食わせてみたのですがうまく出力されなかったのでなんか問題ありそう(小声)

応用

これ以降は各自応用で試してください。
こんなことできるはずです。
  • 税率を判別して消費税計算をする
  • 複数のファイルを読み込む
  • 重複したファイルがないかチェックする
  • 実行結果をCSV形式でファイル出力する
  • Excelのファイルを入力に使ったり、出力にしたりもできる
  • SQLServerの操作もできる

Copilotこんなこともできる

CopilotはPowerShellのことめちゃくちゃ詳しいのでこんなこともできました。
他にも可能性は無限大。
  • 自分で書いたプログラムを添削してくれる
  • 誰かが描いたコードを貼り付けてどんな処理をしているのか聞くと教えてくれる
  • 関数の使い方とか漠然とした質問にも答えてくれる

なぜPowerShellなのか

私の前職はインフラエンジニアで、がっつりプログラミングをやったりはしなかったのですが、システム障害が起きたときにWebサーバやファイアウォールなどのログを解析する必要があってLinux上のシェルやRubyなどで簡単な解析スクリプトを書いたりしていました。こういったログは1日で百万行も出力されることがあるためExcelなんかで分析はしません。解析用のスクリプトを使えば百万行/日のログ1か月分も30分もあれば分析できてしまいます。
会計で総勘定元帳や基幹システムなどのでかいデータを扱うとき、Linuxがあればすぐ終わるのになぁなどと思っていたけど、手元にはWindowsPCしかないため半ばあきらめていました。WindowsにはPowerShellがあるのは知っていたのでこれでなんかできそうだという感覚はあったのですが、新しい言語を覚える障壁があって、手を付けられずにいたのですが、明らかにプログラム書いた方が早く済む事案があって、重い腰をあげてようやくPowerShellに手を付けたのが去年のことでした。
新しい言語を習得するときは関数の使い方が辞書のように載っているリファレンス本を買って勉強するというのがこれまでのパターンだったのですが、本屋を探してもPowerShellの本がぜんぜんないんですよね。
あっても古いバージョンの本だったりでなぜなんだろうと不思議に思っていたらCopilotに聞けば全部教えてくれるからリファレンス本いらないんですよ。
ほかの言語を書いたことがあるなら「○○の処理はPowerShellではどう書くの?」みたいな感じで聞けるので簡単に動くコードが書けてしまいました。
プログラミングの知識はあったらもちろんいいのですが、なくてもCopilotに聞きながら少しずつ習得していけばいいと思います。
思ったよりも簡単に動くコードを生成できたので、ぜひ挑戦してみてほしいと思います。

会計(監査)ツールとしてのPowerShell(AIもあるよ)

はじめに 会計に携わる人であれば仕訳帳や総勘定元帳を使った分析は一度はやったことがあるかと思います。一方で仕訳帳や総勘定元帳は財務報告に必要な限定的な情報が記録されているに過ぎないため詳細な情報を得ることは難しいです。 ある程度の規模の会社になると、基幹システムが導入されており、...