縦方向(行方向)のセル範囲を横方向(列方向)にコピーして参照先を対応させる【ExcelVBA】
手作業で対応する場合、数式で対応する場合、ExcelVBAで数式を入れていく場合の3パターンです。
手作業の場合はColumn関数で列番号を取得し、その列番号に文字列で"=B"と列を追加し
実際に入れたい数式をまずは文字列で作成し、それを値で貼り文字列で数式を完成させる。
後は文字列になっており、数式が計算されないので1つずつエンターで反映させても良いですが
=を=で全て置換させる事で一気に数式に変換する。
次に数式で対応する場合
INDIRECT関数を使用する。指定した文字列への参照を返す事が可能なので
=INDIRECT(”B”&COLUMN())で、列番号は右にコピーすれば増えていくので
右にコピーした分、行の下に対応していく。
Bの部分を指定したい列に変更すれば良い。
微調整したい場合は、COLUMNの計算結果に+-で調整する。
最後にVBAで指定した範囲に数式を入れていく場合は下記コード。
Range.Formulaプロパティで数式を取得し、そこにLetで入れていく。
ForEachステートメントで指定したセル範囲を順番にrngという変数にセットしながら繰り返す。
そしてiという変数を1ずつ増やし、指定した数を入れていく。
最初の数値と列のアルファベットを変更すれば少し変更して流用可能。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
実際に使用したサンプルコード
'rngという変数をRange型で宣言
Dim rng As Range
'iという変数を整数型で宣言
Dim i As Integer
'iに最初の行の数値を入れる
Let i = 6
'指定したセル範囲を順番にrngにセットしながら繰り返す
For Each rng In Range("C59", "H59")
'セルの数式を入れる
Let rng.Formula = "=B" & i
'iを今のiの値に+1する
Let i = i + 1
Next