VBA CSV,タブ(Tab)区切りファイルを作成する方法 - Excel VBA ホームページ制作 | 墨田区

VBA CSV,タブ(Tab)区切りファイルを作成する方法 – Excel VBA

LINEで送る
Pocket

VBAでExcelファイルからCSVやタブ(Tab)区切りファイルを作成する方法をご紹介します。
実務では、Excel で管理されているデータが多数あります。そのデータをシステムにインポートしたいなどの要望があった場合、Excel のままでもインポート可能ですが、既存の仕組みを使ってインポートしたい場合など、CSVやタブ区切りのテキストファイルを利用したりします。

今回はマクロを実行することで、CSVやタブ(Tab)区切りのテキストファイルを作成します。
それでは、サンプルソースを見ながら解説していきます。




【PR】マジか?!「アレ」してるLINEスタンプっていったい・・・


対象データ

セル A1 から C11 まで、セルに値を入力しています。
タブ区切り出力対象


サンプルソース

サンプルソースはこちらです。標準モジュールを追加してご利用ください。

Option Explicit

'
' 処理 :タブ区切りファイルへの保存
' 作成日:2014/03/03
' 作成者:saka-en, http://www.saka-en.com
'
Public Sub Run()
    Dim FileName As String
    FileName = WriteTsvFile(Worksheets("サンプル"))
    If FileName <> "" Then
        MsgBox "タブ区切りテキストファイルが作成されました。" & vbCrLf & "[PATH]" & vbCrLf & FileName, vbInformation, "タブ区切りテキストファイル作成完了"
    End If
End Sub

'
' 処理 :タブ区切りファイル作成
' 引数 :対象シート
' 戻り値:ファイル名
' 作成日:2014/03/03
' 作成者:saka-en, http://www.saka-en.com
'
Private Function WriteTsvFile(TargetSheet As Worksheet) As String
On Error GoTo WriteTabTxtFileErr

    Dim FileName As String
    Dim LastRow As Long
    Dim LastCol As Long
    
    ' ファイル名を作成
    FileName = Application.ThisWorkbook.Path & "\" & Format(Now, "yyyymmdd-hhnnss") & "_" & TargetSheet.Name & ".txt"
    
    ' 最終行と最終列の取得
    LastRow = Cells(Rows.Count, 1).End(xlUp).Row
    LastCol = Cells(1, Columns.Count).End(xlToLeft).Column
    
    ' 範囲を指定してコピー
    Range(TargetSheet.Cells(1, 1), TargetSheet.Cells(LastRow, LastCol)).Copy
    
    ' 新規BOOKの作成
    Workbooks.Add
    
    ' 張り付け
    ActiveSheet.Paste
    
    ' アラートOFF
    Application.DisplayAlerts = False
    
    ' Tab区切りText形式で保存
    ActiveWorkbook.SaveAs FileName:=FileName, FileFormat:=xlText, Local:=True
    ' CSV形式で保存
    'ActiveWorkbook.SaveAs FileName:=FileName, FileFormat:=xlCSV, Local:=True
    
    ' 新規BOOKを閉じる
    ActiveWindow.Close savechanges:=False
    
    ' アラートON
    Application.DisplayAlerts = True

    WriteTsvFile = FileName
    Exit Function
    
WriteTabTxtFileErr:
    MsgBox "[WriteTabTxtFile]" & vbCrLf & TargetSheet.Name & vbCrLf & Err.Description, vbCritical, "Exception"
    WriteTsvFile = ""
    Exit Function
End Function

処理の流れ

処理の流れを説明していきます。

1.ファイル名を作成

FileName = Application.ThisWorkbook.Path & "\" & Format(Now, "yyyymmdd-hhnnss") & "_" & TargetSheet.Name & ".txt"

まず、作成されるファイル名を構築します。こちらは任意で変更できますが、今回は、Excel ファイルと同じ場所に日付(YYYYMMDD) + 時刻(HHMMSS) + シート名のテキストファイルを作成することにします。


2.最終行と最終列の取得

最終データがある行と列の取得方法は様々ですが、今回はこの方法を利用します。

LastRow = Cells(Rows.Count, 1).End(xlUp).Row

Rows.Count にて、行数を取得し、そこから End(xlUp) にて、最終行を探します。
Excel 操作で、最終行(65535)から CTRL + 上ボタンを押下するイメージです。

LastCol = Cells(1, Columns.Count).End(xlToLeft).Column

こちらも同様で Columns.Count にて列数を取得し、そこから End(xlToLeft) にて、最終列を探します。Excel 操作で、最終列(IV)から CTRL + ← を押下するイメージです。


3.範囲を指定してコピー

Range(TargetSheet.Cells(1, 1), TargetSheet.Cells(LastRow, LastCol)).Copy

最終行と最終列を選択状態にし、コピーします。
CTRL + C ボタンを押下するイメージです。


4.新規BOOKの作成

Workbooks.Add

一時的に別の Workbook を作成します。Workbook は作成されても非表示状態ですので、目で見ることはできません。したがってユーザの目には、新しい Workbook が作成されたようには見えませんので、画面がチラチラしてストレスになることもありません。


5.張り付け

ActiveSheet.Paste

新しい Workbook のシートに貼り付けます。CTRL + P ボタンを押下するイメージです。


6.アラートOFF

Application.DisplayAlerts = False

ここで重要なのが、アラートを OFF にすることです。これをやらないと、保存するか否かなどのメッセージが表示され、ユーザの手を煩わせることになり、自動化できません。


7.Tab区切りText形式で保存

ActiveWorkbook.SaveAs FileName:=FileName, FileFormat:=xlText, Local:=True

貼り付けたデータをファイルに保存します。FileFormat:=xlText が、タブ(Tab)区切り保存を意味しています。「名前を付けて保存」のイメージです。
Local:=True を設定すると、コントロールパネルで設定された日付形式で保存されます。この引数を忘れると日付形式が “yyyy/m/d” から “m/d/yy” 型に変更されてしまいますのでご注意ください。
詳しくは こちら を参照ください。
VBA SaveAs テキストファイル保存 日付や通貨の書式が変更される問題の解決方法


7.CSV形式で保存

ActiveWorkbook.SaveAs FileName:=FileName, FileFormat:=xlCSV, Local:=True

FileFormat:=xlCSV が、CSV形式での保存を意味しています。


8.新規BOOKを閉じる

ActiveWindow.Close savechanges:=False

一時的に別の Workbook を利用したので、ここはきちんと閉じる必要があります。これをしないと、実行するたびにプロセスがどんどん増え、メモリを多用し、PCへかかる負荷が増大します。リソースは限りがありますので、使いっぱなしはいけません。


9.アラートON

Application.DisplayAlerts = True

ここも重要です。アラートを OFF にしたので、ON に戻してやらないと、次からの操作でメッセージが表示されなくなるなどのトラブルが発生し、ユーザが困惑します。


10.メッセージの表示

MsgBox "タブ区切りテキストファイルが作成されました。" & vbCrLf & "[PATH]" & vbCrLf & FileName, vbInformation, "タブ区切りテキストファイル作成完了"

ファイルが正常に保存されたことをユーザに教えてあげましょう。


11.実行結果

マクロ実行

ファイル作成完了

エクスプローラで確認

テキストファイル参照


いかがでしたでしょうか?
今回は、テキスト出力したいセルにデータが全て埋まっている状態でしたが、実務では、行や列によってセルに値があったりなかったりすることが多々あると思います。その際には、最終行と最終列の取得方法には注意が必要です。この方法だと、正常に取得できない可能性もあります。行数や列数が決まっている場合には問題ないのでしょうが、決まっていない場合などは、十分な検証が必要です。

おつかれさまでした。

LINEで送る
Pocket

この記事がお役に立ちましたら シェア をお願いいたします。

Office / VBAの勉強が思うように進まないときは!

Office / VBAの勉強が思うように進まないのであれば、プロに直接質問ができる プログラミングスクール を検討してみてはいかがでしょうか?プログラミングスクールに申し込めば、短期間で一定のスキルを身に着けることができます!

Office / VBAコースあり!未経験者にウケてる KENスクール パソコンスクール・パソコン教室 【KENスクール】個別指導のWeb-DTP・OA・IT PCスクール

理解度や学習ペースに合わせて、一人ひとりが納得して前進できる授業を提供してくれるのが特徴です。特に課題製作は現場さながらで、実務に即したものとなっていますので短期でのスキルアップが望めます。自宅学習のサポートも充実していて、授業内容をいつでもビデオで振り返ることができるのもうれしいですね。好きな時間に好きな場所で、無理なくスケジューリングできるので、仕事の忙しい方でも柔軟に学ぶことができますよ。

更にさらに、なんと 就職サポート をしてくれるというのですから驚きです!!

履歴書の書き方から面接指導、求人の紹介など、具体的な就職先まで提案してくれるんです!私も「もっと早く出会いたかったなぁー、こんなスクール」・・・って思っちゃいました^^

東京・神奈川・愛知・大阪を営業エリアとされています。
まずは気軽に 無料体験予約 に申し込んでみるのもアリですよ。


コメントを残す

お名前 (必須)
メールアドレス
(アドレスは公開されません)

コメント(必須)

Trackback URL