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

動画でExcel シートをタブ区切りのテキストにして保存する
シートをタブ区切りのテキストにして保存する
動画版「マクロ講座」です。
今回はシートをタブ区切りのテキスト形式で保存するというマクロを作成します。
なぜわざわざ、テキスト形式で保存するのでしょうか?
それはExcelを開かなくても手軽に開くことができ、また編集もできるからです。
タブ区切りやコンマ区切りなどのテキスト形式で保存すると、Excel以外のアプリで編集できるようになります。
また今回はユーザにつけた名前を取得するために、ユーザーに
名前を付けて保存ダイアログボックスを表示させて、その名前を VBA で取得して使います。
メソッドは GetSaveAsFilenameメソッドといいます。
マクロ動画 シートをタブ区切りのテキストにして保存する
なぜタブ区切りのテキストで保存するのか
-
タブ区切りやコンマ区切りなどのテキスト形式で保存すると、Excel以外のアプリで編集できるようになるので、内容を手っ取り早く確認したい場合などは、テキスト形式で添付してほしいなどという要望があるわけです。またタブ区切りでは改行などの文字が正しく解釈されます。
Excel はセルの区切りをタブ文字で表していますから、 受け取ったテキストをコピーして、直接Excelに張り付けたりする場合に便利です。そのときにユーザーが自分で名前をつけることができたら便利です。そこでユーザーからファイル名を取得するために名前を付けて保存ダイアログボックスを表示します。この時使うメソッドは GetSaveAsFilenameメソッドといいます。
-
余計な情報が入っていない分、データの容量が軽いということや、様々なソフトやツールで開くことができます。
Excelで[名前を付けて保存] ダイアログ ボックスで、ファイルの種類をテキスト (タブ区切り)に設定して保存すると作成できます。
テキストの名前は、[ファイル名] ボックスに表示されているブック名をそのまま使うか、新しいブック名を入力します。 -
作成したテキストをメモ帳で開きました。データの確認等には、十分です。この操作をマクロで自動化します。
-
サンプルでは、ワークブックのアクティブシートをコピーして、そしてそのコピーしたブックをワークブックのパスと同じところに 保存しろというコードです。
変数として、Dim fname As String、 fname は、シート名を入れておき使うための変数です。
Application.ScreenUpdating = Falseを最初に書いているのは、VBAでの操作を画面で表示するのを止めておくためです。
Falseで画面更新停止、Trueで画面更新再開することができます。Application.ScreenUpdating = False Dim fname As String fname = ThisWorkbook.ActiveSheet.Name
ThisWorkbook.ActiveSheet.Copy
アクティブシートを空の新規ブックにコピーしています。
Dim wb As Workbook: Set wb = ActiveWorkbook
は、新規ワークブックを扱いやすように、wbという変数に入れています。
それをwb.SaveAs と、SaveAsメソッドを使って、名前をつけて保存しています。
引数FileFormat:=xlTextにてテキストで保存することにより、タブ区切りテキストにします。
fnameというのはシート名ですから、fname & ".txt"で保存されます。
また新規ブックは不要なので保存しないで閉じています。'アクティブシートを空の新規ブックにコピーすると新規ブックができる ThisWorkbook.ActiveSheet.Copy 'その新規ブックをテキスト形式で保存 Dim wb As Workbook: Set wb = ActiveWorkbook wb.SaveAs _ FileName:=ThisWorkbook.Path & "\" & fname & ".txt", _ FileFormat:=xlText
-
まとめたコードがこちらです。
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
名前をつけて保存ダイアログを出してテキスト保存
-
2つ目のコードです。今度は、シートを保存するときに、シート名を使うのではなく、その時に名前をユーザーがつけるというものです。
Application.GetSaveAsFilenameメソッドを使います。
構文は次のようになります。
Application.GetSaveAsFilename(InitialFilename, FileFilter, FilterIndex, Title, ButtonText) -
GetSaveAsFilenameメソッドは、[名前を付けて保存] ダイアログボックスを表示しユーザーにフォルダとファイル名を指定してもらいます。
コードでは引数イニシャルファイルネームに"sample.csv"、
そしてフィルファイルフィルターには "CSVファイルもしくはTXTファイル,*.csv;*.txt" を指定しています。 -
実行すると、シートが新規ブックとして作成されます。そして名前をつけて保存ダイアログが表示されて、ユーザーが名前をつけて保存することができます。
-
コードの全体はこちらです。
注意すべきなのは、 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