Libre Officeで使えるSQL〜帳簿作成に超便利!日付順の残高を計算する〜

2022年9月19日

Libre Office Baseで作成したシンプルな帳簿を公開していますが、Baseは無料とは思えぬほどの便利さです。ただ、やはりMicrosoft accessに比べると操作性では劣る部分があるのも事実です。

帳簿を作成するにあたり、最も大変だったことはSQLによる残高計算です。複式帳簿に必須の総勘定元帳には残高表示は絶対に必要です。

フリーランスの帳簿事情 〜帳簿を理解し無料で作成する〜(テンプレ配布しています)

Baseに関する情報源が少なく、一つ調べてエラーが出た場合、どうしたらいいか分からなくなるんですよね。

今回は、Libre Office Baseのクエリーで残高計算をする方法を解説します。

※データベースソフトに関する知識が全くない方は、SQLの理解が難しいと思うので、先に概念や利点、基本的な使用方法に関する学習をおすすめします。

残高計算

帳簿には絶対に必要な機能なのに、ここで長らくつまずきました。仕訳帳には不要ですが総勘定元帳には必須です。やりたいことは『その日までの入金額の合計から出金額の合計を差し引きたい』ってだけなんですけど、その日までのっていうたったそれだけが難しい(笑)日付の概念をどう定義すればいいのかさっぱり分からない!

でも方法はありました。

実際に、Base の画面をお見せします。サンプルになっているファイルは本サイトで配布しているファイル(帳簿シンプル.odb)です。

 

まずは元のテーブルです。

この帳簿では、テーブルの時点で、入出金入力を現金と預金とクレジットカードの手段ごとに分けています。今回の例は、現金記録テーブルの”現金出納帳T”と名付けたテーブルから、クエリーで必要情報を抽出して計算式を入れて残高を表示します。

抽出して計算を入れたクエリーです。イメージしやすいようにまずはデザインテーブルの表示で見てみてください。コメントも入れています。

これをこのデザインテーブルだけで作り上げるのは実は難しいので(できないこともないかもしれませんが)最初からSQL編集で書いていきます。

SQL表示に切り替えてみると

ややこしいのは中段のカッコ内の式であり、ずばり!これが残高計算式です。
全文書き出してみます。

 

SELECT “日付", “摘要", “相手科目", “入金額", “出金額",

( SELECT SUM( “t2″."入金額" ) – SUM( “t2″."出金額" ) FROM “現金出納帳T" AS “t2" WHERE ( “t2″."日付" <= “t1″."日付" ) )

AS “残高" FROM “現金出納帳T" AS “t1" ORDER BY “日付" ASC

“t1″と"t2″という名前のテーブルはどちらも”現金出納帳T”です。つまりダミー機能を使って”現金出納帳T”からもうひとつ"t2″を分身させ、日付順の残高計算を可能にしています。(http://oooug.jp/faq/index.php?faq%2F4%2F401sを参考にしました。ありがとう!)

残高の部分をまとめると、『“t1″よりも"t2″の日付が同じか早い場合に、"t2″の入金額の合計から”t2″出金額合計を引いてその額を”残高とする”』ということになります。

他の命令文についても軽く解説をします。不要な方は飛ばしてください。

SELECT:以降に抽出したい項目を並べる。

FROM:何から抽出したかを記載。

AS:項目の名称を変更したいときに使用。

WHERE:抽出条件を書く。

ORDER BY:並べる順序

命令文を書くときの決まり

基本的なことですが意外と誰も教えてくれない説(笑)

項目名は””で囲み、項目の区切りには,(カンマ)をつけるのが決まり。

そして最後の抽出項目の後にはカンマはつけません。

注意点

クエリーから抽出したデータをさらに計算したい場合

先ほどの例では、元のデータがテーブルだったので良いのですが、一旦抽出したクエリーを別のクエリー内で計算する際にはエラーになりやすいです。

1回目のクエリーが抽出だけしかしてないなら大丈夫ですが、既に計算式を入れてたり、日付順に並べ替えていたり、ややこしいことをすればするほど2個目のクエリーでの計算が難しくなるようです。

もしエラーになった場合は、1回目を抽出だけにするか、全体的に構成を見直したほうがいいのかもしれません。

命令文やファイル名は正しく書く

当たり前ですが、ファイル名が少しでも違ったらBaseがファイルを探せないのでエラーになります。正しく記載しましょう。

命令文に関してもそうです。カンマひとつ抜けただけでもシンタックスエラーというのが出てしまいます。

まとめ

いかがでしたか?クエリー内で残高計算をする方法を解説しました。基本はこれで全てできるはずなので、参考にしてください!