エクセルマクロ・VBA入門 第4回: 範囲を指定して実用的なプログラムを作る!

こんにちは! エクセル使いこなし隊 隊長の吉井良平です。

 

ノンプログラマーのためのエクセルマクロ・VBA入門の第4回は、範囲を指定する方法です。

(初回から読む方は、コチラ

前回、セルの一つ一つに値を入れたり消したりする方法を学びましたが、範囲で一気に値を入れたり消したりしたい場合もありますよね。

というか、範囲で一気に値を消すことの方が断然多いです。

 

今回は、範囲を指定する方法を学んで、これまでのまとめとして、実際に使えるプログラムを作ってみましょう。

これまで見積書、発注書、請求書など、毎回入力したり消したりしていた方は、かなり時間削減になりますよ。

範囲を指定する方法

 

VBAでセル範囲を指定するのは、Rangeオブジェクトを使います。

前回、セルの一つ一つを指定するのもRangeを使いましたが、セルの範囲を指定するのにもRangeが使えます。

 

Rangeの中にセル範囲を直接書き込む方法

Rangeを使ってセルの一つ一つを指定する方法と同じような感じで、Rangeの後のカッコ内にセル範囲を直接書き込む方法です。

例: Range(“A1:E5”) = “ハニー”

エクセルの関数で範囲指定をする時も、開始セル番地と終了セル番地を:(コロン)でつなげるので、これは分かりやすいんじゃないかと思います。

日本語に訳すと、「A1からE5の範囲はハニーです」ということですね。

範囲指定入力1

範囲を指定して入力した

 

Rangeの中に、Cellsで開始セルと終了セルを指定する方法

こちらは、ちょっと頭がこんがらがる方もいるかもしれません。

前回やったCellsで開始セルをと終了セルを指定して、それをRangeで囲んで範囲を指定します。

例: Range(Cells(7,1),Cells(12,5)) = “サニー”

 

細かくいうと、RangeとCellsは同じ階層にあるんじゃなくて、Rangeの下にCellsというものがあります。

開始セルと終了セルの間は、コロン( : )じゃなくて、カンマ( , )で区切ります。

先ほどの入力例を日本語訳すると、「7行目1列目のセルから12行目5列目までのセル範囲は、サニーです」ということになります。

範囲指定2

セルズで範囲指定した場合

少しややこしいですが、実際に何度かやっていくと感じがつかめると思うので、自分の好きな言葉を入れて、何回かやってみてくださいね。

 

*別途、後の講座で紹介するつもりですが、Rangeの中にCellsがあるというのが分かりにくい方は、下の図を見てみてください。

エクセルファイルがあって、その下にいくつかワークシートがあって、そのワークシートに範囲があって、範囲の中にセルや行、列があるという構造になっています。

エクセルの構造

エクセルの構造

 

範囲を指定して値を消す

範囲の指定ができれば、これは簡単です。

先ほど値を入れたセルを、セルズを使ったやり方で消すのは、次のようになります。

Range(Cells(1,1),Cells(12,5)).ClearContents

レンジを使った場合は、次のようになります。

Range(“A1:E12”).ClearContents

どちらも、同じことをしています。

範囲をクリア

範囲をクリア

 

実際の仕事現場では、範囲に対して同じ値を入力するということは、あまりありませんが、範囲に対して値を消すことはよくありますよね。

あとは、罫線を引く場合にも、範囲を指定します。

エクセルの基本的な操作なので、マクロでも範囲を指定する方法をマスターしておきましょう!

 

 

実際に仕事で使えるプログラムを作ってみよう!

 

さて、お待たせしました!

これで、仕事に使えるプログラムが一つ書けるようになっています。

 

エクセルを使った仕事で、同じエクセルファイルを何度も使いまわしたりすることってありますよね。

  • 見積書、注文書など、決まったフォーマットがあって、毎回その中の内容を変えている
  • 会議資料で、当月の実績だけを前月の実績と差し替えて入力している

というようなことは、よくあるはずです。

 

そんな時には、マクロの出番です。

単純に作業が早いということと、「前回の値の消し忘れ」というようなミスが無くなるので、後でしまった!ということがなくなります。

今回は、見積書を例に「見積もり番号と明細を消す」というマクロを作ってみましょう。

実習用に、見積書のサンプルファイルも作っているので、実際にダウンロードしてやってみてくださいね。

ダウンロード

サンプルファイルの概要

サンプルの見積書では、品名と定価はVLOOKUP関数で商品マスターシートから引っ張ってくるようにしています。

*VLOOKUP関数が分からない方は、「VLOOKUP関数をマスター!」記事をご覧ください。

計算式を入れている部分は値を消したくないので、毎回変更する部分は、見積先・見積番号・品番・数量・見積単価の5か所ですね。

この5か所だけをクリアするマクロを作ってみましょう。

クリアマクロのサンプル

赤枠で囲ってる部分だけをクリアします

 

実際にマクロを作る

① ビジュアルベーシックエディターを立ち上げて、マクロ名を「前回見積内容のクリア」とか、分かりやすい名前にします。

② 毎回、値を消す範囲を指定して、ビジュアルベーシックエディターにVBAのプログラムを書いていきます。

コピペできるようにしても良いのですが、実習ということで、ご自分で書いていってみてくださいね。

 

下記は作成例です。今回は、Cellsを使うまでもないので、Rangeの中に直接範囲を書き込んでます。

クリアマクロ記入例

記入例です

 

マクロボタンを作る

作ったマクロは、わざわざビジュアルベーシックエディターを立ち上げなくても、「開発」タブの「マクロ」ボタンから実行できます。

開発タブのマクロボタン

ここからマクロを実行できます

ただ、このボタンを押すのもちょっと面倒くさいので、よく使うマクロに関しては画面上にボタンを作ってしまいましょう。

 

マクロボタンの作り方(その1)

① 開発タブの挿入をクリック

マクロボタンの挿入1

②フォームコントロールの、一番左上の図形をクリック

2105

③ あとは、適当な場所でドラッグしてボタンを作ればOKです。貼り付けるマクロの名前を聞いてくるので、登録したいマクロを選択してください。

ボタンを右クリックすればテキストも編集できるので、分かりやすい名前にしておいてくださいね。

マクロボタンその1

このボタンを押すと実行されます

 

マクロボタンの作り方(その2)

先ほどのボタンで全く問題ないのですが、個人的にはちょっと味気ないので、私は図形にマクロを貼り付けてボタンにしています。

複数マクロがある場合は、色分けすることもできるというメリットもあります。

こちらのやり方も知っておきましょう。

 

① 普通に、図形を挿入します。書式も自分のお好きなようにしてください。

② 図形を右クリックして、「マクロの登録」を選びます。

図形にマクロを登録

図形にも登録できます

あとは、登録したいマクロを選べば大丈夫です。

見積書などはマクロボタンが印刷されないように、図形の書式設定→プロパティで、「オブジェクトを印刷する」のチェックを外しておいてくださいね。

図形の書式設定

印刷されないようにしましょう

 

マクロを実行する

さて、これで実用的なマクロができましたね!

実際に実行してみて、その効果を確かめてみましょう。

マクロの効果が分かるよう、手作業でやった場合との比較動画を作ってみました。

マクロを使う効果

マクロを使わないと10秒かかってた作業が、ほんの一瞬で終わりましたよね。

今回のマクロではたった10秒の削減ですが、これに見積書の自動採番と自動別保管を加えることができるようになると、1分以上の削減時間になります。

 

また、マクロを使うとミスが無いというのも大きなメリットです。

手作業で値を消していると、どうしても漏れが出たり、必要な部分まで消してしまったりすることがあります。

今回の見積書の例だと、一番右上の見積番号の消し忘れなどはよくある話です。見積番号がタブってもそんなに実害はありませんが、発注書などでは番号がダブると、もう一度やり直さないといけないこともあります。

間違えて計算式が入っている部分も消してしまうことも、よくある話です。計算式が途中だけ抜けていて、合計が違って後から作り直す・・・ということもあり得ますよね。

マクロを使うと、こういった単純なミスとは無縁の仕事ができるようになるので、もっと生産的な仕事に取り組むことができるようになります!

 

まとめ

 

  • 範囲を指定するには、Rangeオブジェクトを使います
  • Rangeの中に、”A1:E5″ のように書く方法と、Cells(1,1),Cells(5,5)と書く方法と、2通りのやり方があります。
  • 作ったマクロは、マクロボタンから実行させることもできます。
  • 単純作業は、手作業でやるよりもマクロ化した方が、早くてミスもありません。

 

次回は、もう少し複雑な処理ができるように「変数」というのをマスターしましょう!

↓ 次回の記事 ↓

エクセルマクロ・VBA入門 第5回:変数を理解しよう

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

ABOUTこの記事をかいた人

昭和48年広島県生まれ。現在も広島に住んでいます。 趣味は音楽鑑賞(邦楽、洋楽問わず、クラシック、童謡も)、マンガです。エクセルを効率的に使う方法を紹介して、あなたのお役に立ちたいと思っています。