僕は中小企業において経理を一人で担っている。入社当初、3人体制だったが、パソコンを扱えるということで、20年以上単独での業務となっている。経理屋なら理解・想像できると思うが、相当の効率化を図らなければ一日で終わらせることはできないし、残業やむなし、と追い込まれてしまうだろう。そのような事態を回避するために自身が取った対策はエクセル関数を駆使した汎用性のあるファイル作成である。それに実のところエクセル以外のPCリテラシーも必須である。僕の場合これといった講習を受けているわけではなく、30年以上PCに慣れ親しんできたことしかない。時間をかけて培ってきたのである。
ここでは、頻繁に利用するIF関数とそのネスト、自身が作成利用している管理用の送金情報ファイルを参考として紹介したい。未だに加減乗除だけのエクセル機能しか使っていないかもしれない田舎の経理屋諸君の勉強の一端になれば幸いである。
数学用語での説明はなるべくは避けるが、常識の範囲内で理解できる説明を優先する.。事例をエクセルで自身も入力し確かめてもらいたい。まず、以下の表をみてもらおう。
\begin{array}{|c|c|c|}
\hline \\
&A &B \\
\hline \\
1 &赤 &○ \\
\hline \\
2 & 空白 &✕ \\
\end{array}
エクセルファイルとしてA列の内容が赤 ⇒ B列に○、A列の内容がそうでない ⇒ ✕を出力という内容を意図している。IF関数をB1に、=F(A1="赤", "○", "✕")、B2に=IF(A2="赤", "○" , "✕")を入力している。IF関数の基本形は=IF(セルの条件, セルの条件に一致する場合の値や関数, セルの条件に一致しない場合の値や関数)である。A1は赤[セルの条件]が入力されているので、条件が一致してB1に○が出力されている。A2では空白[セルの条件に一致しない]であるから、B2に✕が出力されている。A2は空白でなく、緑や他の言葉が入ろうとも条件に一致しないのでB2には✕が出力される。関数の入力方法として文字列は
" "で囲む。また、B2セルで条件に一致しないときに何も出力しないのであれば、=IF(A2="赤", "○" ," ")とする。ただし、" "の部分は文字列を意味する。
では次にA1で赤のときB1に1、A1で青のときB1に2、A1で緑のときB1に3を、それらでもないときには何も出力しないとしよう。
\begin{array}{|c|c|c|}
\hline \\
&A &B \\
\hline \\
1 &赤,青,緑,黒 &1,2,3,空白
\end{array}
この場合には、=IF(A1="赤", 1, IF(A1="青", 2, IF(A1="緑", 3 ," ")))となる。1, 2, 3は数値なので" "は必要はない。IF関数を連ねている。関数の中に関数を組み込むことをネストという。英語でnestと綴り、『巣』を意味するが、関数という住処の中に関数の住処を作ってゆくという感覚だろう。ただ留意するのは( )の対応だろう。その対応が間違っているとエラーをエクセルが返してくれるのでよく見返すことだ。
IF関数を連ねるということは基本を思い出してもらいたいが、条件を次々に追加しているということであるのは理解できるであろうか?赤という条件、青という条件、緑という条件...という具合だ。
では次に、A1が赤か、青であったら○、以外は空白ではどうであろうか?このとき用いるのがOR関数である。数学での「または」、集合の \(\cup\) 記号で「結び」を表す関数である。表例はしないが、=IF(OR(A1="赤",A1="青"), "○"," ")と入力する。これも関数のネストである。AND関数もある。これは「かつ」、集合の \(\cap\) 記号で「交わり」を示す関数である。A1の値が3以上6以下ならOKで以外は空白と出力しよう。=IF(AND(A1>=3,A1<=6),"OK", " ")と入力する。
事例)1;売掛金管理表作成
複数税率を伴う事業であるから、税率の区分を自動判別できるようにしなくてはいけない。さあどうするか?商品コードによる解決とした。品名は多岐にわたるが、8%対象は接頭辞に『8』をつけた89,999以下のコード、10%対象は接頭辞『10』を含むコードで109,999万番台でやっている。IF関数、LEFT関数、VALUE関数、AND関数を利用する。LEFT関数で出力する値は文字列で、その値を数値変換する関数がVALUE関数である。数値変換する理由はもちろん、税抜価額に税率を乗じるのであるから、数値でなければエラーが生じるからである。検索セルをA2として、例えば、以下になるだろう。
=IF(AND(A2>=80000,A2<90000),VALUE(LEFT(A2,1)),IF(AND(A2>=100000,A2<=109999),VALUE(LEFT(A2,2))," "))
条件に当てはまる数字、82750や102500を入力して確かめてみよう。LEFT関数は最左方から見ての文字列である。LEFT(A2,1)とはA2の値を左からみて、1番目までの文字列を返せ、というコマンド(命令)である。
LEFT(A2,2)は2番目までの文字列を返すことになる。
事例)2:現金フローの作成と税務会計アプリとのAPI連携
現金収入及び現金支出ファイル作成に必要と思われる一般的な項目は借方・貸方区分、取引先名、費目摘要、税率区分、課税事業者と免税事業者の峻別であろう。これで企業内管理用では十分である。4年前まではこれで良かったが、このファイル自体が経理上のシステムに連結されておらず、5年前より税務会計クラウドアプリとエクセルの連携で新たに作りかえた。そのためには、アプリがどのような考えで仕訳を行ってゆくのかを、自身が完全に理解しなければならない。
概略を語ろう。システムには取引先名は登録番号、税区分は課税、非課税、不課税、事業者種は課税・免税、費目摘要、売上区分に番号を付与している。経理科目がそういった属性に紐づけされるのである。それを理解して、従来のエクセル情報を保持しつつ、システムへのアップロードに適う大幅な刷新を行った。適格請求書発行事業者登録番号はシステムに事前登録してある。
複数シートを用いる。科目コード、取引先コード、費目摘要コードが主である。借方1、貸方2とする。取引先はシステムの登録番号を用いる。一番の問題は科目をどうやって判断するかだろう。そこで思いついたのが費目摘要で科目を判断させることである。そして、元帳摘要も紐づけさせておく。刷新前に用いていた独自の考え方で、
「あ音:1」「い音:2」「う音:3」「え音:4」「お音:5」を母音の区別とし、「ん:0」として、子音は英字とした。東京なら{t53ky5}、{t53ky53}のようにする。一例だけ示す。例えば免税事業者に何か修繕をしてもらった。取引先は例えば(546)、費目摘要[1m40sy3z40]-[修繕費(例えば6254)]-[借方(1)]-[元帳摘要:現金支払 免税事業者]を登録する。現金は支出なので貸方と自動で来るようにする。費目摘要で接頭辞が1なので、税率10%とわかる。[m40]が免税事業者を意味する。また課税事業者区分「5」免税事業者税区分を「12」非課税「8」不課税「0」とする。消費税計算を[自]、[固]、[無]の3つに分ける。免税事業者仕入れの消費税(仮払消費税)は経過措置で3年間はありのままに計算した税額の80%、以後3年間は50%、以後課税仕入れは不可能となっている。
\begin{array}{ccccccccccccccc}
セルA & セルB & セルC & セルD & セルF & セルG & セルH & セルI & セルJ & セルK & セルL & セルM & セルN & セルO & セルP\\
計上日 & 取引先コード & 費目摘要 & 金額 & 貸借 & 税区分 & 税率区分 & 税額 & 入金 & 支出 & 借方科目 & 借方科目コード & 貸方科目 & 貸方科目コード & 元帳摘要
\end{array}
2行目に入力としよう。原始データの手動入力はA2, B2, C2, D2だけで、残セルは関数での自動計算とする。
貸借F2:=IF(VLOOKUP(C2,費目摘要コード!**:**,2,FALSE)=1, 2, 1)修繕費で借方1に紐づけしているので2がでる。つまり現金が貸方で現金支出である。
税区分:=IF(LEFT(C2,4)="1m40",12,IF(OR(LEFT(C2,1)=8,LEFT(C2,1)=1),5,IF(RIGHT(C2,2)="h2", 8 , )と入力しておく。免税業者より12がでる。費目摘要で接頭辞を1で消費税率10%、8で消費税率8%、費目摘要コードで接尾辞2個を"h2"(非を意味)とつけておく。といった具合で、コードの有効利用、条件を思案しながら関数を駆使し、かつ汎用性を考え作成している。
文字列、数値を何の気なしに用いたが、エクセルを新規で開き、任意のセルに文字を入力すれば、セルの最左方、数値は最右方に表示されるはずである。関数を入力して文字列か数値かを確かめるなら、書式は変更せずにまずは作成したほうが良いかもしれない。プログラミングもそうだが、データ自体の性質には注意が必要である。
僕の作成ファイルでは、DSUM,COUNTIF,VLOOLUP,TODAY,LEFT,RIGHT,RANK,TEXT関数等々様々なものと、このIF関数を織り交ぜて活用している。もちろん、疑問があればググって解決である。日頃の業務の中で「何かしら」の条件付けを用いれば、データを効率よく管理できることが多いと思っている。学校で培った数学論理は企業のリアルデータ(文字列を含めて)をコントロールできるすばらしい技術である。「知っている」ことは必ず大いなる力を発揮する。ここで挙げた基本論理は慣れしかない。私がよく口にするPractice makes perfect.である。
さて、少しは慣れてきたと思うので、僕が作成している相手先への振り込みである、送金情報ファイルを簡単に紹介しておく。昨今、横領問題がネットで賑わせている。わが社ではファイル作成し代表者に伺いをたてている。また送金後もサイトの送金予約・実行をプリントアウトし、確認してもらう。性善説は一切排除する姿勢が大切である。なんせ僕1人だけだからね。でも、しっかり意識して通帳を視認すれば一目瞭然なんだけど。
エクセルシートは2つ使う。一方に「抽出条件」という名に、他方は「送金・振替」とでも。ネットバンキングを利用するとしよう。まずは抽出条件の考え方だ。送金するとしたら、自身の銀行を自行とすれば、自行同一店内、それ以外で自行本支店、他行となる。1:自行同一店内、2:自行本支店、3:他行とする。送金料は当方負担か先方負担で、4:当方負担 5:先方負担とする。送金料は3万未満か以上で分けている。2:3万未満、3:3万以上とする。送金料を設定するために、そこで、送金金融機関コード+負担先コード+送金額コードをルールとした3桁の数字を作る。しかし、自行同一店内は無料であるので、単に1とする。「352なら他行へ先方負担で3万未満を送金する送金手数料」、「243であれば自行本支店へと当方負担で3万以上の送金手数料」と一目瞭然である。
取引先コードを作成して、送金先と負担先を入力しておく。送金先は滅多に変わるはずはないので、固定条件と同じだ。例えばA社の取引先コード:1、送金金融機関コード:3、負担先コード:4とする。3桁134でA社の支払いは他行宛てで、手数料は自社が負担する、と一目瞭然だ。
コード作成はでたらめにしてはいけない。きちんと情報整理し、出来得るならばコードの意味するところを瞬時に判断できるのが最も良い、というのが我が経験則だ。
以上の内容を持つ与件を作成後、他方のシートで相手先から来た請求額を入力するだけで、手数料が自動計算され、結果としての振替総額を出力するファイルを作成する。
\begin{array}{ccccccc}
\text{振込・振替 送金実行日 ○月○日 △曜日} \\
セルA & セルB & セルC & セルD & セルE & セルF & セルG \\
金融機関+負担先 & 3万判断 & 取引先コード & 送金先 & 請求額 & 当方負担 & 先方負担
\end{array}
先ほどのA社で考えてみる。入力行は3行目としよう。抽出条件でセルで左側から、取引先コードー取引名ー取引先コード+送金先+負担先の3桁)つまり、1 A社 134 と同行セルに入力済とする。また、送金料コードー送金料の順で縦に並べて入力済とする。
原始データ入力はC3、E3であり、他を全て関数で自動計算させる。C3に取引先コード:1を入力する。D3:=VLOOKUP(C3,抽出条件!○○:□□,2,FALSE)を入力しておくと、A社と表示される。VLOOKUP(検索値, 検索値を含めてのデータが存在する範囲, 表示させたい値がデータ範囲の列順で左方から何番目にあるか指定, 完全一致か否か)でここでは完全一致にしている。現在XLOOKUP関数が新たに追加されているが、自身では未利用である。抽出条件!○○:□□とあるが、手入力せずとも、そのシート範囲を指定すれば表示される。数式バーをみておく。
A3: =IF(C3=0," ",IF(VLOOKUP(C3, 抽出条件!○○:□□,3,FALSE)=1,1,VALUE(RIGHT(VLOOKUP(C3, 抽出条件!○○:□□,3,FALSE),2)))と入力しておけば、C3より数値34がA3に表示される。B3: =IF(E3>=30000, 3 , 2)と入力しておく。請求額が¥35,000とするならば、B3に3と表示される。
F3:=IF(C3=0," ",IF(A3=1,"同店無料",IF(VALUE(RIGHT(A3,1))=4,VLOOKUP(A3*10+B3,抽出条件!○○:□□,2,FALSE), )))と入力しておけば、請求額¥35,000に対して、3万円以上の他行宛て自己負担手数料が表示される。
G3:=IF(OR(C3=0,F3="同店無料",F3>0), ,IF(VALUE(RIGHT(A3,1))=5,VLOOKUP(A3*10+B3,抽出条件!○○:□□,2,FALSE), )))と入力しておく。このケースではG3は0表示となる。0表示したくなければ、エクセルオプションでゼロの非表示を選択しておけばよい。" "で空白であるが、文字列なので合計振替額をしたとき、エラーが生じるだろう。ただ、SUM関数では表示可能であるかもしれない。
この投稿ではメモ帳を使ってテキスト表示させているので、関数表示に誤記があるかもしれない、その点は容赦願いたい。概要を把握して頂き、紳士淑女の活躍を祈っている。