こんにちは、かふぇおれです。

今回は、「Cells」だけで自分の好きなセルを参照する方法の紹介です。

まず、皆さんVBAでセルを参照する時ってどうやって参照しますか?

例えば、B2セルに「ksk」と入力したいとしましょう。
VBAを始めたばかりの方は、Range("B2").Value = "ksk" と記述するでしょう。
また、僕の記事を読んでくれた方は、Cells(2,2).Value = "ksk" と記述するかもしれませんね。

では、B2 ~ K2まで「ksk」と入力したい場合はどうしますか?
物量作戦で行くとしたら
Range("B2").Value = "ksk"
Range("C2").Value = "ksk"
Range("D2").Value = "ksk"

といった形で一つずつ指定していく方法ですかね…
ただ…実用的ではないですね笑

まぁ、連続したセルに同じ文字列を入力するので、Range()を用いて
Range("B2:K2").Value = "ksk" とか
Range(Cells(2,2), Cells(2,12)).Value = "ksk"
と記述してあげれば、1行のコードで一気に実行することができます。

では、もっと意地悪を言いましょう。
B2, E2, H2, K2, N2の5つのセルに「ksk」と入力してみてください。

できましたか?
今回は連続したセルを参照するわけではないのでRange()で範囲選択することはできません。
しかし、こういった状況はエクセルでデータ入力やリスト作成をやっているとよく出会います。
今回は、5つのセルに文字列を入力するだけなので、最終手段として一つ一つ指定して実行するのも可能ですが
もしこれが、100か所とか1000か所とかあったらどうしますか?

本質的には、↓これと変わらないので実用的ではないですよね。
Range("B2").Value = "ksk"
Range("C2").Value = "ksk"
Range("D2").Value = "ksk"

こういう場合に使えるのが「Cells」です。
Cellsは、行番号と列番号を指定してセルを参照します。
ここがミソで、セルを参照するのに数字を用いるわけです。
なので、行番号と列番号を変数で指定して繰り返し処理で変数を増減させれば自分の好きなセルを状況に合わせて参照することができるわけです。

例えば、こんな感じです。
上の例題で行くと、B2, E2, H2, K2, N2はB2から3列ずつ右に移動したセルを参照します。なので

c = 2
Do Until c > 14
Cells(2, c).Value = "ksk"
c = c + 3
Loop

このように記述すれば、B2, E2, H2, K2, N2に「ksk」と入力することができます。

このコードのすごい所は、入力する場所が変化しても数字を変えるだけで対応させる事ができるところです。

例えば、B2, E2, H2, K2, N2に加えて、Q2にも「ksk」と入力しなければいけなくなった場合
上のコードの14 → 17とすればQ2にも入力することができるようになります。
また、スタートのセルがB2 → C2に変わった場合は、c = 2 → c = 3と書き換えるだけでスタート位置を編集することができます。

このコードを応用することで、ひとつのフォーマットとフォーマット同士の距離が決まってしまえば
好きなだけ複製することができるようになるんです。

具体例でみてみましょう。
例題)氏名、職番、Tel、Mail の4項目を入力するためのフォーマットを作成します。4項目を1セットとして横方向に3セット、縦方向に3セットの3×3で9セットを作成するマクロを組みます。
左上の1セットはB2から作成を始め、各項目の右隣のセルは入力欄として空白にしておきます。また、入力欄の右隣のセルは体裁を整える意味で空白にしておきます。同様に上のセットとの間の行も1行あけておきます。

上記のような条件の入力フォーマットを作成するとしましょう。
この場合のコードは下記の様になります。


Sub 例題()
r = 2
Do Until r > 12
 c = 2
 Do Until c > 8
  Cells(r, c).Value = "氏名"
  Cells(r + 1, c).Value = "職番"
  Cells(r + 2, c).Value = "Tel"
  Cells(r + 3, c).Value = "Mail"
  c = c + 3
 Loop
 r = r + 5
Loop
End Sub


いかがですか?
入力しなければいけない4項目は、1回ずつ記述すれば良いのでとてもスッキリします。
また、rとcの終了ポイントを自由に設定できるので、同じ条件で4×3にしたいとか、10×10で作りたいとなってもいくらでも変更可能です。
それに加え、上には「入力フォーム」というタイトルを入れたいとなった場合は、スタート位置を下げることも可能です。

このように、Cellsは変数の取り方によっては無限の可能性を秘めています。

あなたも、自分の職場でコピペを何十回も繰り返す前に一度この記事を思い出してCellsを使ってみてください!
きっと、缶コーヒーを1本飲む余裕が出ると思いますよ笑

このように、VBAで日頃のルーティンワークを効率化していく方法を伝授してますので
興味がある方はご連絡ください。
メンティも募集してます!