スポンサーリンク

Offset-理学療法士が覚えるExcel VBA –

理学療法士が覚えるExcel VBA
スポンサーリンク
スポンサーリンク
スポンサーリンク

Offsetとは?

offsetには「相殺する(もの)」「埋め合わせをする(もの)」という意味があります。

offset
(…を)差引勘定する、相殺(そうさい)する、(…で)(…を)相殺する、(…を)(…で)相殺する、(…を)オフセット刷りにする

woblio英和辞典:https://ejje.weblio.jp/content/offset

VBAでは”任意のセル”から指定した移動距離にある”セル”を表すプロパティです。

具体例
任意のセルを(A1)とします
Range(“A1”)

行を下へ一つ移動すると(A2)になります
Range(“A2”) これをOffsetを用いると
Range(”A1″).Offset(1,0)と表現することが出来ます

行を下へ一つ、列を右へ一つ移動すると(B2)になります
Range(“B2”) これをOffsetを用いると
Range(“A1”).Offset(1,1)と表現することが出来ます

Offsetの使い方

Ranngeオブジェクトに移動する行と列を指定します。
Rangeオブジェクトはcells・Range・宣言された文字列でも可能です。

実際にコードを書いて動作をみてみましょう

(A1)から行1、列1移動したセル(B2)の背景色を黄色にする命令文です

実行前

実行後

(B2)が黄色くなりました

Rangeオブジェクトで範囲(A1:B2)として指定します。

実行後

範囲指定して宣言した文字列でも正常に作動しました。

Offset の使い時とデメリット

offsetは任意のセルから距離を指定できます。そのため、当然ですが距離が一定の関係にある動作にしか使えません。私が思うoffsetの使い時・別の方法を考えた方が良い時をまとめてみました。

offsetの使い時

  1. 連続した動作を行うとき
  2. 隣または、距離が必ず決まっているとき(本当の本当に決まっているとき)
  3. どうしても他の方法が浮かばないとき

別の方法を考えた方が良い時

  1. 表を扱うとき
  2. 距離があまりにも遠いとき
  3. 相対的な位置が今後変わる可能性があるとき

1.連続した動作を行うとき 2.隣または、距離が必ず決まっているとき

「Excelシートのレイアウトをテンプレート化して入力するセルが必ず固定されている」このような場面は、offsetを使っても良いかもしれません。具体的にはリハ計画書等がよい例でしょうか。計画書のテンプレートが出来てしまえば、任意のセルから一定の距離に入力したいセルが作れます。ただし、一度VBAコードを組んでしまうと、レイアウト(計画書の書式)を変更出来なくなるので、必ずテンプレートを完璧に作ってしまう必要があります。

ある動作の次にoffsetでセルを指定する・ある動作の隣あったセルを指定する際にはoffsetは最適です。

(A1)から始まる1行目の一番右のセルを選択することができます。

3.どうしても他の方法が浮かばないとき

どうしても浮かばないときはoffsetを使用するしかありません。私も、データベースを作る際にoffsetを使うことしか思いつきませんでした。他の方法が思いついた際に書き換えるのも一つの方法です。この記事が、参考になれば幸いです。

4.表を扱うとき

私がoffsetを使用して後悔したポイントです。VBAコードを描いた後で、(しばらくして)表の項目を追加したいと思い列を増やしてしまいました。当然、マクロ作動の際に表がずれてしまいました。表なので、レイアウトが決まっているようで、将来的にはわからないものです。
表を使用している際は、見出し(一番上の行)を活用するとオススメです。方法はいくつかありますが、見出しの名前を検索して、対象の行を指定すれば、cells(行,列)でセルを求めることが出来ます。

5.距離が遠いとき

距離が遠いときは、offsetの数字が大きくなります。
任意のセルから距離を数えるのも大変ですし、バグがあった際の確認が大変になります。
セル数(セル位置)をイミディエイトウインドウを用いて検索する方法もありますが、初心者の頃はよく躓きました。別の方法があるなら、無理にoffsetを使用することは無いのかなと思います。

6.相対的な位置が今後変わる可能性があるとき

これが一番よくバグを起こす原因です。
作成時は変わることが無いと思っていたExcelシートに行や列を追加しなくてはならないことがありました。追加した行・列ぶんoffsetの数字を変えなければならないのですが、どこを変えれば良いかのデバグ作業がほんとストレスになります。

ぜひ注意してください。

まとめ

Offsetは視覚的にとらえやすく、記述も簡単ですのでVBAを始めたばかりの頃は多用してました。エクセルシートのレイアウトが変わらない場面や、決まった距離を指定する場面では使いやすいプロパティです。

ただ、位置が変わると使い物にならないので、使用する際はバグに注意して活用してみてください。

コメント

タイトルとURLをコピーしました