CSV_ツール.xla

CSV_ツール.xla

シート、テーブル、または選択範囲を別のファイル形式にエクスポートするにはどうすればいいですか現在アクティブなドキュメントを変更せずに?

当社の主なデータ操作環境は 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は一切変更されない

インストール

  1. ダウンロード加える保存してC:\Users\%USERNAME%\AppData\Roaming\Microsoft\AddIns
  2. Excelを開いてアクティブ化します
    • Excel 2003: メニューバー → ツール → アドイン
    • Excel 2007: Excel オプション → アドイン → 移動
    • Excel 2010-13: ファイルタブ → オプション → アドイン → 移動
  3. 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ドキュメントを選択するときは、アイコンを右クリックして[新規]をクリックします。これにより、元のドキュメントに基づいて新しいドキュメント/シート/プレゼンテーションが作成されます。ユーザーは[名前を付けて保存]を実行するだけで、そこからエクスポートできます。

そんなに心配なら、しっかりしたバックアップも取ってあるといいですね...

関連情報