社会不安障害:SAD、ボランティアとセカンドライフ

SADで会社を休職したが、一年で復帰し、無事定年を務めて、その後の生活とボランティアについて気ままに掲載中

エクセルのVBAプログラミングの課題

2009-07-16 07:02:20 | ITについて

エクセルのVBAで販売実績データをプログラミングする事になった(その4)の続きと言うか、エクセルの欠陥と言うか最大の課題の話となるのかも知れない。以前エクセルの関数を利用して効率化を図ろう!の中や、エクセル(データベース関数DSUM関数とSUMPRODUCT関数)でエクセルのセルの型の話を掲載しているが、VBAでプログラムを組む時に、結果的にエクセルでのセルの型が最大の問題となってくる。これは、当社のデータベースでも、大きな課題となるのだが、プログラミングやセル埋め込み型関数処理を行なう上で、課題となっている。

前回、エクセルのVBAで販売実績データをプログラミングする事になった(その4)でアルゴリズムを考えても結局、業務の流れを知らないと、その処理は出来ないと言う話を掲載したが、今回もと言うかエクセルでの最大の問題は、レコードの各フィールド(つまり各セル)の、型が何になっているかに尽きる。

複数のシステムからデータを抽出できるが、大抵問題となりそうなものは、VBAの問題ではなく、データベースの構築であるが、そのデータベースの構築がなされていても、CSVやエクセルのデータにメインフレームからダウンロードした時に、その各フィールドがどの形式になるかである。当社の販売売上げシステムの各フィールドを見ていくと

  1. 受注番号はアルファベットが含まれので、文字列となる為、VBAでもそのセルを設定するなら、Stringとなる。
     
  2. 受注番号に付く枝番(子番号:納期や納入場所が異なる為、同じ発注番号でも、分けて管理される)は、00から01、02と追加されるが、これはあるDBではStringであり、一方では数値(つまりIntegerかLong)となる。
      
  3. 日付データは、日付データであるが、日付データとなっているのか?これはエクセルの関数を調べて見ると、文字型か数値型であり、VBAで処理する時には、Stringか数値(IntegerかLong)となる。

上記は一例に過ぎないが、VBAでプログラムを組む上で、エクセルのバグに等しい数値と文字型が目で見ても区別できない、仕組みに最大の課題が残されており、これはVBAを使っても同じ課題となった。

最もセルに埋め込む関数処理型と異なり、VBAでは上記を認識していればどうにでも、処理は出来ると言う事はわかった。この辺はエクセルの関数の限界でもあり、致命的バグでもあるが、それを認識してさえいれば、VBAではどうにでも処理出来る事は、関数処理との大きな差でもあるのだろう。

一番大きな事は、指定の列や行のデータを書き換える事が出来る、もちろん削除も含めてであるが、この差は余りにも大きい。

一方で、VBAでプログラムを組める人間が社内、親会社を含めてどれだけいるか?殆どいないと考えた方が良さそうでもある。


最新の画像もっと見る

コメントを投稿