1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「表の大きさが変わっても動く」マクロを記録する方法 - 「マクロの記録」で作るマクロを長持ちさせるテクニック -

1
Posted at

一歩先の「マクロの使い手」になるために

全国のみなさ~ん!マクロ、書いてますか~!?

こんにちは!「マクロの書ける事務員さん」です。
私もそうだし、これを見ているあなたもそうなのかも?

マクロの書ける事務員さん、というならまあマクロを書いているワケですよね。
とは言え、人によって実は「マクロを書いてる」の内容が全く違うのが現状です。

例えばミスを減らすためのチェックツールみたいなものを作っている事務員さんもいれば、
ちょっとした作業を気軽に出来るひとつのボタンにする、みたいなマクロを書いている事務員さんもいれば、
ものすごいテクニックを込めたコードを書いてものすごい業務システムみたいなものを作っている事務員さんもいるワケです。

更に、「マクロを作れるけれど書いてはいない事務員さん」というのも実はいますよね。

まずマクロを作るときどうします?

この作業が自動化したいな。
この作業のミスを減らしたいな。

じゃあまずどうしよう?

今日はまず「マクロの記録をする」というあなたへ贈るちょっと先へ行くテクニックです。
あ!大丈夫ですよ!
今日はVBAで一文字も書かなくっても大丈夫!

今日お教えするのはコードを書くのがまだ怖い事務員さんたちへ贈る、
ちょっとしたひとつのテクニックです。

マクロの記録で出てくるマクロ

アレ最初は魔法みたいに見えますよね。
いつもやってる仕事を、勝手に自動化してくれます。

でもアレ、なんだか融通効かなくないですか?
先月は動いたのに今月は動かないとか、
動いてはいるみたいだけどなんだか変なモノが出てきちゃった、とか。

融通を効かせるためのテクニック

例えばそうですね、最初にこういう作業があったとします。

「Sheet1のA1:D10セルに存在する表の一番下の行、総計部分を選択して、
Sheet2のA1セルを始点として値として貼り付ける」

これを実行しようとします。

ちなみにこの時の表は、
A1で始まっていて、
D10までびっちりと内容が入ったモノ

を用意されているとします。
間に隙間があったりすると、
理由は後述しますが今回教えるテクニックは上手く使えないかも……?

マクロの記録ボタンをまずあなたは押すでしょう。
そうしたらマウスをそのまま引きずって、
A10:D10セルを選択して、
Ctrl+Cか右クリックでコピーするでしょう。
そしてSheet2をクリックして、
A1セルを右クリックして、
形式を選択して貼り付けで、値を選択。
そうしたらマクロの記録を止めておしまい。

すると出てくるのは多分こんな感じのモノです。

Sub Macro1()

' Macro1 Macro

    Range("A10:D10").Select
    Selection.Copy
    Sheets("Sheet2").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

まあこれでちゃ~んと動きますよ。
あなたのやったことそのまんまがね。

じゃあどう融通を効かせればいいんだろう?

まず融通を効かなくさせている一番の原因はここです。
Range("A10:D10").Select
これは見ての通り、「A10からD10セルを選択します」というそのままの意味です。

つまり、例えば集計表が一行増えちゃった! となると
表の途中がコピーされてしまいます。

逆に集計表が一行減っちゃった! となると
表の外の何もないところがコピーされてしまいます。

そういう時にどうするかというアプローチはいくつかあるのですが、
まずあなたの使っている表のつくりを考えてみてください。
表はひとつの塊になっていて、
いちばん下の行を選択してコピーしたい
んですよね。

じゃあ!その考えを記録してもらいましょう。

マクロの記録を押します。
まずクリックするのはA1セルです。
え?一番下じゃなくっていいの?
大丈夫です。
まずマクロに最初にA1セルにいてね、というおねがいをする意味もあるので、
最初にどこにカーソルがあったとしても、一回A1セルをクリックしてあげた方がいいです。

そうしたら、
Ctrlキー押しながら矢印の下、「↓」を押してください。
カーソルがA10セルに飛んでいきましたね?

そうしたら、あともうちょっと。

今度はCtrlキーShiftキー一緒に押しながら
矢印の右、「→」を押してください。

A10:D10セルが選択されましたね?

そうしたら、またあとは同じように。

Sheet2をクリックして、
A1セルを右クリックして、
形式を選択して貼り付けで、値を選択。
そうしたらマクロの記録を止めておしまい。

すると出てくるのはこれです。

Sub Macro1()

' Macro1 Macro

    Range("A1").Select
    Selection.End(xlDown).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy
    Sheets("Sheet2").Select
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End Sub

これの何がいいのか

なんとこのコードにはさっきまであったアレがありません。
Range("A10:D10").Select
これが影も形もなくなっちゃいました!

つまりこれがどういうことかというと、
この表がA1から始まっていて、2行2列以上で、すきまが空いていない
という条件さえ満たしていれば、
突然この表がA1:Z10000とかになっても、
はたまたA1:B3とかになっても、
しっかり合計のところだけをコピーして、Sheet2のA1にぺたんと貼ってくれます。
うれし!

ちなみに今回の方法を使ったマクロは、
間に隙間のある表だと上手く表の大きさが分からなくなってしまって、
途中のデータを拾ってしまう可能性
があります。
もしもおかしいなと思ったら、間に空欄のセルがないか確認してみてください。

そうすればあなたはVBAを一文字も書かなくたって、この恩恵が得られます。

まとめ

勿論VBAが使えて、VBEを開いて編集をすることが出来るのなら、
もっと沢山出来ることがあって、
速いマクロを作ることも出来るし、
変更に強いマクロだって作ることが出来ます。

だけどまずは、
こういうちいさなところからやってみる
ってのもいいのかもしれないなあと思ったワケです。

これで物足りなくなったら、あなたはVBE(VBAを書くあの画面)を開くときなのかも。

さて。今日はここまで!
それでは~!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?