基礎から学ぶVBAプログラミング教室

もりさんのお題を解きながら楽しく勉強しよう

スポンサーリンク

【ExcelVBA】ブック内のシートをテキスト形式で保存したい

Excelブック内の特定のシートをタブ区切りのテキスト形式で出力するマクロの紹介です。

f:id:excel-accounting:20180414234258p:plain:w400

この記事でできること

手作業で実施した場合の「名前を付けて保存」→「テキスト(タブ区切り)(*.txt)」の処理をマクロ化します。

f:id:excel-accounting:20180510210932p:plain:w400

【イメージ】

f:id:excel-accounting:20180620183153p:plain:w400


この記事に掲載しているコードは、Excelブック本体にマクロを含ませることで動作します。

f:id:excel-accounting:20180620182155p:plain:w300


「Excelブック本体にはマクロを含ませたくない」という方はこちらの記事をご覧ください。
※こちらは特定のシートではなく全シートを一括出力します。


なお、参照設定は使用しない方法としています。

(参照設定ってなに?という方は読み飛ばして大丈夫ですよ!)

ソースコード

Option Explicit

Sub テキストファイル作成()

    Application.ScreenUpdating = False
    
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    Dim myname As String
    myname = fso.GetBaseName(ThisWorkbook.Name)

    Sheets(1).Visible = True
    Sheets(1).Copy '空の新規ブックにコピーする
    
    '新規ブックをテキスト形式で保存
    ActiveWorkbook.SaveAs _
        Filename:=ThisWorkbook.Path & "\" & myname & ".txt", _
        FileFormat:=xlText

    '新規ブックは不要なので保存しないで閉じる
    ActiveWorkbook.Close SaveChanges:=False

    MsgBox "カレントパスにテキストファイルを出力しました。"

End Sub

処理の流れ

  • ①テキスト作成元の対象シートを新規ブック(Book1)にコピー
  • ②新規ブック(Book1)をテキスト形式で保存
  • ③新規ブック(Book1)を破棄(保存しないで閉じる)

f:id:excel-accounting:20180620184640p:plain:w450

※ブック内の一番左のシート(Sheet1)をテキスト化することを想定したコードです。

必要に応じてSheets(x)の部分を変更してください。

※保存先
ThisWorkbook.Pathを使用しているので、Excelブックと同じパスにテキストファイルが作成されます。


(参考)なぜこのような流れにしているかというと、

いったんテキスト形式で保存すると、このようになってその後のExcel編集ができなくなるんですね。

f:id:excel-accounting:20180312221148p:plain:w450


このマクロと逆パターン(テキストファイル→エクセルシート)の処理をする場合はこちらの記事をご覧ください!

スポンサーリンク