• 締切済み

【Excel】 週集計の自動化を目指しています

【A表】●月○日週          A店      B店      C店        販売 在庫  販売 在庫  販売 在庫 販計 在計  商品1     5  3    6   1    3  0   14   4  商品2    15  5    10  7     8   5   33   17  商品3     2  0     1   1     3   1   6     2 【B表】商品1~3販売/在庫         ●/△週   ●/☆週   ●/○週 現在庫  累販  商品1      25     19      14     4     58  商品3       5      4        6      2     15  商品2      13    16      33     17     62 週ごとに商品の販売、在庫データをまとめる作業をしています。 B表の内容はA表からの一部抽出です。 行いたいのは、A表の入力によるB表の自動生成です。 A表は毎週同じ表を上書き(新たな集計対象が出たら追記)使用します。 B表は、毎週(A表更新完了るごと)列が増加します。 上表の、●/○週の右隣に最新週のデータを追加し完成となります。 これまでは、A表での集計結果をB表に「書き写し」していました。 しかし面倒なので、自動計算するようにはしてみたのですが 行き着いた点は、 1.A表の集計結果をB表の位置に合わせ計算式をセット 2.B表の空行(右端)に、A表の結果を生成し、白色表示しておく 3.A表の集計後、B表の「行挿入」を行う(手作業) 4.挿入後の新欄に、1の値をコピーペーストして完成 「オール書き写し」よりはマシだとは思うのですが、 A表の集計完了→【マクロ実行】→B表今週分即生成 というのが理想です。 ただ、今の私の力量ではここまでのマクロが組めません。 少し学ぶ程度でどうにかなりそうなものでしょうか?

みんなの回答

  • pc_knight
  • ベストアンサー率66% (52/78)
回答No.2

末尾に記載の(1)~(3)プロセスをVBAで記述すればできるかと思います。 (1)(2)のプロセスは、あるセルに書き込まれた値を、他のセルに書き込む(ご質問の例ではA表の値をB表へ書き込み)という記述の羅列です。記述の仕方は、「cells(行b,列).value=cells((行a,列a))」のようになります。 (例)4行・8列のセルのデータを10行・2列のセルへの書き込みの記述→「cells(10,2).value=cells(4,8)」 ( )内は数値でも、変数でも構いません。例えば、週を示す数値が1行目のB列に書いてあるなら、そのセルのデータcells(1,2)を使って、”(10,2)”の"2"を"1+ cells(1,2)"で置き換え「cells(10,1+ cells(1,2)).value=cells(4,8)」 とすることもできます。 商品の種類がたくさんある場合、For~ Nextステートメントの使い方を習得されたらVBAのシンプル化に役立ちます。 (1)A表の各商品の販売数(H列の4~6行目のセルの値)をB表の対応する週の列のセルにセットする。 (2)A表の各商品の在庫数(I列の4~6行目のセルの値)をB表の在庫数の列のセルにセットする (3)B表に転記された各週の販売数を累積し、類販の列のセルに販売数の累積数をセットする。 tanaka_sanの質問では、B表において、累販を書き込む列は、週が進むにつれて右方にずれていきますが、書き込む列をG~H辺りに固定できるなら、累販を書き込むセルに、予め=SUM(B10:F10)などの計算式をセットすることで、(3)のコードを作る必要がなくなります。

tanaka_san
質問者

お礼

ご回答ありがとうございます。 pc_knightさんのアドバイスを理解するのに 今の私ではまだかなり学習が必要な段階にいます。 どうやら考えていたことが高度すぎたようなので、 別のアプローチを取るべく、既に次の質問を行うための 準備に入っています。 ここでお伺いした話は後々きっと役立つと思いますので ひとまずお礼申し上げます。 ご丁寧な解説ありがとうございました。

  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.1

VBAで最初から作成するのではなく、マクロの記録で操作内容を記憶させればVBAが分からなくても作成可能です。

tanaka_san
質問者

お礼

ありがとうございます。 記録による方法は試してはみたのですが、 行を足すごとに結果の挿入される位置がズレてくるというか 常に同じ番地に挿入する指示になってしまい、どうにも うまくいきません。 なんかもう1段階余分な操作が必要だなということはわかったような 気がするのでチャレンジしてみます。