
シート、テーブル、または選択範囲を別のファイル形式にエクスポートするにはどうすればいいですか現在アクティブなドキュメントを変更せずに?
当社の主なデータ操作環境は Excel であり、ここでは書式設定と数式を多用して目的の結果を得ています。結果は.CSV
他のプログラムとの相互運用性のために保存されます。
「ファイル>>名前を付けて保存>> ファイルの種類 >> CSV"を使用すると.csvファイルが作成されますそしてアクティブなドキュメントが に変更されますsaved_file.csv
。この新しい形式では機能と書式設定が失われるという警告がいくつかありますが、それ以外はユーザー インターフェイスは変更されていません。太字と斜体、さまざまなフォントとサイズ、背景のセル塗りつぶし、定義されたテーブル範囲などがあります。セル内のすべての数式はそのまま残ります。
これは、起こるべくして起こる災害です。ユーザーは仕事に戻り、すべてが正常だと思い込んでしまい、現在の形式が魔法をサポートしていないことをすぐに忘れ、重要な作業(tm)を続けます。昼食の時間になると、Excel を閉じ、いつも目にするため読まれない煩わしいダイアログに 2 回 [はい] を押して、ドアから出ます。...昼食後、ユーザーは戻ってきて、最初の [名前を付けて保存] から [終了] までのすべての作業が消えたことに気づきます。
「ファイル>>輸出残念ながら、「名前を付けて保存」への別のナビゲーション ルートであり、アクティブなドキュメントも「some_file.csv」に変更されます。
必要なのは、一部のデータを別のファイル タイプにエクスポートし、アクティブなドキュメント「our-real-data.xlsx」を保持することです。
これはどうすれば実現できますか? ワンクリックで実行できるようにメニューまたはリボンに追加できますか?
組織内の全員と共有するにはどうすればよいでしょうか? (個々のユーザーに VBA エディターを開くように依頼するなどせずに)
答え1
必要なのは、一部のデータを別のファイル タイプにエクスポートし、アクティブなドキュメント「our-real-data.xlsx」を保持することです。
CSV_ツール.xla
ご指摘いただいたので、CSV としてエクスポートする簡単な VBA アドインを作成しました。新しいユーザーが簡単に理解できるように、できるだけ少ないコードを使用するようにしました。
それは何を意味するのか
- アドインはCSVを保存する場所を尋ねます。デフォルトのフォルダはXLSが保存されているフォルダです。
- アドインは、地域のシステム設定に応じて、区切り文字としてコンマまたはセミコロンを使用する必要があるかどうかを自動的に検出します。
- 現在アクティブなExcelシートのすべての値は、XLSファイルの名前が付けられた新しいCSVファイルにエクスポートされます。
- 既存のXLSは一切変更されない
インストール
- ダウンロード加える保存して
C:\Users\%USERNAME%\AppData\Roaming\Microsoft\AddIns
- Excelを開いてアクティブ化します
- Excel 2003: メニューバー → ツール → アドイン
- Excel 2007: Excel オプション → アドイン → 移動
- Excel 2010-13: ファイルタブ → オプション → アドイン → 移動
Excelを再起動してメニューバーを確認します
VBAコード
Function ExportCSV()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
ChDrive (ActiveWorkbook.Path)
ChDir (ActiveWorkbook.Path)
strName = fso.GetBaseName(ActiveWorkbook.Name)
On Error GoTo 0
strFilename = Application.GetSaveAsFilename(strName, "CSV Files,*.csv", 1)
delimiter = Application.International(xlListSeparator)
If Not strFilename = False Then
Open strFilename For Append As #1
For Each rngRow In ActiveSheet.UsedRange.Rows
arr2D = rngRow
arr1D = Application.Index(arr2D, 1, 0)
strRow = Join(arr1D, delimiter)
Print #1, strRow
Next
Close #1
End If
End Function
異なるユーザー向けの自動更新
すべてのユーザーが Excel でアドインを有効にすると (自動化はできません)、.xla
ネットワーク共有、Robocopy、または同様のツールを使用して新しいファイル バージョンをコピーできます。ただし、この問題を解決するにはさまざまな方法があるため、これは別の質問にする必要があります。
VBAマニアにとって最も興味深いのは
arr2D = rngRow
arr1D = Application.Index(arr2D, 1, 0)
strRow = Join(arr1D, delimiter)
これは、範囲(この場合は1行)を2次元配列に変換し、次に1次元配列に変換し、最後にJoin()関数を使用して1つの文字列に変換します。
答え2
ユーザーにそのデータのコピーを開くように指示します。
Officeドキュメントを選択するときは、アイコンを右クリックして[新規]をクリックします。これにより、元のドキュメントに基づいて新しいドキュメント/シート/プレゼンテーションが作成されます。ユーザーは[名前を付けて保存]を実行するだけで、そこからエクスポートできます。
そんなに心配なら、しっかりしたバックアップも取ってあるといいですね...