プロが教えるわが家の防犯対策術!

エクセルのマクロの不具合について教えてください。

各月の売上明細シート(1月、2月、3月・・・と全部で12枚のシートがある)を、年間の売上明細シートに縦に転記するだけの簡単なマクロです。エクセルの「マクロの記録」機能を使って、一枚ずつ各月の売上明細シートを開いてコピー、年間の売上明細シートに貼り付けを繰り返すだけです。
(1月の情報の続きに2月の情報を転記する・・・完成図は1月から12月の売上明細がずらっと転記される。)
マクロ作成後、何回かはマクロを実行するとうまくいくのですが、たまに4月だけ転記されない、6月だけ転記されないといったようなことが起こります(転記されない月のデータは空白のまま)。
この原因は何でしょうか。教えてください。

<(例)12月の売上明細シート>
日付  商品  売上
12月3日 バナナ 30
12月5日 バナナ 300
12月6日 りんご 400
12月7日 みかん 30
12月8日 みかん 80
12月9日 りんご 110
12月10日 みかん 90
12月11日 バナナ 10
12月12日 りんご 190
12月13日 みかん 330
12月14日 みかん 60
12月15日 バナナ 100
12月16日 みかん 50
12月17日 りんご 100
12月18日 みかん 110
12月19日 みかん 50
12月20日 りんご 50
12月21日 みかん 100
12月22日 バナナ 50
12月23日 りんご 50
12月23日 りんご 100
12月23日 みかん 60
12月23日 バナナ 50
12月23日 みかん 300

(エクセル2016、WIN10を使用。話を簡略化するためにシンプルな例にしました。)

A 回答 (4件)

>マクロの記録ボタンで作成してるので。



記録したマクロをそのまま使用しているのですか?
記録ボタンで記録されたマクロはあくまでシート上で操作した内容をそのままトレースしているだけですので、各月のシートのレコード数に変更があっても対応してくれません。

>プログラムミスだと初回から全て間違った結果になるのではないでしょうか。

それはプログラム次第です。
全て間違った結果を返すこともありますし、一定の条件を満たしたときに部分的に間違った結果を返すこともあります。
    • good
    • 0
この回答へのお礼

ありがとうございます

お礼日時:2020/06/20 17:29

オートフィルターでないなら、次に考えられるのは変数の初期化し忘れです。



1~12月のシートからコピーしてくる時にFor文でループしていませんか?
ループ内で変数を使用しているとき、誤って前のシートの値を使用していることは考えられませんか?
    • good
    • 0
この回答へのお礼

マクロの記録ボタンで作成してるので。それとマクロ実行してもうまくいくときがほとんどです。プログラムミスだと初回から全て間違った結果になるのではないでしょうか。

お礼日時:2020/06/20 17:19

一応念のため補足させていただきますが、


オートフィルターが悪さする可能性は年間のシートではなく各月のシートにオートフィルターが設定されていた場合です。
    • good
    • 0
この回答へのお礼

各月の売上明細シートにはオートフィルター設定していないんですよねぇ、、、

お礼日時:2020/06/20 16:52

VBAを見ないと分かりません。



ぱっと思いつくのは、
マクロ実行時に転記されないシート上でオートフィルタを使って絞り込みをかけたり、
行の非表示をしてたりしませんか?

プログラムの書き方次第ですが、絞り込みや非表示行がある状態で最終行を求めるプログラムを実行すると正しく最終行が取得できないことがあります。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます!!!

本当は毎日追加される各月の売上明細シートから指定した日の明細だけを取り出すマクロを作りたかったのですが、よくわからないので、すべてをいったん一枚のシート「年間の売上明細シート」に転記して、オートフィルターで指定した日の売上明細を拾うようにしました。結果、おっしゃる通りオートフィルターは使用します。
マクロ実行時には、「クリアするマクロ」で「年間の売上明細シート」の情報をいったんすべて削除して、オートフィルターも元に戻した状態にしてから、「各月の売上明細シートを転記する」マクロを実行していますが、、、
なんらかのミスで、オートフィルターにしたまま実行したがために、不具合につながったのかもしれませんね。

お礼日時:2020/06/20 16:00

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!