シートをタブ区切りのテキストにして保存する

マクロ講座入門編EX 動画編 04回
マクロ講座

動画でExcel シートをタブ区切りのテキストにして保存する

シートをタブ区切りのテキストにして保存する

動画版「マクロ講座」です。
今回はシートをタブ区切りのテキスト形式で保存するというマクロを作成します。
なぜわざわざ、テキスト形式で保存するのでしょうか?
それはExcelを開かなくても手軽に開くことができ、また編集もできるからです。
タブ区切りやコンマ区切りなどのテキスト形式で保存すると、Excel以外のアプリで編集できるようになります。

また今回はユーザにつけた名前を取得するために、ユーザーに 名前を付けて保存ダイアログボックスを表示させて、その名前を VBA で取得して使います。
メソッドは GetSaveAsFilenameメソッドといいます。

マクロ動画 シートをタブ区切りのテキストにして保存する

なぜタブ区切りのテキストで保存するのか

  1. タブ区切りやコンマ区切りなどのテキスト形式で保存すると、Excel以外のアプリで編集できるようになるので、内容を手っ取り早く確認したい場合などは、テキスト形式で添付してほしいなどという要望があるわけです。またタブ区切りでは改行などの文字が正しく解釈されます。

    Excel はセルの区切りをタブ文字で表していますから、 受け取ったテキストをコピーして、直接Excelに張り付けたりする場合に便利です。そのときにユーザーが自分で名前をつけることができたら便利です。そこでユーザーからファイル名を取得するために名前を付けて保存ダイアログボックスを表示します。この時使うメソッドは GetSaveAsFilenameメソッドといいます。

    シートをタブ区切りのテキストで保存1
  2. 余計な情報が入っていない分、データの容量が軽いということや、様々なソフトやツールで開くことができます。
    Excelで[名前を付けて保存] ダイアログ ボックスで、ファイルの種類をテキスト (タブ区切り)に設定して保存すると作成できます。
    テキストの名前は、[ファイル名] ボックスに表示されているブック名をそのまま使うか、新しいブック名を入力します。

    シートをタブ区切りのテキストで保存2
  3. 作成したテキストをメモ帳で開きました。データの確認等には、十分です。この操作をマクロで自動化します。

    シートをタブ区切りのテキストで保存3
  4. サンプルでは、ワークブックのアクティブシートをコピーして、そしてそのコピーしたブックをワークブックのパスと同じところに 保存しろというコードです。

    変数として、Dim fname As String、 fname は、シート名を入れておき使うための変数です。

    Application.ScreenUpdating = Falseを最初に書いているのは、VBAでの操作を画面で表示するのを止めておくためです。
    Falseで画面更新停止、Trueで画面更新再開することができます。

        Application.ScreenUpdating = False
        Dim fname As String
        fname = ThisWorkbook.ActiveSheet.Name
    
  5. ThisWorkbook.ActiveSheet.Copy
    アクティブシートを空の新規ブックにコピーしています。
    Dim wb As Workbook: Set wb = ActiveWorkbook
    は、新規ワークブックを扱いやすように、wbという変数に入れています。
    それをwb.SaveAs と、SaveAsメソッドを使って、名前をつけて保存しています。
    引数FileFormat:=xlTextにてテキストで保存することにより、タブ区切りテキストにします。
    fnameというのはシート名ですから、fname & ".txt"で保存されます。
    また新規ブックは不要なので保存しないで閉じています。

    シートをタブ区切りのテキストで保存4
        'アクティブシートを空の新規ブックにコピーすると新規ブックができる
        ThisWorkbook.ActiveSheet.Copy
        'その新規ブックをテキスト形式で保存
        Dim wb As Workbook: Set wb = ActiveWorkbook
    
        wb.SaveAs _
            FileName:=ThisWorkbook.Path & "\" & fname & ".txt", _
            FileFormat:=xlText
    
  6. まとめたコードがこちらです。

    Sub タブ区切りテキストをシート名で保存()
        Application.ScreenUpdating = False
        Dim fname As String
        fname = ThisWorkbook.ActiveSheet.Name
        'アクティブシートを空の新規ブックにコピーすると新規ブックができる
        ThisWorkbook.ActiveSheet.Copy
        'その新規ブックをテキスト形式で保存
        Dim wb As Workbook: Set wb = ActiveWorkbook
       ' & ".txt", FileFormat:=xlText とするだけ
        wb.SaveAs _
            FileName:=ThisWorkbook.Path & "\" & fname & ".txt", _
            FileFormat:=xlText
        '新規ブックは不要なので保存しないで閉じる
        wb.Close SaveChanges:=False
        Application.ScreenUpdating = True
    End Sub

名前をつけて保存ダイアログを出してテキスト保存

  1. 2つ目のコードです。今度は、シートを保存するときに、シート名を使うのではなく、その時に名前をユーザーがつけるというものです。

    Application.GetSaveAsFilenameメソッドを使います。
    構文は次のようになります。
    構文 GetSaveAsFilename
    Application.GetSaveAsFilename(InitialFilename, FileFilter, FilterIndex, Title, ButtonText)

    シートをタブ区切りのテキストで保存5
  2. GetSaveAsFilenameメソッドは、[名前を付けて保存] ダイアログボックスを表示しユーザーにフォルダとファイル名を指定してもらいます。

    コードでは引数イニシャルファイルネームに"sample.csv"、
    そしてフィルファイルフィルターには "CSVファイルもしくはTXTファイル,*.csv;*.txt" を指定しています。

    シートをタブ区切りのテキストで保存6
  3. 実行すると、シートが新規ブックとして作成されます。そして名前をつけて保存ダイアログが表示されて、ユーザーが名前をつけて保存することができます。

    NAMAE7
  4. コードの全体はこちらです。
    注意ポイント
    注意すべきなのは、 fname を Stringではなく、 Variant型にしている点です。
    これは If fname <> False Then というようにFalseかTrueかを問うためには、Variant型にする必要があるからです。

    Sub タブ区切りで名前をつけてテキスト保存()
        ThisWorkbook.ActiveSheet.Copy
        Dim wb As Workbook: Set wb = ActiveWorkbook
        Dim fname As Variant
        fname = Application.GetSaveAsFilename("sample.csv", _
                        "CSVファイルもしくはTXTファイル,*.csv;*.txt")
        If fname <> False Then
            ActiveSheet.SaveAs fname
        End If
            wb.Close SaveChanges:=False
    End Sub