Home » ExcelVBA Rangeオブジェクト » Offsetプロパティ » 隣のセルの値をコピーするExcelマクロ

隣のセルの値をコピーするExcelマクロ

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「マクロ 隣のセル 値 コピー」
「vba 隣のセルの値をコピー」
という検索キーワードで、このサイト・インストラクターのネタ帳へのアクセスが時折あることに気づきました。

隣のセルの値をコピーする、Excel VBA(Visual Basic for Applications)のコードを探している方による検索です。

[スポンサードリンク]

VBAでセルの値をコピーする

セルの値を別のセルと同じにしたいのならば、コピー&ペースト(貼り付け)を行う必要はありません。

値の代入を行えばOKです。

Sub A1セルの値をB1セルにコピーする()

 Range("B1").Value = Range("A1").Value

End Sub

上記のマクロを実行すると、代入演算子「=」の左側に書かれている「Range("B1").Value」に、右側のデータ「Range("A1").Value」が代入されます。

値のみをコピー&ペーストしたのと同じ結果になります。

隣のセルの値のコピーを繰り返すサンプルマクロ

A1:A10セルにデータが入っていて、隣のB1:B10にはデータが入っているセルと入っていない空白セルがあったときに、空白セルだったときにだけ隣のA列の値をコピーする場合は、以下のようなマクロです。

Sub 隣のセルの値のコピーを繰り返す()

 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

End Sub

ここでは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です。

左隣のセルの値をコピーするサンプルマクロ

アクティブなセルに、左隣のセルの値をコピーしたいのなら、以下のようなマクロです。

Sub 左隣のセルの値をアクティブセルにコピーする()

 With ActiveCell
  If .Column <> 1 Then
   .Value = .Offset(0, -1).Value
  End If
 End With

End Sub

左隣のセルの値をコピーしているのは、
   .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プロパティの、

隣のセルの値をコピーするExcelマクロ

第2引数に「-1」を指定することで左隣のセルを取得しています。

A列のセルがアクティブな状態で、
  ActiveCell.Value = ActiveCell.Offset(0, -1).Value
を実行すると、左隣にセルがないために実行時エラーが発生してしまいます。このエラーを回避するために、アクティブセルの列が1列目かどうかを判定する処理が入っています。
  With ActiveCell
   If .Column <> 1 Then

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » Offsetプロパティ » 隣のセルの値をコピーするExcelマクロ

「Offsetプロパティ」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.