「マクロ 隣のセル 値 コピー」
「vba 隣のセルの値をコピー」
という検索キーワードで、このサイト・インストラクターのネタ帳へのアクセスが時折あることに気づきました。
隣のセルの値をコピーする、Excel VBA(Visual Basic for Applications)のコードを探している方による検索です。
VBAでセルの値をコピーする
セルの値を別のセルと同じにしたいのならば、コピー&ペースト(貼り付け)を行う必要はありません。
値の代入を行えばOKです。
Range("B1").Value = Range("A1").Value
End Sub上記のマクロを実行すると、代入演算子「=」の左側に書かれている「Range("B1").Value」に、右側のデータ「Range("A1").Value」が代入されます。
値のみをコピー&ペーストしたのと同じ結果になります。
隣のセルの値のコピーを繰り返すサンプルマクロ
A1:A10セルにデータが入っていて、隣のB1:B10にはデータが入っているセルと入っていない空白セルがあったときに、空白セルだったときにだけ隣のA列の値をコピーする場合は、以下のようなマクロです。
Dim i As Long
For i = 1 To 10
If Cells(i, "B").Value = "" Then
Cells(i, "B").Value = Cells(i, "A").Value
End If
Next i
ここでは1行目から10行目まで処理するという前提ですので、For~Nextループを「1」から「10」まで回して、
For i = 1 To 10
B列のセルの値が空白文字列だったときに、
If Cells(i, "B").Value = "" Then
隣のセルの値をコピーしています。
Cells(i, "B").Value = Cells(i, "A").Value
A列の最後の行まで処理を繰り返したいという場合、For~Nextループ、
For i = 1 To 10
の最終値を、データの入力されている最終行の行番号を取得するオブジェクト式「Range("A1").End(xlDown).Row」に変更して、
For i = 1 To Range("A1").End(xlDown).Row
とすればOKです。
左隣のセルの値をコピーするサンプルマクロ
アクティブなセルに、左隣のセルの値をコピーしたいのなら、以下のようなマクロです。
With ActiveCell
If .Column <> 1 Then
.Value = .Offset(0, -1).Value
End If
End With
左隣のセルの値をコピーしているのは、
.Value = .Offset(0, -1).Value
の部分です。
With ActiveCell
で省略されている「ActiveCell」を補完すると、
ActiveCell.Value = ActiveCell.Offset(0, -1).Value
です。
「=」の左側の「ActiveCell.Value」に、右側のデータ「ActiveCell.Offset(0, -1).Value」を代入しています。
先ほどのループ処理の場合は、どの列かがわかっていたので、
Cells(i, "B").Value = Cells(i, "A").Value
としていましたが、このマクロではアクティブセルの左隣の列はアクティブなセルによって変わりますから、RangeオブジェクトのOffsetプロパティの、
第2引数に「-1」を指定することで左隣のセルを取得しています。
A列のセルがアクティブな状態で、
ActiveCell.Value = ActiveCell.Offset(0, -1).Value
を実行すると、左隣にセルがないために実行時エラーが発生してしまいます。このエラーを回避するために、アクティブセルの列が1列目かどうかを判定する処理が入っています。
With ActiveCell
If .Column <> 1 Then
Home » Excel VBA Rangeオブジェクト » Offsetプロパティ » 隣のセルの値をコピーするExcelマクロ