書き換えポイント
| 変数 | 説明 | 初期値 |
|---|---|---|
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に追記する方式にする
関連記事
- 複数シートに同じ処理を一括実行 — 全シートへの一括処理はこちら
- 複数Excelファイルを1つに統合 — 複数ファイルの統合はこちら
- マクロをボタン1つで実行する方法 — 転記マクロをボタンに割り当て
次にやりたくなること
- ExcelファイルをPDFに一括変換: 転記後の報告シートをPDF出力
- Excelからメール自動作成(Outlook連携): 転記完了後にメールで報告
もっとカスタマイズしたい場合
「複数シートから1つの集計シートにまとめたい」「条件に応じて転記先を分けたい」など、カスタマイズが必要な場合はココナラで相談できる。
相談時に伝えると話が早い情報:
- Excel のバージョン / OS
- 転記元と転記先のシート構成
- 転記するデータの列数と行数の目安
- 転記のタイミング(毎日/毎週/月次)


コメント