カレンダー付箋ボード

カレンダーと付箋ボードのWindowsアプリ完成!

詳細はこちら

【マクロ】合計を移動させて範囲をクリアする(繰越)マクロの作成。

マクロを教えて!と頼まれたので、きのう教えてきました。内容は繰越作業です。マクロをさわったことがないとのことなので、簡単に説明しました。

エクセル マクロの依頼

マクロを作った人が退職して、動かなくなったという典型的な事例。
郵便料金が値上げになり、切手の種類が増えたので行を追加した。
そしたら動かなくなってしまった。とのこと。
おそらく行を追加したからではないか?
教えてほしい。ということでした。

私でできることならもちろん!

このように切手を管理するシート(見本)があります。
これをマクロを使って繰越したいとのこと。
合計にはSUM関数があります。

内容をきいていると、M列の合計をB列に貼り付けしてC2からL10をクリア
すればよさそうです。

実行後の図。
ボタンを作成して(左上)マクロを作ります。
日付は何もしなくていいとの要望ですので、そのままにします。

この工程ならコードも少ないしセルも固定なので私でもできます。

マクロ作成の手順

手順
1 合計(M列)をコピーする。
2 繰越(B列)に値の貼付で貼り付け。
3 C2からL10をクリアする。

解説
まずは合計コピーです。先にクリアしてしまうと合計が0になってしまう
ので、先に合計の値を移動させます。
貼り付けは「値の貼り付け」にします。これは単に貼り付けだとSUM関数が
ペーストされてエラーになるからです。
あとはクリアすればOK。

なぜ動かなくなったのか?
行を挿入しても一部はクリアされるはず。
ソースコードを見たいけど、無理そうなので疑問が残るまま。
できればソースをみて修正したほうが早いと思うんだけど、
とりあえず、作りましょう。

私が作ったマクロ

全部で4行。
もっと少なくする方法もありますが、なるべく簡単にわかりやすいほうが
いいと思ったので4行にしました。

さっそくコードを教えましたが・・・

ボタンってどうやって作るの?
4行あるってことはボタンを4つ作るの?
これはどこに書くの?
想像以上に難しいね~私にできるかな?

・・・なるほど。
そこからだったか。それは申し訳ない。

マクロの記録

ならば、マクロの記録を使いましょう。
工程が少なく単純な作業の場合は有効な手段です。

エクセルの開発タブにあるマクロの記録をクリックします。

開発のタブが見当たらない場合は
ファイル→その他のオプション→オプション→リボンユーザーの設定
で開発にチェックをすると表示されます。

クリックしたあとの動作が自動でマクロとしてコード化されます。
ここでコード化したい動作をします。
合計をコピー
値の貼り付け
範囲のクリア

ここまでの動作をしたらマクロの記録終了をクリックします。
ではマクロの記録でできたコードを開いてみてみましょう。

マクロ→Macro1→編集 と進みます。

マクロの記録で作成したコードが表示されました。

あれ?なんか違くない?
なんで行数が違うの?とさっそくの疑問がでました。

いい質問です!
私が作ったコードは4行、記録でできたコードは8行。
実行している内容は同じなのに行数が違います。

その理由はマクロの記録の場合、省略できるコードも
そのまま書かれているからです。

例えばSkipBlanksは空白を考慮するか?
Transposeは行列の入れ替えをするか?
ここは省略できます。

私は必要ないところはカットしたので4行になっています。
説明しても「難しくてわからない」とのことなので、ややこしい説明
はなしにして、そのまま使います。

マクロの記録の注意点は「余計なことなしない」です。
記録している途中で記録したい動作以外のことはしないということです。
例えば、関係ないセルをクリックしてしまったり、文字を入力してしまって
Deleteしたり、それも全部記録されてしまいます。
「記録したい動作」に集中してください。

ボタン作成

ボタンを作成しましょう。

開発タブ→挿入→ボタン(フォームコントロール)をクリック
ドラックしてボタンを作ります。
位置はずれていても作成したあと任意の場所に移動できるので
大丈夫です。

マウスから手を離すとマクロの登録画面が表示されます。

こんな感じの画面。
ここではボタンを押したときにマクロの記録で作ったコード
を実行できるように設定します。
Macro1(マクロの記録で作ったコード8行分)を選択して
OKをクリックします。

もしこの画面で間違ってキャンセルを押してしまったら
ボタンを選択→右クリック→マクロの登録
と進めばマクロ登録の画面がでます。

完成

これで完成です。

ボタンをクリックするとマクロ記録したコードが実行されて
思った通りの動きが自動でできるようになりました。

行を増やしたり、減らしたりしたら

Rangeの()の中のセルの範囲を修正すればOKです。
この場合だと1行目の合計のコピーの範囲と6行目のクリアする
範囲ですね。

まとめ

とりあえず、今のコードをみて修正できるようなら修正して
できなかったら、マクロの記録でやってみるとのことでした。

結果はどうなのか?気になります。
ちゃんとできるかなぁ?
私は説明するのが下手だから。

つい(たった4行だよ?簡単じゃん)って思ったりしたのですが
自分の物差しでしたね。
自分も他の人のサイトとかみて(いや、わかんないからっ)って
思ったりしているのに。
わからない人にとっては4行でも難しいってこと痛感しました。
反省です。