Excel関数の世界へようこそ

このブログは私が在職中に業務の改善で考えたExcel関数を思い出しながら解説するブログです。マイペースでぼちぼちやります。市販の解説本やヘルプには載っていないテクニックも使用します。狭くて深い領域で、一部の人しか参考にならないかもしれませんが、他に応用できる事もあると思います。

一度投稿した記事は、後で誤りを訂正したり、分かりやすく直す事があるかもしれません。

<このプログの関数で出来る事>
・Excel関数で減価償却費をリアルタイムに高速計算する
 現有固定資産データから今後の減価償却費と簿価を計算
 設備投資予算から今後の減価償却費と簿価を計算
 

・減価償却費を減らす為の不要となったサービス用固定資産判定

上記2項をマスターすると、将来の減価償却費と廃却による特別損失のシュミレーションが出来ます。

ご意見、ご希望をお寄せ下さい。メールはelpinojp-bg()yahoo.co.jp宛に、()を@に変更してお送り下さい。

2013年1月7日月曜日

便利な検索2:変更されたセルを検索する

 今回は、二つのワークシートを関数を使って比較し、どのセルが変更されたかチェックする方法を紹介します。私が独自に考えた方法で、解説本には載っていないと思います。この方法を、私は仕事でこんな事に使っていました。

1.先月の固定資産台帳と今月の固定資産台帳を比較(連続した2ヶ月でなくても別に構わない)
  ・固定資産の登録が正しく行われたかチェック
    (新規固定資産、改造資産、移管されて増えた資産が分かる)
  ・固定資産の廃却や他へ移管されて減ったのをチェック
   (減った固定資産が分かる)
  ・固定資産データの訂正が正しく行われたか。名称の訂正等。

2.Excelファイルをメール添付でチェック修正依頼した時、どこが変更されたかが分かる。
  時間が有れば順番にメールをリレーして順番にファイルを直して貰えば良いが、時間が無い時は並行して頼むしかない。この時、各返事で変更点がはっきり表示されていれば良いが、往々にして変更点の表示漏れが有る。膨大なセルから変更された所を見つけるのは大変な作業であるし、チェック漏れも起こる。

その他、いろいろ応用が効くと思います。また、これ以外にもっと良い方法も有ると思いますが、とにかく期日までに仕事を片付けなくてはならない環境だったので、何としてでもという事で考えました。

<チェックの手順>
1.元のファイルと比較対象ファイルを区別できる様にしておく。
  ①比較対象ファイルのワークシートに色を付ける
   比較対象とマージしてからソートすると、縞模様になり、この縞模様が乱れた所が削除や追加された行である事が視覚的に分かります。データ比較を思いつくまでは、この方法で視覚的にチェックをしていました。

  ②両方のファイルを分離できるデータが無い場合は、データを追加する
   例えば、行に連番を付け、元ファイルは1番から、比較対象ファイルは1,000番から(行が1,000個以下の場合)一連ナンバーを振っておく。
  これは、比較のために両ファイルをマージするので、失敗した時等にすぐ両方を分離して元に戻せる様にしておく為です。

2.元ファイルと比較対象ファイルをマージする。
  元のシートの後ろの行に比較対象シートをコピーする。
  両方のシートをまとめてソートする。この時のキー項目を工夫して、きちんと元のファイルと比較対象ファイルが交互に並ぶ様にする。1-②で加えた行のNo.も利用する。

3.複数の列を同時に比較したい場合は、比較をしたい列を連結した行を作る(前回の関数参照)
  下のサンプルシートではB列にその関数が入っている。

4.連結した値(変更をチェックしたい項目)の前後関係をIF文でチェックする。
  この時、当然ですが簿価は含めてはいけません。償却が済んでないと毎月変化するのですから。
  チェックの原理・・・背景が緑色部分は比較対処ファイルで、無色が元ファイル

   A←自分の後ろに自分と同じ物が居る←┬-変更無し
   A←自分の前に自分と同じ物が居る←-┘
   B←Bが1個しか無い。前にも後ろにも自分と同じ物が居ない・・・追加された
   C
   
   ←Dが1個しか無い。前にも後ろにも自分と同じ物が居ない・・・削除された
   E
   


つまり、自分の前か後ろに自分と同じ物が居ればOK(変更されていない)と判断できます。
下のサンプルシートでは、H列にこの式が入っていて、H4のセルに
=IF(B4=B3,"",IF(B4=B5,"","変更"))
もし、自分と前が一緒だったらブランク、そうでない時は、もし後ろが一緒だったらブランク、そうでない時は、”変更”の文字を入れる。
という関数を入れて、これを下の方へコピーしています。
B列(=C4&E4&G4という関数でC,E,Gの3列を結合している)を比較対象にしています。
このため、それ以外の列は異なっても検出しません。

注)この式を記載した後で、ソートとかで順番が変化する時は、式を値に変更しておく必要が有ります。これをしないと、変化した並びで前後関係を見てしまうので、でたらめな判定になってしまいます。
これを避けるには、具体的にはコピーをして、「形式を選択して貼り付け」で「値」を貼り付けます。

では、実際のワークシートをサンプルで見てみましょう。下の画像をクリックすると大きいサイズで表示します。




 変更検出の”I4”セルには”B4”セルの前後関係をチェックする式=IF(B4=B3,"",IF(B4=B5,"","変更"))が入っており、自分の前か後が同じ内容ならブランク、どちらも異なっていると”変更”という文字が出る様にしています。この式をI5以下にコピーしてあります。

 No.113は新(緑色)しか無いので、追加されたアイテムだと分かります。
 またNo.41は旧(白色)しか無いので削除されたアイテムだと分かります。
 No.125は次のNo.24と比べて下さい。B列の名前検索で両者を比べるとジンバイウ→ジンバイに種類1の名前が訂正されている事が分かります。


私は以上を応用して、毎月固定資産台帳が正しいかチェックしていました。


<重要な注意事項>
異なるコンピュータシステム(基幹システム等)からダウンロードしたデータに含まれる見えない(表示されない)文字コードについて。

 見かけは全く同じなのに、固定資産台帳が異なると式が判断してしまう事が何度か有りました。  固定資産台帳は基幹システムから権限を持った人にダウンロードして貰って電子メールで送ってもらっていましたが、どこかで表示されない文字コードが入り込んでくる事がありました。

 これを調べるにはCODEという関数を使えばできるのですが、難しくて長くなる(コンピュータがどの様にして動くか=マシン語の話になる)ので省略します。

 この様な事態を回避するには、表示されない無効なコードを削除するCLEANという関数を使えば出来ます。文字列から印刷できない文字を削除してくれます。空いた列にCLEAN(セルのアドレス)と入れて、これを下の方にコピーすると印刷できない文字が除かれたクリーンなデータが出来ます。但し、これは文字列として見えていますが、関数で計算した結果なので、この内容をコピーして値で貼り付ければ、クリーンなデータとなります。

以上です。では次回は重複を取り除いて、件数を数える関数でも思い出して紹介しましょうか。