【VBA】セルの転記を自動化する方法|別シートへのコピペ不要に(コピペOK)

VBA
スポンサーリンク

書き換えポイント

変数 説明 初期値
srcSheet 転記元のシート名 "入力"
destSheet 転記先のシート名 "報告"
srcStartCol / srcEndCol 転記するデータの列範囲 "A""D"
headerRows スキップするヘッダー行数 1

転記マクロをボタン(マクロをボタン1つで実行する方法)に割り当てれば、毎朝ボタン1つで転記が完了する。


スポンサーリンク

よくある落とし穴5選

1. シート名の指定ミスで「インデックスが有効範囲にありません」エラー

原因: シート名が実際と違う。対策: シートタブから正確な名前をコピペ。

2. 転記先シートの指定忘れで、自分自身に上書きしてしまう

自分もこれで痛い目にあった。転記先のシートを指定し忘れて、入力シートのデータを入力シート自身に上書きしてしまった。元データが消えて焦った。対策: 必ず wsDest.Range(...) のようにシート変数を付ける。

3. 最終行が正しく取れない(途中に空白行がある)

原因: 判定列に空白があると正しくない場合がある。対策: 必ずデータが入っている列で判定する。

4. PasteSpecial で書式までコピーされた

原因: Range.Copy + Range.Paste だと書式もコピー。対策: 実務版は .Value = .Value で値だけ転記。

5. 転記先の既存データが上書きされた

原因: 開始位置を固定にしていた。対策: End(xlUp).Row + 1 で最終行の次に追記。


FAQ

Q1: 値だけでなく書式もコピーしたい


wsSrc.Range("A2:D" & srcLastRow).Copy
wsDest.Range("A" & destNextRow).PasteSpecial xlPasteAll
Application.CutCopyMode = False

Q2: 別ブックに転記したい


Dim wb As Workbook
Set wb = Workbooks.Open("C:\報告書\月次報告.xlsm")  '← パスは自分の環境に合わせて変更
wb.Worksheets("報告").Range("A1").Value = ThisWorkbook.Worksheets("入力").Range("A1").Value
wb.Save
wb.Close

Q3: 転記後に元データを消したい


Dim ans As VbMsgBoxResult
ans = MsgBox("転記元のデータを消去しますか?", vbYesNo + vbQuestion)
If ans = vbYes Then
    wsSrc.Range("A2:D" & srcLastRow).ClearContents
End If

Q4: 複数ファイルのデータを1つに統合したい

複数Excelファイルを1つに統合 を参照。

Q5: ボタン1つで転記を実行したい

マクロをボタン1つで実行する方法TransferDataAdvanced をボタンに割り当てる。


まとめ

  • .Value = .Value で値だけを別シートに転記できる(最小版)
  • Cells(Rows.Count, "A").End(xlUp).Row で最終行を自動検出し、追記できる(実務版)
  • シート名の指定忘れが最大の落とし穴。必ずシート変数を付ける
  • 転記先の既存データを守るには、最終行+1に追記する方式にする

関連記事


次にやりたくなること


もっとカスタマイズしたい場合

「複数シートから1つの集計シートにまとめたい」「条件に応じて転記先を分けたい」など、カスタマイズが必要な場合はココナラで相談できる。

相談時に伝えると話が早い情報:

  • Excel のバージョン / OS
  • 転記元と転記先のシート構成
  • 転記するデータの列数と行数の目安
  • 転記のタイミング(毎日/毎週/月次)

あわせて読みたい

コメント

タイトルとURLをコピーしました