Excel VBA 範囲のコピー(応用)

自分用にVBAのメモ

意見やアドバイスがあれば教えてください。

なんなら参考にしてくれたら嬉しいです。(コメントくれたら喜ぶかも)

 

セルの範囲をコピーする方法(基本)

A1~B101の範囲にあるデータをC1~D101に張り付ける場合以下のプログラムになる
ーーーーーーーーーーーーーーーーーー
Sub CopyRange1()

Dim CopyRange As Variant

CopyRange = Worksheets(1).Range("A1:B101").Value 'A1~B101の範囲の値をCopyRangeにする
Worksheets(1).Range("C1:D101") = CopyRange 'CopyRangeに指定した範囲の値をC1~D101に代入する

End Sub
ーーーーーーーーーーーーーーーーーー
このプログラムで範囲のコピーが可能

 

このプログラムのデメリットとして、
"A1:B101"や"C1:D101"のように決まった範囲しか行うことができない!

 

コピーする列も行も決まっていない時

"〇:〇"内の変数に変えればできる
そのため、以下のように書くとエクセル上で入力で変更することができる
ーーーーーーーーーーーーーーーーーー

Sub CopyRange2()

 

Dim CopyRange As Variant


'コピーするものを入れる変数
Dim CopyRangeCP As String
Dim CopyRangeCE As String
Dim CopyRangeCT As String

 

'貼り付けるものを入れる変数
Dim CopyRangePP As String
Dim CopyRangePE As String
Dim CopyRangePT As String

CopyRangeCP = Worksheets("Sheet1").Range("A1").Value
CopyRangeCE = Worksheets("Sheet1").Range("A2").Value
CopyRangeCT = CopyRangeCP + ":" + CopyRangeCE

CopyRangePP = Worksheets("Sheet1").Range("A3").Value
CopyRangePE = Worksheets("Sheet1").Range("A4").Value
CopyRangePT = CopyRangePP + ":" + CopyRangePE

CopyRange = Worksheets("Sheet2").Range(CopyRangeCT).Value
Worksheets("Sheet2").Range(CopyRangePT) = CopyRange

End Sub
ーーーーーーーーーーーーーーーーーー

使用方法
・コピーしたい左上のセルをシート(Sheet1)のA1セルに入力
・コピーしたい右下のセルをシート(Sheet1)のA2セルに入力
・貼り付けたい左上のセルをシート(Sheet1)のA3セルに入力
・貼り付けたい左上のセルをシート(Sheet1)のA4セルに入力
・コピーして貼り付けたいセルをシート(Sheet2)に入力

入力例)

f:id:motopc12:20210612110644j:plain

 

 

列が決まっていない時

コピー及び貼り付ける列(A列など)のセルが決まっていて列が決まっていない時

ーーーーーーーーーーーーーーーーーー

Sub CopyRange3()

 

Dim CopyRange As Variant
Dim CopyRangeColumn As Integer
Dim CopyRangeCT As String
Dim CopyRangePT As String

CopyRangeColumn = Worksheets("Sheet1").Range("A1").Value
CopyRangeCT = "A1:" + Cells(CopyRangeColumn, 2).Address(False, False) 
CopyRangePT = "C1:" + Cells(CopyRangeColumn, 4).Address(False, False)

 

CopyRange = Worksheets("Sheet2").Range(CopyRangeCT).Value
Worksheets("Sheet2").Range(CopyRangePT) = CopyRange

End Sub

ーーーーーーーーーーーーーーーーーー 

使用方法
・列をシート(Sheet1)のセルA1に入力

・コピーするデータをシート(Sheet2)のA1~B(Sheet1のA1で入力した数字)を入力

 

実行後は貼り付けたいデータをシート(Sheet2)のC1~D(Sheet1のA1で入力した数字)に出力

 

入力例)

f:id:motopc12:20210612183213j:plain

出力)この値を入力した場合、Sheet2のA1~B101のデータを読み取り、

   Sheet2のC1~D101に貼り付ける。

 

補足説明

・Cells(〇, 〇).Address(False, False)

Cellsで入力したデータをRangeで出力することができる

入力例)Cells(2, 1).Address(False, False)

 出力)A2