子宝どっとこむ

 

 (Excel)VBAで作られたゲーム

ExcelVBAでどんなことができるのか(どんなことまでできるのか)を知る上で、VBAで作られたゲームを体感するのが一つの手だと思います。そこで、VBAで作られたゲームをご紹介します。

VBAアクションゲーム?Excelで動かそう!というExcel派にとっては素晴らしく、頼もしいサイトが存在します。ここでゲームをダウンロードしてゲームを体験すると、「ほー、Excelでここまでできるのか!」という驚きがまず訪れることだと思います。実際、私もインベーダー、パックマン、ディグダグ、ラリーXなど、懐かしの名作を無料でダウンロードして体験したときは思わず声を上げてしまったぐらいです。

懐かしの名作だけでなく、その他にもなかなかの秀作がラインナップされています。

 (Excel)ピボットテーブルの使いどころ

ピボットテーブルはExcelらしさの最たる機能だと思います。活用のし甲斐のある非常に優れた機能であり、且つ、使い方もさほど難しくはありません。しかし、ピボットテーブルが活躍している場が、さほど多くはないと思うのは私だけでしょうか。

 (Excel)ブックの共有についてちょっとだけ考察

多人数でデータを入力する場合、あるいは少人数でも短時間の間にデータを入力する場合、Excelは通常排他処理となるため、不向きです。このような時、Accessでデータベースを構築するのが安全ですが、手間がかかりすぎます。

そんな時、手軽な選択肢として、ブックの共有があります。

手軽な選択肢なので、是非とも活用したいところですが、手軽な分、留意すべきこともありますし、機能が制限されてもいます。ということで、ちょっとだけブックの共有について考察してみました。

 (Excel)あるかないかをCountIF関数で調べるわけ

あるデータがテーブル範囲の中にあるのかないのかを調べたい場合に、CountIF関数を使うわけですが、Match関数でもできますし、むしろMatch関数の方が直感的に分かりやすいのに、なぜCountIF関数を使うのでしょうか。

CountIF関数の本来の趣旨は条件に合致したデータが何個あるかを返す関数であり、あるかないかを調べる場合、返り値がゼロかゼロでない(1)かで判定し、趣旨に照らすと少しトリッキーな用法と言えなくもありません。

ということで、なぜ「あるかないかを調べたい」場合にCountIF関数を使う伝統が生まれたのかを考察してみることにしました。

 無料でPDFファイル作成する

知っていると知らないとで段違いに世界が異なるソフトの一つにクセロの瞬間PDF ZEROが挙げられると思います。個人でPDFファイルを作りたくなる機会はあまりないかもしれませんが、業務ではPDFファイルが作れると便利なときというのはたくさんあるはずです。無料で使えるとは思えないほどの高機能なので、知らなかった方はすぐにダウンロードすべきでしょう。

無料版は有料版と機能面ではまったく差異がないとの事で、以下の点だけが異なると言えます。

  • ライセンス情報取得時にメールアドレス等を開示しなければならない(無料)
  • PDFに変換する際、インターネット広告がブラウザに表示される
  • インターネットができない環境では使用できない

これらはどれも、以下に挙げるその恩恵に比べればたいした制約でもありません。

 (Excel)入力規則のユーザー設定

入力規則はExcelファイルの利用者を適切にガイドするには非常に便利な機能で、他人に配布する場合は勿論のこと、将来の自分に対するメッセージとして積極的に活用したい機能です。

入力規則はデフォルトのスタイルが『停止』となっており、この場合、規則に違反した入力を許しません。それがよいケースも多いのですが、例えば列全体に入力規則をしてもタイトル行だけは規則と異なる値(タイトル)を入力しますので、その場合にわずらわしいことがままあります。

このような、「ルールは(警告して)明確にしなければならないが、例外を認めたい」場合には、スタイルを注意に変更するのがよいです

さて、入力規則は、数値範囲や文字列数、リストなどが一般的ですが、「数式の返り値が真になるときのみ許可する」こともできます。

さらにマニアックに入力規則を極めたい方はエクセル技道場を一読するとよいです。説明は最小限度に止まっていますが、参考にすべき内容が多いと思います。特にリストでセル範囲を指定する場合にF3キーを押すというのは役に立ちました。

総合学習参考サイト

 Index関数とIndirect関数の上手い組合せ

Indirect関数は大変便利な関数なので、つい多用しようとしてしまいますが、使い方(数式)が美しくないと後で読み返すのが大変な関数の一つです。Indirect関数でやりたいことの多くは、Index関数でもできることが多いので、先日Index関数の活用をお勧めしました。

しかし、Index関数というのが理解は簡単にできるものの、なかなか実務の場でこれを使おうと思う機会が少ない人には、どういう使い方ができるのかがイメージしにくい関数の一つかもしれません。

ということで、Index関数の上手い活用の仕方をご紹介しておきたいと思います。

 (Excel)Sum系関数の使い分け

Sum系の関数ではSum関数、SumIf関数、SumProduct関数、SubTotal関数、DSum関数が挙げられます。これらの使い分けの目安を考察したいと思います。

合計を出したい

とりあえず合計が出ればよいというのであればSum関数が最も手軽で手っ取り早いのは当たり前です。

積の合計を出したい

単価×数量の合計を出したい場合など、単価×数量の結果を表示させた上で合計欄を作ることが一般的です。縦×横×高さのデータがあり、体積という列を用意する場合も同じです。この場合、普通にSum関数で間に合います。

しかし、「データシートにはデータだけを格納したい」という欲求や、「いちいち数式を書いてたらファイルサイズが大きくなり、メモリも食って重いので嫌だ」という不満が生じてきている場合、要するに印刷する表を作っているのではなく、合計結果のみを取り扱いたい場合にはSumProduct関数が役に立ちます。

ある(単純な)条件に合致した合計が欲しい

男性のみを集計対象とした合計や、名古屋支店の合計を求めたい場合など、一つの条件に合致した集計をするにはSumIf関数が便利です。条件は値が一致した場合以外に複雑な条件式を記述することができます(=">="&AVERAGE(I5:I13))。しかし、SumIf関数で複雑な条件を作ろうとした場合、作る際には神がかっているので作れますが、後で見返したときは自分で作ったのが信じられないほど難解なもので、ましてや他人にはさっぱり分かりません。

したがってSumIf関数は条件が単純である場合に、限った方がよいでしょう。

複雑な条件に合致した合計が欲しい

条件が複数ある場合や、SumIfで難解な条件式を書こうとしているならば、Dsum関数を習得する方が手っ取り早く、後で見返したときも分かりやすいですし、条件式の変更も容易でお勧めです。

Dsum関数に慣れておくと、オートフィルタでできないフィルタをしたい場合のフィルタオプションや、VBAでのAdvancedFilterメソッド、あるいはAccessなどの外部データの取り込みの際に役立つでしょう。

オートフィルタと連携させて計算したい

オートフィルタで抽出した結果の合計を出したい場合などは、SubTotal関数を使えば目的の結果が得られます。

SubTotal関数は引数によって様々な計算ができ、フィルタで非表示になったセルだけでなく、手動で非表示にしたセルも集計対象から外したい場合にも100番台の引数を付けることによって実現できます。

 Indirect関数、Index関数、入力規則

indirect関数は便利な関数ですが、あまり美しい関数ではなく、indirect関数で実現したい目的はIndex関数で実現できることが多いため、Index関数を(セル範囲に名前を付けて)活用することをお勧めします。indirect関数が美しいと思える時は、入力規則のリストを他のシートから参照するときだけです(「Excelでお仕事!」)(今のところ)。

上記「Excelでお仕事!」で説明している入力規則でのIndirect関数の活用の仕方は少し中途半端で、「関東地方」シートの「東京都」の列(6列目)の2行目から最終行までを「東京都市区町村」とでもセル範囲を与えておき、入力規則のリストには「=INDIRECT("東京都市区町村",false)」と入力すれば済みます(あるいは「=INDIRECT("関東地方!東京都市区町村",false)」)。

さらに、「関東地方」シートがアクティブでなくなったときに発動するVBAプログラムを作っておき(Worksheet_Deactivate)市区町村の追加削除によって範囲名が可変するようにしておくとベストですが、この投稿は中級を対象にしていますので別の投稿で述べたいと思います。

 ExcelでhtmlファイルをWebサーバーにアップロード

商品担当者とWeb担当者は通常分かれていると思います。

商材に関するルーチンの変更(価格改定や売り止め)の都度、商品担当者がWeb担当者にWebの更新を依頼するのは実際面倒です。

これを効率化するために、Webデータベース、社内データベースを連携させる大がかりなシステムを構築するのもお金の無駄です。他に、Webデータベースを構築して、ブラウザでデータを入力できるようにして、それを担当者に更新してもらうというのがありますが、ブラウザの入力というのは手間がかかりますし、融通が利きにくいです。

そこで、定型化されたhtmlファイルはExcelで生成し、そのままFTPでWebサーバーにアップロードする方法を解説したいと思います。