Excel VBA

【Excel VBA】Rangeプロパティの使用例を紹介

事務作業をしている方にとって便利なプログラミング言語といえば「エクセルVBA」です。
エクセル操作を自動化できるので、毎日の面倒な作業を早く確実に行うことができるようになります。

エクセルVBAを勉強し始めた頃に学ぶのが「Range」だと思います。
特定のセルに値を入力できるので、身近に感じる反面「何に使うのかよく分からない・・」という方もいらっしゃるかもしれません。

この記事では「Rangeプロパティ(以下Range)」を覚えた方に、Rangeが役立つ場面を紹介したいと思います。

こんな方におすすめ

  • エクセルVBAを始めたばかりの方
  • 本・レッスンでRangeを習ったけど、使い道がイマイチ分からない
  • VBA学習のモチベーションを高めたい方

この記事を読んだ後は、エクセルVBAの学習をもっとやってみたいと感じていただけると思います。

Rangeは意味なし?

エクセルVBAを本やスクールで勉強する時「Range」を学ぶと思います。

その時の説明でよくあるのが・・

A1セルに1,000と入力しましょう。

などです。

指示通りにコードを書いて実行すると、確かに「A1セルに1,000」が入力できます。
自分で書いたプログラムが動いた達成感と同じくらいに

手入力した方が早いような・・・

と感じてしまう方も多いのではないでしょうか?

せっかくプログラムを勉強しているのに「意味あるの?」と疑問に感じてしまうとモチベーションが下がってしまいます。

Rangeの活用法

Rangeを初めて知った時の疑問「意味あるの?」を解消するために、Rangeの活用法を紹介します。

こちらで紹介する方法が全てではありません。
「こんな使い方があるのか」という気づきになればと思います。

Rangeでセル座標を変更していくものではなく、常に同じセルに値を入力する場合の紹介です。

数値の符号を反転させる

特定のセルの数値の符号を反転させる時にRangeが役に立ちます。

エクセルで数値の符号反転をする際、少し面倒です。

  • ①(B1セルなど)隣のセルに計算式を入力(=A1*-1)
  • ②B1セルの値をコピー
  • ③A1セルに値貼り付け

一回だけなら手間ではないのですが、システムから出力する度に、データの加工をしていると時間を取られてしまいます。

そんな面倒な作業を解消するのに「Range」が役に立ちます。

例えばこちらのコードを書いて実行するだけで、A1セルの数値の「符号を反転」することができます。
他のセルにデータ入力する必要がありませんので、入力ミスもありません。

sub 符号反転()
  Sheet1.Range("A1") = Sheet1.Range("A1") * -1
End sub

コードの意味は【A1セルの値にマイナス1を掛けた値】を【A1セルに入力する】というものです。
エクセル関数のように、隣の列のセルに一度計算してから貼り付け、という手間がかかりません。

取り込みデータの項目行を作成

Rangeが活躍する場面には「取り込みデータの項目業を作成」もあります。

基幹システムにデータを取り込む際、定型のフォーマットにする必要がある場合がほとんどです。
取り込みを行うデータを毎回作っていたら、時間がかかってしまいます。

エクセルVBAで取り込みデータを自動作成するプログラムを作ろうと思った時に【一行目にある項目】をRangeで作ることができます。

項目行は1行目に記載されているだけでなく、項目の順番も決まっているので、Rangeが使いやすいです。

コードだとこのようなイメージです。

Sub 項目入力()
  Sheet1.Range("A1") = "日にち"
  Sheet1.Range("B1") = "部署"
  Sheet1.Range("C1") = "担当"
  Sheet1.Range("D1") = "金額"
  Sheet1.Range("E1") = "備考"
End Sub


項目数に合わせてプログラムを増やしていけば、どのような基幹システムの取り込みデータでも対応できてしまいます。

Rangeはデータ入力セルの場所を記載できる(A1など)ので、他の人が見ても分かりやすいコードになります。

セルに文字列を入力する場合は入力したい文字を【ダブルクォーテーション】でくくります。

プログラムの実行を分かりやすくできる

Rangeは、データの入力をするだけではありません。
実は、特性のセルの情報を取得することもできます。

Rangeを覚えたばかりの方には難しいのですが・・・今後If文を覚えた時に役に立つRangeの使い方について紹介したいと思います。

If文は「〇〇の場合は、✖✖の処理をしてほしい」のように、プログラムの処理に条件を追加することのできるものです。

VBAでプログラムを作った時、同じ処理を実行することになると思います。
さらにプログラム作成に慣れてきたら、複数のプログラムを組み合わせることもあります。

例えば【A処理】【B処理】【C処理】を組み合わせた一連のプログラムを作った時

【A処理】だけ行いたい

【B処理】と【C処理】を行いたい

など、その時々によってプログラム内の処理内容を変更したい、こともあります。
そんな時に便利なのがこちらの方法です。

補足するとこのような感じです。

  • A列:処理の種類
  • B列:実行する、しない、の選択欄
  • D~F列:プログラム実行のボタン

プログラムの利用者が、実行する処理を選択できるようになる。
(ユーザーにやさしいプログラムになると感じています)

コードはこのようなイメージです。

Sub プログラム実行を選択()
  If Sheet1.Range("B1") = "実行する" Then
    Sheet1.Range("C1") = 1000
  Else
  '何もしないので何も書かない
  End If
  
  If Sheet1.Range("B2") = "実行する" Then
    Sheet1.Range("C2") = 2000
  Else
  '何もしないので何も書かない
  End If
  
  If Sheet1.Range("B3") = "実行する" Then
    Sheet1.Range("C3") = 3000
  Else
  '何もしないので何も書かない
  End If
End Sub

A列にある【処理】についてB列で【実行する・実行しない】を選びます。
B列の文字が【実行する】になっていたらプログラムを実行します(【実行しない】の場合は何も処理しません)

ちなみに、このプログラムは、C列に数字を入力するだけです。(If文の動作を知るのには良いのかもしれません)

あとがき

今回は、エクセルVBAの【Rangeプロパティ】の具体的な使い方を紹介しました。

初めてRangeを知った時は、特定のセルに値を入力するだけのイメージを持つかもしれません。
この記事でRangeの活用方法を知れば「こんなことに使ってみたい」とVBA学習のモチベーションが上がると思います。

エクセルVBAを使えるようになると、業務効率化がどんどん進みますが、つまずいてしまうこともたくさんあります。
できれば最後まで学習を続けて使いこなせるようになってほしいところです。

この他にも、エクセルVBA学習のヒントをどんどん紹介していきたいと思います。

エクセルVBA学習のモチベーションが下がってしまった時は、他の記事も読んでみてください。

-Excel VBA
-, , ,