2012年10月14日日曜日

○第170回目 飛び飛びの足し算がしたい

 むしょうに飛び飛びの足し算がしたい!
 というときはありませんか。飛び飛びといっても、当然に規則的になっているものです。
 例えば、月ごとにA商品、B商品の売上金額があります。1年たったので、それぞれの合計を出したいというケースです。(月別のデータは、たてに展開されているとします)
 力技でやっていきましょうか。
 通常は、どこかの列に1,2と入れておき、SUMIFで、1のものだけを足す、2のものだけを足すという計算式にします。
 項目は少ないですが、次のような計算式になります。
 =SUMIF(A12:A19,1,B12:B19)
 ここではA列に1,2を入れておき、B列が集計したい金額となっています。
 もう少し汎用的にして
 =SUMIF(A12:A19,a21,B12:B19) という書き方もできます。この場合は、a211を入れておいてください。
 また、=SUMIF(A$12:A$19,A21,B$12:B$19)としておけば、コピーができます。
 このやり方ですと、加算する行が不規則な飛び方になっていても大丈夫です。
 マクロよりもこのやり方のほうがスマートですね。
 おしまい。ではかわいそうです。
 
 
 まあ、半分余興として付き合ってください。
 力技方式をマクロで作ってしまいましょう。
 流れです。
 1.計算式を入れたいセルで実行します。
 2.第一項目を指定する
 3.第二項目の方向と飛び数と計算対象個数を入力する
  横方向が多いので、縦の場合は*をつけることにします。個数は-の後に指定します。
  例えば、2-6とかです。飛びはマイナスもあるので、-3-6という指定も可能とします。
 ※逆指定(計算式の入るセルからではなく第一項目からの指定)も可能とします。逆指定は/を入れます。
 ※計算式のあるセルと計算項目は同じシートにある必要はありませんが、計算項目はすべて同じシートにあるものとします。
 
 
 これらの情報から、加算する項目の座標(A1形式)をもとめ、それらを"+"でつなげていけばいいのです。
  Cells(gyo1, retu1).Address で座標(A1形式)を取得することができます。
 この中の、行数と列番号を変えて、座標を取得していけばいいのです。
 

0 件のコメント: