溜池界隈で働いていた頃のこと。IBM汎用機上でCOBOLやREXXでツールをちまちまと作っていましたが、データベースの仕様書を自動的に作成したいという話が出てきました。




最終的にExcel形式であればよいとのことで、汎用機側でテーブル定義のエクスポートデータを作成し、PCにインポートしたデータをExcelに読ませようという方針であった。手作業が多いのは嫌なので「汎用機から直接データを引っ張れたらラクだよな」と思いつつ、ダメ元でデータベースチームに相談したところ「運用側で定義さえすればアクセス可能だよ」とのこと。言ってみるものである。




ただし、直接貼るだけではない。例えばコードが 1 なら Integer などの変更くらいは想定していた。が、定義表をいくつかまとめて印刷したり、間に注釈の紙を入れてもそのページ数分飛ばしたページ番号をしたい、などと注文の多い料理店状態になってきまして、処理を簡素化するために取込んだデータをいったん Access に突っ込んで処理することにしました。




ここで問題発生。




汎用機から引っ張ってきた際に order by 句を書いていたのだが、いったん Access に突っ込んで同じ order by 句で取得すると並び順が違うことがありました。

片や EBCDEC、片や SHIFT-JIS。前者は数字よりアルファベットが小さいと判断しますが、後者は逆になっていまいます。


文字コードが違うとこういう部分で苦労することがあります。





で、どうやったかって?そりゃ、ソート順を汎用機側に合わせるため小細工をして乗り切りました。





C++におけるコーディング規約がまとめられている。VBAにそのまま使えるかどうかは取捨選択する必要があり、このブログでは概念的なものとこの書籍にあるような詳細な部分とをまとめられれば、と思っている。

まとめ方やトピックスの参考にしている。


ただし、C++、せめてCが読めないと辛い。表記を考えるとこの書籍のJava版があればVBAで参考になりそうである。


C++スタイルブック





他の言語に触れることでVBAのコーディングの幅が広がった経験がある。




Javaは開発者が抜け、仕方なくメンテナンスをすることとなり覚えた。それまでオブジェクト指向の言語はロクに理解せず使っていたが、Javaで開眼した、といってもよいかもしれない。


この経験から「クラスモジュール」の使い方をマスターした。今ではクラスモジュールを使うことでコードをかなり簡潔に書けるようになった。もうクラスモジュールを使わないコーディングなんて考えたくもない。




更に、Javaをメンテナンスしている際には使わなかったが、Javaにはデザインパターンというものがある。これは当初「VBAはオブジェクト指向でないから適応できないだろう」と思っていたが、クラスモジュールを使っていて「もしかして使える?」とイテレータというパターンを試したところ、うまくいった。




ただ、失敗したこともある。




VBAにはSet/Get/Let Property というものがある。これをよく理解していなかったので使ったことが無かったところに Java でよく使われる Getter/Setter というものを学んだ。なるほど!と使ったはいいけれど、後々調べると、Set/Get/Let Property を使った方がよほどシンプルであった。