2010年7月25日日曜日

第153回目、SUM関数のニーズが高くなったぞ

○第153回目、SUM関数のニーズが高くなったぞ

 第143回目 ユーザー関数(条件付SUMPRO関数、その2)の中で、指定が一つのみであった場合、それはSUM関数とする、として、それを使っていたのですが、なんせ頻度がはるかに多くなったので、独立して、SUM関数専用のものを作ったらどうか、ということです。
 範囲を指定してからの処理なので、後は計算式を入れる場所の指定のみとなります。
 計算式の作り方は、条件付SUMPRO関数より単純なので省略します。

 知っていましたか…
 ショートカットを使ってのSUM関数の作りかたです。
 計算式を入れたいセルで、Alt+Shift+=をおすと、たぶんこうだろうということでエクセルが自動的に判断して、SUM関数の範囲を求めてくれます。範囲は仮設定なので修正ができます。
 単純な場合は、これも便利ですよ。
 ついでに、
 カンマを入れたいときは=⇒ Ctrl+Shift+!となります。
 ショートカットは非常に便利です。

2010年7月19日月曜日

第152回目、なじかは しぃらねーど…

○第152回目、なじかは しぃらねーど…

 どうしてかはわからないが…という意味でござる。ローレライの歌の文句ではなかったかな。

 今回は問題です。
 数字が展開されています。ひとつが4列構成で、40単位あります。(最低でも160列)
 明細は50行あり、その合計がとられています。合計行の下に、一部分、つまり、MM行からNN行までの小計もとられています。

 ここで問題です。最初は、MM行からNN行までの小計でいいでのすが、次の単位では、MM+1行からNN行までの合計と次々に範囲が少なくなって来ます。場合によっては、途中でこのような小計を取ることが無意味になってしまうでしょう。その部分の自動化まではまあよいとして、基本的に、このような小計をどのようにして求めますか、という問題です。
 小計を取る部分は4列中の2列のみです。
 また、シートにはその表のみがあるのではなく、上下左右に違う表が存在します。

 力技ならできることは確かですが、規則性があるだけにしゃくな気がします。

 戦略としては(大げさですが…)、シートをコピーして、回りを気にせずに求めたい計算式を作成し、計算式を元のシートにはコピーする、ということにします。
 小計をとる2列は、2列目と4列目とします。
 小計を求める行の最初は、10行目から50行目とします。
 まず、4列ごとの最初の単位で、2列目と4列目に、10-50行の小計を取ります。50行目は絶対参照としておきましょう。
 小計をとった1列目から4列目を(1,3列目は空白)、通常のコピー操作で残りの39単位にコピーします。
 この全体を、下に40行ぐらいコピーしましょう。
 すると、コピーしたものを見てみると、最初の行は20-50の小計ですが、次の行は、21-50の小計となっています。順に22-50、23-50…となっています。
 ここでセルを階段状に入れていきましょう。これは階段状のセルの挿入でできます。
 処理対象列を4列ごとにするので、2回の操作になるでしょう。挿入数はだんだん減っていくパターンとします。
 40単位目が「1セル、下に挿入」なので、一単位目は「40セル、下に挿入」になります。
 すると、1単位目の20―50の小計の横には、次の単位では、21―50の小計が並ぶことになります。その次の単位も同様です。このようにして求める計算式が横に並びました。
 明細と小計の間にある不要になった部分をセル削除します。コピー処理をしますので、コピー先に目的となる計算式が移るように、セルを挿入、削除していきます。
 このように小計の位置関係に注意しながら、元のシートの小計行にコピーします。
 これで求める計算式ができました。

 お分かりになったでしょうか。
 最後のコピーは、移植でもいいと思います。その場合は、セルを削除する操作が不要となります。

 ※元のシートの該当する表の下に何もなければ、同一シートで処理ができますので、シートのコピーは不要となります。

2010年7月10日土曜日

第151回目、複数個のコピー元をある規則性を持った場所にコピー(移植)する(その2)

○第151回目、複数個のコピー元をある規則性を持った場所にコピー(移植)する(その2)









 こんなのにはお目にかからないかと思いますが、お目にかかったときは大変ことになります。いわゆる"経過措置"というようなものです。

 支払う額を下げる必要が出てきました。
 今日からすぐに下げますというわけにはいかないので、経過措置を設けます。
 本来は20%カットします。でも現時点で制度に入っている人はカット幅を10%にします。また、いま入っている人でも、すでに15年以上いる人は、カットはしません。
 これを基に考えると、結果年度が経るにしたがって、80%のブロック、90%のブロック、100%のブロックが斜めに移行していくことになります。

Qus.あれー。三つのブロックになっているが、原理的には前のと同じじゃないでしょうか。
=⇒わかってしまいましたか。鋭いですね。ワッハッハッ…。
 三つに分けたのはカムフラージュだったのでした。
 これの眼目は、現在ある場所だけで処理を行う、形もできるだけ変えないということです。
 修正前はすべてのところに100%という数字が入っています。またよく考えると、ある以降はすべて80%が入ることになります。そこで、100%の終わったところ以降は、あらかじめ80%を入れておくのです。このような状態のところで、必要な箇所に90%を入れていけばよいことになります。
 一列目の必要なところに、90%を入れておき、それを斜めに移植していく、ということで目的のものが出来上がります。

 さて、この90%の箇所に色を付けるにはどうしたらいいでしょうか。
 まずは条件付き書式が考えられますね。
 通常の操作ではどうでしょうか?

【参考(条件付書式でのトラブル)】
http://support.microsoft.com/kb/959029/ja
Excel 2003 で Type に 8 (セル参照 (Range オブジェクト)) を指定した InputBox メソッドを実行すると、エラー メッセージ "実行時エラー '424': オブジェクトが必要です。" が表示される
現象
Microsoft Office Excel 2003 の条件付き書式を含む Excel ブックで、Type に 8 (セル参照 (Range オブジェクト)) を指定した InputBox メソッドを実行すると、次のエラー メッセージが表示されます。
実行時エラー
'424': オブジェクトが必要です。
回避策
RefEdit コントロールを使用して同じ機能を実装するように開発します。
状況
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。