こんにちは!ぐーです。
いつもブログをご覧いただき、ありがとうございます!
Excelで表を作っているとき、「データが増えるたびに数式を直し続けて、もう嫌!」 と思ったことはありませんか?
今日は、そんな「セルの位置が変わると対応できない」という悩みを解決します。
Offsetってなに?
一言で言うと、「基準の場所から、どれくらいズレた場所か」を指定する方法です。
例えば、友達に家の場所を教えるとき、「緯度〇〇、経度〇〇」とは言いませんよね?
「コンビニ(基準)から、2つ先の角(行)を、右に入ったところ(列)」と教えるはずです。
これがOffsetです。
Excel(VBA)での書き方:
Range(“基準のセル”).Offset(行の移動数, 列の移動数)
これだけです。「A1から下に1つ、右に1つ」なら Range(“A1”).Offset(1, 1) と書きます。
なぜこれが便利なの?
Excel作業で一番使うのは、「リストの最終行の『次の行』にデータを追加したいとき」です。
データが10件なら11行目、100件なら101行目…と、書き込む場所は毎回変わりますよね。これを「A11」と決め打ちしてしまうと、データが増えたときに上書きして大惨事になります。
そこでOffsetの出番です。
「一番下のデータを見つけて、その1つ下(Offset 1, 0)」を指定すれば、データが何万件あっても自動で空欄を見つけてくれます。
【コピペOK】VBAコード
では、実際に使えるコードを書いてみましょう。
これは「A列の一番下に、今日の日付と『確認済』という文字を自動で入れる」プログラムです。
Sub AddDataToNextRow()
' 使う変数を宣言
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(1) ' 1枚目のシートを使います
' A列の最終行を探して、その「1つ下(Offset)」を指定する
' Cells(Rows.Count, 1).End(xlUp) が「A列の一番下のデータ」です
With ws.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
.Value = Date ' 1つ下のセルに今日の日付を入れる
.Offset(0, 1).Value = "確認済" ' さらにその右隣(B列)に文字を入れる
End With
MsgBox "一番下の行に追加しました!"
End Sub
💡このコードのポイント
このコードのポイントは .Offset(1, 0) です。
「今の最終行から、1行下にズレてね」と指示しているおかげで、100行あろうが1000行あろうが、常に「次の空行」を正確に見つけられます。
これを手動でやると、スクロールして、セルをクリックして、入力して…と手間と時間がかかりますよね。
最後に
「座標」とか「引数」とか聞くと難しく感じますが、Offsetは「そこから〇歩進んで!」という道案内です。
この感覚が掴めれば、Excelを操るのがラクになっていくはずです。よければぜひ一度コピペして動かしてみてください!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を厳選して紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント