- 締切済み
【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表今週分即生成 というのが理想です。 ただ、今の私の力量ではここまでのマクロが組めません。 少し学ぶ程度でどうにかなりそうなものでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- pc_knight
- ベストアンサー率66% (52/78)
末尾に記載の(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)のコードを作る必要がなくなります。
- web2525
- ベストアンサー率42% (1219/2850)
VBAで最初から作成するのではなく、マクロの記録で操作内容を記憶させればVBAが分からなくても作成可能です。
お礼
ありがとうございます。 記録による方法は試してはみたのですが、 行を足すごとに結果の挿入される位置がズレてくるというか 常に同じ番地に挿入する指示になってしまい、どうにも うまくいきません。 なんかもう1段階余分な操作が必要だなということはわかったような 気がするのでチャレンジしてみます。
お礼
ご回答ありがとうございます。 pc_knightさんのアドバイスを理解するのに 今の私ではまだかなり学習が必要な段階にいます。 どうやら考えていたことが高度すぎたようなので、 別のアプローチを取るべく、既に次の質問を行うための 準備に入っています。 ここでお伺いした話は後々きっと役立つと思いますので ひとまずお礼申し上げます。 ご丁寧な解説ありがとうございました。