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)に入力
入力例)
列が決まっていない時
コピー及び貼り付ける列(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で入力した数字)に出力
入力例)
出力)この値を入力した場合、Sheet2のA1~B101のデータを読み取り、
Sheet2のC1~D101に貼り付ける。
補足説明
・Cells(〇, 〇).Address(False, False)
Cellsで入力したデータをRangeで出力することができる
入力例)Cells(2, 1).Address(False, False)
出力)A2