クラウドとVBA

テーマ:
数年前のVBAといえば、クラウドではありえなかった。
数年前からOfficeがクラウドされたりしてても、あくまでもExcelの共有であったり。もっと言うとExcelVBAもxlsxではなくxlsmでないと保存できない、とかになり、かつ、ダウンロードしたら許可しないと実行できないとか、いろいろある。
 
確かに色んなことができるがゆえに守らないといけないと思う。しかし、どこまで何をするか、を決めてさえいれば、そこまで大変ではないのではないかなとも思う。
そのあたりをやり始めているのがGoogleなのかな、とも思う。
 
VBAはとても強力な言語ではあるが、敢えて強力ではない(私の偏見)のgoogle docsで今後はもしかすると強いのかな?とも思う。
強力すぎるとセキュリティホールになりかねないからだ。
 
このあたりは追いかけていきたいと思う。
 
AD

少子化が言われて久しい。大家族に優しい税制ではないこともあり、仕方ないと思う。

ということは、必然的に労働人口は減る運命にある。

これから10年後、20年後は、確実に労働人口は減る。その際の労働人口不足にどう対応すればいいだろうか?

 

策はいくつかあるあろう。

・就業できる年齢を引き上げる

・海外から労働者を受け入れる

・女性が結婚/出産しても働きやすくする

 

こういう策はよくある。しかしこれらは「就業人口を減らさない」策だ。これも一手だろう。

しかし「就業人口が減ったとしても大丈夫」な策も必要ではないか。

 

今の段階で派手ではなくとも、社内の事務効率が5%でも10%でもよくなるなら、それはそれでよく、将来的により効率的にしていくようにすれば10年で半分とかの事務量になることも十分考えられる。

 

それを可能にするのがVBAではないか?と思っている。プログラム言語というよりはツールとして使える上、習得するための間口は広いからだ。

今年から来年からは、そのあたりに力を入れられればと考えている。

 

 

今の契約先ではチャットツールを使っている。

傾向として

チャットで饒舌なエンジニアほど仕事しない

と思う。

 

チャットツールではいろんなチャンネルがある。息抜き的なものがあっても全然かまわないのだが、いろんなところで饒舌な人ほど「忙しい」と言う。

 

なら、チャットを減らせばいいのではないかと指摘すると、「チャットはそれほどしていない」と主張する。

 

チャットを否定はしない。むしろ便利なシチュエーションも多々ある。しかし、ほぼ個人同士のチャットなのに、すぐ横に居るのに、チャットの必要があるのか?等々、使い方を間違っている人ほど「チャットはそれほどしていない」という傾向にあるようだ。

 

ここまでくれば病的なのかもしれない。

一緒に仕事をしている人に、プログラミングは物凄く優秀な人がいる。簡単なものなら話しているそばからコーディングし、仕上げてしまう。それも、かなり早い。

 

しかし、設計経験がない。どう教えようか。

 

悩んでいるところ、とりあえず設計書を作ってもらった。

あー!なるほど。

 

どういうことかというと、バッチ設計書、DB設計書、画面仕様書、を作ってもらったのだが、「整合性がきちんととれていない」のだ。

これは、各論には強いが、総論とか全体の整合性という点が弱い、ということだ。

 

そこで、全体でデータがどう流れるのか、まず確認して、ならそれぞれが何をすればいいのか、を学んでもらうことにした。

そのあとに書いたものを見ると、これまでとは比べ物にならないくらいの状態であった。

 

全体が見えて、それぞれバランスよく理解ができていて、初めてまっとうな設計ができるのだなと、改めて感じた。

 

 

子供は4月2日に産め

テーマ:

子供は4月2日に産むのがよいと思う。運勢が、星座が、とかではない。単純にお得だから。

 

お酒は二十歳になってから。選挙権は18歳から。というのが法律である。これは満年齢よるもので、同じ学年の人より先取りができる。

が、これは小さな理由。ただ、学年ではなく満年齢を採用しているものがある、というのはひとつ重要。

 

さて、大きい方の理由。地域によっては乳幼児や小中学生の医療費が無料である。これは満年齢ではなく学年を採用している。

例えば小学六年生まで、とすれば 4/2生まれだと12歳と364~365日(うるう年の場合)の間適用されるが、4/1生まれだと12歳の誕生日の前日までの適用となる。実にほぼ1年、差が出る。

 

 

自治体等の助成関係は学年を採用していることが多いので、今の制度なら4月2日に子供を産むと、親としては一番お得なのではないか。

 

 

 

先日の問題 の問1の回答

 

------------------------------------

問2 印刷のタイミング

1. 印刷対象のブックを選択したらシート毎に順次印刷を行う。印刷処理が終わったらすぐに、次のブックを選択する。

2. 印刷対象のブックを選択したらそのブックのシートをすべて選択し一度に印刷を行う。印刷処理が終わったらすぐに、次のブックを選択する。

3. 印刷対象のブックを選択したらシート毎に順次印刷を行う。印刷後に待ち時間を設ける。待ち時間は15秒程度とする。

------------------------------------

 

これも過去の失敗談に基づく。

2001年とか2002年くらいだったろう。データベースの定義書をDBMSから情報を取得して作成する、というもの。

DBMSは大型汎用機上にあるDB2で、定義情報をODBC経由でExcelで取得してローカルのDB(他にインストールできるものがなかったのでAccessを使用)へとため込む処理と、取得したデータをExcelの定義書として作成し管理する処理と、特定のテーブル定義だけを出力しても、全体で通し番号として付与しているページ番号を正しく印刷する処理を作成した。

 

最後のものには当然、一気に印刷する機能も付けていた。

一通りテストを終え、一気に印刷するテストを実施した際、すぐにスプールがパンクした。これ、スプールせず印刷データをプリンタに直接送ったとしても、プリンタ側のバッファを食いつぶすことになる。

 

つまり、大量の印刷をする場合には、一気にデータを送り込むのではなく、中断させながら送る必要があり、正解は 3.となる。

1.も2.も、スプールを食いつぶすことには変わりない。

 

 

先日の問題 の問1の回答

------------------------------------

問1 ブックの開き方/閉じ方

1. 印刷対象のブックを印刷前にすべて開く。印刷がすべて終了したときにすべて閉じる。

2. 印刷対象のブックを印刷直前に開き、印刷後に閉じる。これをブック数回繰り返す。

3. 印刷対象のブックを印刷直前に開き、印刷後は開いたままにする。印刷がすべて終了したときにすべて閉じる。

------------------------------------

 

考慮すべきことは何だろう?

一般ユーザーであれば、「確実に印刷されること」が重要だろう。その次に「速いこと」かと。

 

1997年か1998年のことだ。COBOLのプログラムのコンパイルリストを印刷するのではなくデータとして大型汎用機からダウンロードし、2000年問題で影響しそうなところをピックアップするための処理をVBAで作成した。

定義とその利用箇所をVBAで関連付けし、年月日に関するところを抜き出し、その中でも桁数の足りないところを色付けして影響調査をプリントアウトする処理だった。本数は800本くらいだったか。

 

その時、最初に行ったやり方が 上記の3. であった。しかし、夜10時ごろ、実行してすぐ帰ったのだが、翌朝10時で終わっていなかったのだ。

検証したところ、10ブック目を開いたあたりから急激に速度が落ちていたのだ。

そこで、上記2.の措置を取ったところ、問題は解消された。

 

つまり、正解は 2.となる。

1.はおそらく、全部OPENするまでに相当な時間を要するか、途中でエラーになるだろう。

 

PCのリソースは有限であること。不必要なメモリは解放してやること、が大量の処理が行われる場合には必要である。

先日、gmailを今一つと書いたが(http://ameblo.jp/tech-note/entry-12210404841.html)、おそらくはメーラーを使うのがいけないのかと思う。

 

そもそもpop3とimap4とで、同じように考えてはいけないのではないか。

 

pop3はローカルにメールを取り込むもの。基本はサーバーから削除する。一通一通がそれこそ「手紙」のイメージだろうか。振り分けるにしても、その振り分け先にある、という状態になるメーラーがほとんどだし、それに慣れているから違和感は感じなかった。

 

imap4はサーバーにメールを置くもの。gmailを使うまではこのプロトコルを使ったことはなかったので、正しい説明になっているかわからないが、メーラーが追いついていない、という気がしている。

 

裏を返せばgmailは「サーバー上にある」というメリットを最大限に活かしているようにも思う。

・googleだからからだろう、メールの振り分け、というよりは必要に応じて検索を使えば事足りる。

・もちろん振り分けもできるが、タグ(複数つけられる)先にどこでも振り分け可能。ただ、物理的に分けているのではないので、例えばメールを削除するとどの振り分け先からも削除される。

・処理が終わったメールはアーカイブに突っ込めばよし。アーカイブ後も検索はできる。

 

他のメールサービスではそこまでは難しいのではないか。

 

たまには趣向を変えて、問題なんぞ作ってみました。

 

問題

 

大量のExcel(ブック数は2,000程度、各ブックのシート数は1~5枚程度、1ブックのものをすべて印刷しても10ページ程度、すべてのシートを印刷、印刷レイアウトは調整済み)を開いて印刷する、というVBAの処理を作成する場合、次のうち適切なものに近い設計はどれか

ただし、記載されていない条件はすべて平等であるものとする。また、実行するExcel VBAのブックは印刷ではない。ブックのリストはすでにあり、実行に問題はないものとする。

 

問1 ブックの開き方/閉じ方

1. 印刷対象のブックを印刷前にすべて開く。印刷がすべて終了したときにすべて閉じる。

2. 印刷対象のブックを印刷直前に開き、印刷後に閉じる。これをブック数回繰り返す。

3. 印刷対象のブックを印刷直前に開き、印刷後は開いたままにする。印刷がすべて終了したときにすべて閉じる。

 

問2 印刷のタイミング

1. 印刷対象のブックを選択したらシート毎に順次印刷を行う。印刷処理が終わったらすぐに、次のブックを選択する。

2. 印刷対象のブックを選択したらそのブックのシートをすべて選択し一度に印刷を行う。印刷処理が終わったらすぐに、次のブックを選択する。

3. 印刷対象のブックを選択したらシート毎に順次印刷を行う。印刷後に待ち時間を設ける。待ち時間は15秒程度とする。

 

解答はそのうちアップする。

iPadのトラブル

子供が教育教材をやっているが、学習にiPadを使うもので、課題を提出したりできる。

自分たちが子供の頃からすればうんと技術が進んだなと思う。

 

さて、先日「課題が提出できない」と行ってきたので「キャッシュとかいらないデータとか消してみたら」と伝えた。

しかし、直らないそうなので、休みの日に見てみた。

 

課題が提出できない以前の問題で、無線のアクセスポイントにはつながっているがインターネットにつながらない状態であった。

 

しかし、他の機器は問題なくつながる。家には無線LANのアクセスポイントが2つあり、セグメントを変えてある。片方がだめならもう片方に、ということをやってみたが、だめであった。

iPadを再起動してもだめ。

 

故障かな、と思ったが、念のためiPad側のIPアドレスを表示させ、IPアドレスの取り直しをした。ここで気づいたのだが、セグメントの違うアクセスポイントなので、アクセスポイントを切り替えてIPを取得しなおすと当然違うIPアドレスが払い出される。しかし、IPアドレスが変化していないのだ。

 

いったんアクセスポイントをiPadから削除し、再認識させると問題なく動くようになった。

 

まとめると、iPadではIPアドレスが正しくリフレッシュできない状態になることがあるらしい。そのときはアクセスポイントをいったん削除すると正常に動作するようになる、ということのようだ。