テック

【VBA】任意の行以降を全て削除してシートごとにCSV出力する手順

ユーザー登録などの業務においては、大抵のシステムの場合CSVファイルによるインポートがまだまだ主流なのではないだろうか。

そのCSVファイルを作成する際に、複数のシステムに向けたインポート用のファイルをシートごとに作成している。

この各シートがそれぞれ、全部同じ行数だったので一括で任意の行を削除できるVBAを作成した。このVBAのメリットとしては、実行するたびに何行目以降削除するのかを指定できる点だ。

この記事を読んでできるようになること
  • 指定したシートにおいて任意の行以降を一括で削除
  • 任意の行については実行するたびに手入力で指定可能
ツイッターやってます。お問い合わせはこちらから。

Excelのサンプル

▲これと同様のシートがそれぞれ「Sheet1」「Sheet2」「Sheet3」という名前で保存されているとする。

VBAコードの内容

Sub lineDeletion()
  ActiveWorkbook.Save
  Dim ws As Worksheet
  Dim ans As String

  Sheets("Sheet1").Select
  Range("A1").Select

  ans = InputBox("数字のみ入力してください", "削除を開始したい行を入力", "")

  Worksheets("Sheet1").Rows(ans & ":" & Worksheets("Sheet1").Rows.Count).Delete
  Worksheets("Sheet2").Rows(ans & ":" & Worksheets("Sheet2").Rows.Count).Delete
  Worksheets("Sheet3").Rows(ans & ":" & Worksheets("Sheet3").Rows.Count).Delete

  For Each ws In Worksheets

  ws.Activate
  ActiveWorkbook.SaveAs _
  Filename:=ActiveWorkbook.Path & "\" & ws.Name & "_" & Format(Date, "yyyymmdd") & ".csv", _
  FileFormat:=xlCSV

  Next ws

  MsgBox "ファイル作成が完了しました。"
  Application.Quit
  ActiveWorkbook.Close SaveChanges:=True
End Sub

VBAの使い方

このファイルは一気にCSV化してExcelを閉じるまで実行される。また、CSV化されたファイルはこのExcelと同じ階層にあるので改修して使うという方は専用のフォルダーに格納した状態で使用することをおすすめする。

動きに関しては非常にシンプルだ。

実行するとまず「Sheet1」の「A1」を選択状態になり、ポップアップが表示される。

▲このときに表示される文字も変更可能だ

“4行目以降がいらない”という場合には、「4」と入力することで、設定した全てのシートの4行目以降が完全に削除された状態でCSV化される。

対象のシート名を変更したり、増やしたりする場合は下記の部分を変更すると良い。

Worksheets("Sheet1").Rows(ans & ":" & Worksheets("Sheet1").Rows.Count).Delete
Worksheets("Sheet2").Rows(ans & ":" & Worksheets("Sheet2").Rows.Count).Delete
Worksheets("Sheet3").Rows(ans & ":" & Worksheets("Sheet3").Rows.Count).Delete

まとめ

本記事では自分のためだけに作成した、特定の行以降を全て削除するVBAを紹介した。

似たようなVBAはネットに転がっていたが、毎回削除する行数を指定したかったので割と気に入っている。

※当サイト(tamocolony)では極力最新の情報を掲載するよう努めていますが、掲載内容は最新のものと異なる、もしくは情報自体が誤っている可能性があります。当サイトにて記載している情報について、有用性や正確性、安全性についていかなる保証もするものではありません。
修正の必要や記事に関する質問がある場合は、当サイト問い合わせページよりお知らせいただけると幸いです。