エクセルのマクロを利用すると、特定の行・列を除外し、必要なデータだけを別ファイルの指定シートにコピーすることができます。
例えば、2行目、4行目、6行目、8行目のデータ、F列目のエクセルデータが不要部分とします。
これら以外のデータを自動的に選んで、別のエクセルファイルにある週間管理表シートにコピーするといった作業が簡単な操作でできるようになります。
マクロ作成の準備
開発タブから、Visual Basicをクリックします。
上部メニュー「挿入」から標準モジュールをクリックします。
左側のプロジェクトにモジュール1が表示されるので、そちらにコードを記述していきます。
まず、Sub CopyFilteredDataToSelectedWorkbook()と記述します。
そうすると、End Subと表示されます。
Subはマクロの開始、End Subはマクロの終了ですので、この間にコードを記述していきます。
貼り付け先のファイルの設定
Dim destWb As Workbook
destWbをエクセルファイルを表すWorkbookオブジェクト型の変数として宣言しています。
Set destWb = Workbooks.Open(FilePath)
貼り付け先にしたいファイルを開いて、そのオブジェクトをdestWbに格納します。Setを使うのは、Workbooksがオブジェクト型だからです。
貼り付け先のシートの設定
Dim sheetName As String
sheetName = InputBox("貼り付け先のシート名を入力してください(例:週間管理表)")
Set destSheet = destWb.Sheets(sheetName)
貼り付け先のシート名を文字列として入力し、それをdestSheetに格納します。
コピー元の範囲選択
Set srcRange = Application.InputBox("コピー元の範囲を選択してください(例:A2:J8)", Type:=8)
コピーしたい範囲を、ドラッグで手動選択します。
偶数行とF列を除外してコピー
If actualRow Mod 2 <> 0 Then
行番号を2で割った余りが0でなければ(=奇数行)、その行をコピーします。
If j <> 6 Then
destSheet.Cells(pasteRow, j - colOffset).Value = srcRange.Cells(i, j).Value
6列目(=F列目)をスキップして、それ以外の列のみコピーします。
colOffset=1によって、F列をスキップしても列のずれを回避できます。
マクロの保存と実行
Excelファイルは通常「.xlsx」形式で保存されていますが、マクロを含めるには「.xlsm」形式に変更する必要があります。
そのためには、保存をクリックした時に表示されるダイアログで、いったん「戻る」をクリックして、ファイルの種類を「Excel マクロ有効ブック(.xlsm)」に変更します。
Visual Basicにある上部の三角ボタンをクリックすると処理がスタートします。
実行すると、マクロで記述したように、
貼り付け先のファイルの選択、貼り付け先シート名の入力、コピー元の範囲選択という順にダイアログが表示されますので、それぞれ指示に従い入力していきます。
以上が、マクロを利用して、自動的に偶数行、F列を削除したデータをコピーする方法です。
まとめ
このマクロを使えば、
偶数行や特定列の除外。
手作業によるコピー&削除の手間の削減。
ミスの軽減。
といった効果があり、定型処理を一気に効率化できます。