Option Explicit
'----モジュール内で使用できる変数を宣言
Dim registSh As Worksheet
Dim dataSh As Worksheet
Dim registLastRow As Long, dataLastRow As Long
Dim registHeadRow As Long, rngHeight As Long
Dim lastColumn
'----モジュール内で使用できる変数を宣言
Dim registSh As Worksheet
Dim dataSh As Worksheet
Dim registLastRow As Long, dataLastRow As Long
Dim registHeadRow As Long, rngHeight As Long
Dim lastColumn
'----registシートから複数行のデータをdatabaseシートの最終行より後に転記する
'registシートはA10~E10セル(10行目)が見出しで
'databaseシートはA1~E1セル(1行目)が見出し(順序は同一)
'例) A B C D E
'|氏名|生年月日|年齢|郵便番号|住所|
Sub データベースへ追加()
Dim rng As Range'データ転記する範囲
Set registSh = Nothing
Set dataSh = Nothing
Set registSh = ThisWorkbook.Worksheets("regist")
Set dataSh = ThisWorkbook.Worksheets("database")
registHeadRow = 0
registHeadRow = registSh.Range("A10").Row'見出しセルを指定する
lastCol = 5'最終列(E列:5列目)
'dataシートの
With dataSh
dataLastRow = 0
dataLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row ' (一列目の) 最終行を取得
End With
'registシートの
With registSh
'rngの行数(rngHeight)を算出
registLastRow = 0
registLastRow = .Cells(Rows.Count, 1).End(xlUp).Row
rngHeight = 0
rngHeight = registLastRow - registHeadRow'最終行-見出し行
If registLastRow = registHeadRow Then'registシートにデータがない場合
'何もしない
Else
'転記
'〈1〉dataシートの1列目最終行から
'〈2〉下へ1行移動(Offset)して、
'〈3〉そこからregistシートにあるデータの行数,列数まで広げる(resize)
'dataシートにregistシートの値を代入する dataSh.Cells(~).Value = registSh.Cells(~).Value
'複数セルの値の代入のときは.Valueを省略出来ない
dataSh.Cells(dataLastRow, 1) _'----〈1〉
.Offset(1, 0).Resize(rngHeight, lastCol).Value _'----〈2〉〈3〉
= .Range(registHeadRow,1).Offset(1, 0).Resize(rngHeight, lastCol).Value
End If
End With
End Sub