#9 【Excel VBA入門】~セルを移動する Offset~

ExcelVBA

プログラミング入門としてVBAを勉強したい方へ

スポンサーリンク

Excel VBAはプログラミング初心者におススメな言語です。

このページがおススメな方

このページは
・プログラミングを全くやったことがない
・プログラミングをやりたいけど何からやればいいか分からない
・仕事の業務を効率化したい
といった方向けの記事です。

Excel VBAを書くための準備から、基本的なコーディング、応用レベルの使い方をなるべく噛み砕いて全くの初心者でも少しずつステップアップできる内容になっています。

VBAをおススメする理由

特に今後プログラミングを覚えていきたいという方にVBAは非常におすすめです。
その理由は
・開発環境を構築する必要がない
・コードが癖はあるけどシンプル
・プログラミングをするためのエディターは専門のものが用意されている
・エクセルという視覚的に表示されるものが多いので、達成感をすぐに味わえる

という観点から僕はVBAをお勧めしています。

プログラミングという言語は沢山あって、あっちはこれが得意でこっちはこれが得意でといった感じに比較することは多いかと思いますが、コードが

シンプル!
かんたん!
分かりやすい!
結果をすぐ得られる!

と、いいことずくめなのでプログラミング比較で迷っている方はとりあえずまずは、の感覚でいいのでVBAをやってみてください。
(その代わり遅いんですけどね…)

VBAのメリット・デメリット

ただVBAにはできることへの限度、速度の面から見て他と劣ることがどうしてもあるので

普段のエクセルの業務を効率化したいという方は本格的に勉強していただき、そうではなくいずれ別のプログラミング言語に挑戦したいという方はプログラミングの基礎部分を固めるという意味で勉強するのがいいかと思います。

プログラミング言語にもそれぞれ難易度があり、

C言語javaobjective-cなど学習コストが高く難易度も高いもの
PHPPythonRubyなど学習コストは中程度だが初心者は大体挫折するもの
JavaScriptの様なHTML、CSSを知っておかないとできないようなもの

と難易度は様々です。

そんな中でExcel VBAは他の言語では表示させるまでに複数行かかるものを1行で書けたり、シンプルなコードでマウス操作やキーボード操作までできるので視覚的にも楽しいし、エラー個所もここがエラーだとすぐ分かる様になっているのでプログラミング初心者でも挫折が少なく覚えられるはずです。

エクセルのバージョンと歴史

因みにエクセルにも種類というかバージョンがあり、メジャーなバージョンでは

2003
2007
2010
2013
2016
2019

とありますが、僕はOffice2016を使用していますので、それをベースにお伝えしていきます。

セルを移動するとは

今回はアクティブセルを移動させる方法について解説していきます。

セルを移動するというのはA1セルにあるものをA2セルにコピペするといったものではありません

その場合はコピーアンドペーストを使えばできるので、それについてはいずれ解説します。

今回解説するプログラムは相対的にセルの位置を指定するということです。

相対的に位置を指定とは

エクセルVBAのみならずプログラミングには絶対参照と相対参照というものがあります。

まずは絶対参照から解説していきます(分かりやすいので)

絶対参照

絶対参照とはセルの位置を「ここだよ!」と指定してあげる方法です。

これだけだと分かりづらいかもしれませんが、今までやってきたRange()やCells()は絶対参照です。

どちらもB5セルを指定したいときに
Range()では、Range(“B5”).Select
Cells()では、Cells(5, 2).Select
と指定しましたね。

これはB5セルに何かアクションを起こすよ!とB5セルを対象にしているので絶対参照というわけです。

ですので、絶対参照というのは
セルの位置を明示的に指定する
プログラムとなります。

相対参照

相対参照とは起点となるセルを決めて、そこから下にいくつ、右にいくつ、と起点になるセルから指定した分だけ離れているセルに何かしらのアクションを起こす命令です。

例として、B2セルから下に5セル、右に3セルの位置はE7セルですよね。
このB2セルを起点にして下に5セル、右に3セルの位置にあるセル(E7セル)にアクションをさせるというのが相対参照です。
相対参照はこの様に起点となるセルからいくつ離れたセルに何かアクションを起こさせるよ!という命令になります。

ですので、相対参照というのは
起点となるセルから指定した位置に離れたセルに命令する
プログラムになります。


それでは、はじめていきましょう。
段階を踏んで、手順通りにやっていけばきっと大丈夫!

B3セルを起点に下、右に3セルずつ離れた箇所に「こんばんは」と表示する

今回の目標:B3セルを起点にして離れた位置に命令を出す

offset

ここから実践

1.開発タブのvisual Basic Editorをクリックしましょう
(Alt + F11のショートカットでも表示させられます)
開発タブが表示されていない方は【Excel VBA超初心者】~開発環境の準備~を参考にしてください

2.メニューバーの挿入タブをクリックしましょう

3.挿入メニュー内の標準モジュールをクリックしましょう

4.エディターの1行目にSub 相対参照で指定()と入力し、入力が完了したらエンターを押しましょう

5.ではまずは下準備をしていきます。

7.A1セルにフォーカスを当ててください

8.これで下準備は完了です。

9.2行目に
Range(“B3”).Select
と入力してください

10.3行目に
ActiveCell.Offset(3, 3) = “こんにちは”
と入力してください

ActiveCellのが分からない方はActiveCellのページを参考にしてください

11.入力が完了したらエンターキーを押してください

12.全てを入力し終えたら
1行目に Sub 文字列型変数()
2~3行目はプログラミング内容
4行目に End Sub
となっているはずです。

13.入力が完了したらツールバーの再生ボタン「」をクリックしてください
再生ボタンはメニューバーの「挿入」の右斜め下にあります。
(見つけられない場合はショートカットキーのF5キーで実行してください

14.E6セルに「こんにちは」と表示されていれば成功です

15.Offset(相対参照)については以上です!

解説

Excel VBAのOffsetとは、指定したを起点にして離れた位置に命令を出すプログラムとなります。

今回の命令はまず「Range(“B3”)」でB3セルを指定して、そのB3セルを起点に下に3行、右に3列離れた位置に「こんにちは」と表示させました。

Offset(3, 3)の
左の「3」は行方向、つまり下に向かって3セル分
右の「3」は列方向、つまり右に向かって3セル分
の位置を指定しています。

なので、アクティブセルであるB3を起点にして3行3列離れたところに命令を出せた、ということになります。

因みにこのOffsetはマイナスを指定することも可能で、
左の数字にマイナスを指定すると上方向
右の数字にマイナスを指定すると左方向
の位置を指定することが可能です。

offsetのマイナス参照

■今回はここまで■

今回のコード一覧

自分でコードを書いてエラーが発生してしまったら、以下のコードと比較してエラーを解消しましょう。

Sub 相対参照で指定()
Range(“B3”).Select
ActiveCell.Offset(3, 3) = “こんにちは”
End Sub

エラーの場所がわからない

どうしてもエラー箇所が分からないという方がいましたら、2つのテキストの差異を視覚的に教えてくれるWinMergeというソフトがあるので、それを使って上記のコードと自身が書いたコードを比較してみることをお勧めします。

WinMerge
https://winmerge.org/?lang=ja

まとめ

このページではOffsetとそれに付随して絶対参照、相対参照について解説しました。
このOffsetは使う場面が非常に多く、使えると非常に便利な命令です。

最初のうちは相対参照で指定する位置がいまいち分からない、となることも多いかと思いますが慣れてくれば簡単に使いこなせるので積極的に使っていきましょう。

絶対参照、相対参照も1回読んだだけでは理解しきれないと思うので、その場合は繰り返し本ページを読み返していただくか別のサイトを参考にすることをおススメします。

VBAだけを覚えればいいという方であれば絶対に必要!というわけではありませんが、今後別のプログラミング言語を勉強しようと思っている方は知識として必要になってくるので理解しておいたほうがいいでしょう。

コメント