2012/03/05

Excel CSV I/O ~ Excel 2007以降で CSV ファイルを簡単にインポート・エクスポートできるアドイン


Excel CSV I/O とは

Excel CSV I/O は、CSV ファイルを簡単にインポート(読み込み)、エクスポート(書き出し)できる Excel アドインです。Excel 2007/2010/2013/2016 で動作します。

Excel で CSV ファイルを開くと、数字の”001”が”1”になってしまったり、文字コードの関係で文字化けするなどの問題があります。Excel CSV I/O は、こういった問題も解消します。

また、CSV ファイルのインポート機能とエクスポート機能を持つことで、Excel を強力な CSV エディタとして利用することができます。

Pic01
※データはダミーです。

インストール方法

アドインファイルのコピー

「ExcelCsvIO.zip」をダウンロードし、ファイルを解凍して作成される「ExcelCsvIO.xlam」を Excel のアドインフォルダにコピーします。

  • Windows Vista/7/8/10 の場合
    • C:\Users\[ユーザID]\AppData\Roaming\Microsoft\AddIns

Excel 2007 の設定

Excel 2007 を起動して、Office ボタン >> Excel のオプション >> アドイン からアドインの設定画面を開きます。そして、「管理」項目に「Excel アドイン」が表示されている状態で「設定」ボタンを押します。

アドイン画面が表示されるので、「参照」から先ほどコピーした「ExcelCsvIO.xlam」を選択し、表示される「ExcelCsvIO」にチェックを入れ「OK」ボタンを押すことでインストール完了です。

インストールが完了すると、リボンメニューに「CSV I/O」タブが表示されます。

Excel 2010/2013/2016 の設定

Excel 2010/2013/2016 を起動して、ファイルタブ >> オプション >>アドインからアドインの設定画面を開きます。そして、「管理」項目に「Excel アドイン」が表示されている状態で「設定」ボタンを押します。

アドイン画面が表示されるので、「参照」から先ほどコピーした「ExcelCsvIO.xlam」を選択し、表示される「ExcelCsvIO」にチェックを入れ「OK」ボタンを押すことでインストール完了です。

インストールが完了すると、リボンメニューに「CSV I/O」タブが表示されます。

使用方法

Excel CSV I/O の起動

「CSV I/O」タブをクリックして表示される「インポート」ボタン、または「エクスポート」ボタンをクリックすると、各処理を行う画面が表示されます。

Pic02

インポート処理

インポート画面で各項目を設定して「インポート」ボタンをクリックすると、ファイル選択画面が表示されます。ファイルを選択すると、設定内容に従って Excel に CSV ファイルの内容がインポートされます。

Pic03

各項目説明
  • 区切り文字
    • 項目間を区切る文字を指定します。CSV ファイルであれば通常カンマですが、タブやその他の文字(1文字)も指定できます。
  • 文字コード
    • 文字コードを Shift-JIS、EUC-JP、UTF-8、UTF-16 から選択できます。
    • UTF-8 と UTF-16 は BOM (Byte Order Mark) の有無にかかわらず、インポートできます。
  • 改行コード
    • 改行コードを CR+LF、LF、CR から選択できます。
  • オプション
    • 新規シートにインポートする
      • この項目にチェックが入っている場合は新規にシートを作成し、CSV ファイルをインポートします。
      • この項目にチェックが入っていない場合は、アクティブシート(現在表示されているシート)の内容をクリアして、CSV ファイルをインポートします。
    • 数値も全て文字列として扱う
      • この項目にチェックが入っている場合は、各項目の書式を「文字列」として CSV ファイルをインポートします。これにより、”001”のようなデータもそのままインポート可能です。
      • この項目にチェックが入っていない場合は、各項目の書式を「標準」として CSV ファイルをインポートします。

注意事項
  • 文字コードや改行コードは正しく設定してください。設定が間違っていると、文字化け、エラー発生、処理が止まることがあります。
  • このアドインは VBA (Visual Basic for Applications) で作成されているため、大量データをインポートする際は若干時間がかかります。

エクスポート処理

エクスポート画面で各項目を設定して「エクスポート」ボタンをクリックすると、保存ファイルの指定画面が表示されます。ファイルを指定すると、設定内容に従ってアクティブシートの内容を CSV ファイルにエクスポートします。

Pic04

各項目説明
  • 出力データ
    • 出力データに、"A1"セルもしくは任意のセルのアクティブセル領域を指定することができます。選択したセル領域を指定することもできます。
    • アクティブセル領域とは、「選択しているセルまたはセル範囲から、すべての方向の最初の空白行または空白列までの領域」(エクセル事典より)のことです。
  • 区切り文字
    • 項目間を区切る文字を指定します。CSV ファイルであれば通常カンマですが、タブやその他の文字(1文字)も指定できます。
  • 文字コード
    • 文字コードを Shift-JIS、EUC-JP、UTF-8、 UTF-16 から選択できます。
    • UTF-8、UTF-16 は、BOM の有無を指定できます。
  • 改行コード
    • 改行コードを CR+LF、LF、CR から選択できます。
  • オプション
    • 項目をダブルクォーテーションで囲む
      • この項目にチェックが入っている場合は、各項目をダブルクォーテーションで囲んで CSV ファイルをエクスポートします。
      • セル内に改行コードが入る場合があるため、この項目は特別な理由がない限りチェックを入れておくことをおすすめします。

アンインストール方法

アンインストールは、アドイン画面で「ExcelCsvIO」のチェックを外して「OK」を押すと「Excel CSV I/O」が削除されます。

ライセンス

このアドインは、MIT ライセンスにて公開します。ソースコードを参照しない方はフリーウェアと思ってください。

ダウンロード

ダウンロードは安心の Vector よりどうぞ。

英語版の提供を始めました。英語版は下記サイトよりどうぞ。

更新履歴

  • 2014/06/25 ver 1.2.2
    • ""で項目が囲まれていないファイルで、最終列が1文字の場合に項目が読み飛ばされる不具合を解消
  • 2014/03/14 ver 1.2.1
    • エクスポート時の"の扱いを修正
  • 2014/03/03 ver 1.2
    • UTF-16、BOM に対応
  • 2012/03/12 ver 1.1
    • エクスポートに機能追加
  • 2012/03/05 ver 1.0
    • 初期リリース

関連ツール


スポンサーリンク


このエントリーをはてなブックマークに追加




Twitter ではブログにはない、いろんな情報を発信しています。


コメント

大変助かりました!
excel 先頭 0 
みたいな感じで検索しても、中々良い方法を発見できなくて手こずってました^^;

便利なアドイン、ありがとうございます。活用させてもらっています。

ひとつ動作確認してほしいのが、データの最後の項目が1文字の場合のインポートです。

例 123,12,1

ReadLineファンクションのSelect Caseで、stateがSTARTのときも、
if i = Len(line) Then state = END_ITEM
の条件文を追加しないと、最後のデータが読み込めないのではないかと。
お時間のあるときに、ご確認お願いします。

>>謝謝さん

不具合情報ありがとうございました。遅くなりましたが、ver 1.2.2 で不具合に対応しましたので、お試しください。

こんにちわ。

項目に改行が含まれていた場合に、EXCEL内でも改行を反映するように、下のように修正入れてみました。

CsvReader クラスの Function ReadLine()中

If state <> QUOTED Then
Exit Do
End If

を下のように変更

If state = QUOTED Then
tmp = tmp + Chr(10)
Else
Exit Do
End If

これで、改行入りCSVファイルもそのまま読み込めます。

これで、幸せになれる人がもっと多くなると思います。

>>yukio さん

コメントありがとうございます!
ちょっとすぐには検証できないのですが、
取り込むか検討させてください。

CSVファイルをエクセルで整形、印刷するマクロを組んでいるものです

0詰数字や、日付が勝手に変換されることには頭を悩ませつつ、
放置してきたんですが、こちらのアドオンで道が開けそうです

そこで質問なのですが、このアドオン内のプロシージャを
別のマクロから呼び出すようにはできますでしょうか?

今までは、以下のように単純にオープンするのみでした。
Workbooks.Open Filename:=ファイル名, Format:=fmt, UpdateLinks:=0

できればこれをそのままリプレースできるとありがたいです
(フォームによらず、設定等もプロシージャのオプションで与える等)

よろしくお願いします

>>yonetchさん

クラスとフォームにコードを記載されているため、単純に置き換えという訳にはいかないかもしれません。ですが、フォームでやっていることはそれほど難しい内容ではないので、その部分を解析できれば、クラスは独立しているのでそれを直接呼び出すことは可能かと思います。

クラスモジュールを使った経験が皆無なため、正しいかどうかわかりませんが、
フォームのbuttonImport_Clickコードを標準モジュールにコピーし

Function myImport(path As String, format As Integer, NewSheet As Boolean) As String
'インポート後シート名を返す

Private Function CreateConfig(format As Integer, NewSheet As Boolean) As CsvConfig

config.IsComma = (format = 1)
config.IsTab = (format = 3)
config.IsOtherDelimiter = (format = 2)
config.OtherDelimiterString = " "
config.IsOptionNewSheet = NewSheet

としてみました。

シート名 = Application.Run("ExcelCSVIO.xlam!myImport", ファイル名, fmt, "TRUE")

で実行することに成功し、だいたいの目的は達成できそうです。

可能なら、拙作の公開ソフトにも組み込みたいので、
fnyanさんの手づからライブラリ化していただき、
二次利用を許可していただくようなことをご検討くださいませんでしょうか

え... と... 昨日の書き込みは、意図的に削除されたということでしょうか?
ソースレベルに関わる問い合わせはご迷惑でしたか?

少々困惑しております。
ご存念をお聞かせいただければ幸いです。

>> yon etchさん

すみません。意図的なものではなかったのですが、
手違いがあったのか、非公開になってしまっていました。
公開にしたつもりですが戻っているでしょうか?

また、処理がうまくいったようでよかったです。

あと、ライブラリ化は今のところ考えていません。
MIT ライセンスというオープンソースライセンスで公開しているのは、
そういうことを自由にユーザーの方にやっていただくことを意図しているためです。

すみませんが、よろしくお願いいたします

単に非公開状態でしたか。ホッとしました。

> MIT ライセンスというオープンソースライセンス

すみません、不明にしてMITライセンスというものをはじめて聞きました
GPLと互換性があるということで、なんとなく見えてきた気がします

つまり、fnyaさんのコードをワタシのコードの中で使うことが可能、
と思ってよろしいのですよね?
(アドイン内のプロシージャを呼ぶのみならず、コードそのものを取り込むことも)

活用させていただきたいと思います。

>> yon etch さん

MIT ライセンスと GPL ライセンスでは、内容が全く違いますがw
でもまあ、第三者(例えば社外)に再配布をしなければ、あまり
気にしなくてもよいです。

そして、オープンソースライセンスなので、コードをまるっと
取り込んでしまって構いません。

>MIT ライセンスと GPL ライセンスでは、内容が全く違いますがw

ガーン、ハジの上塗りを... orz
ググったらそんなようなことが書いてあったんですよぅ(泣)

ともあれ、まずは内部使用で試してみたいと思います。
(クラスモジュール等、未経験のことも多々ありますので)
今後、公開版を検討するようなことがあれば、また相談させてください。

今後ともよろしくお願いします。

いつも使わせて頂いてます。1点、要望というか、CSVエクスポート時に、各セルに設定された書式に合わせて表示されている形式のまま、文字列としてエクスポートできないでしょうか?(EXCEL標準のCSV出力と同じように)
ユーザー定義書式(例えば、"YYYY-MM-DD HH:MM:SS"といった書式)にした場合などです。
あるいは、どこを修正すればいいかご教示ください。

>>hideさん
ちょっと今時間がないので手を付けられないのですが、CSV の出力時に各セルの書式フォーマットを見て、日付型のデータをユーザ定義型の書式に変換することで可能かもしれません。数値型ならともかく、日付型はちょっと難しいかもしれませんが。。。

ありがとう!超便利です

わたしも、テストデータの作成のときに大変助かりました。ありがとうございました。私の場合は、UTF-8、BOMのチェック外す、CR+LF、項目をダブルクォーテーションで囲む、のオプションにてエクスポートでした。

はじめまして。
先日より、とても便利に使わせていただいています。
とても困っていたので、本当にありがとうございます!

ひとつ教えていただきたいのですが、
win7で、excel2010を使用しているのですが、
毎回起動時に、リボンから消えてしまい、
オプションのアドイン設定を確認すると、チェックがちゃんと入っているのですが、
一度チェックを外して登録後、
再度アドイン設定のチェックをし直すという作業を毎日しています。

もしなにか方法があれば、大変助かります。
よろしくお願いします。

>> yamazakiさん

こちらの現象と同じだと思います。
http://fnya.cocolog-nifty.com/blog/2011/12/excel-2003-exce.html

>※Excel 2016 では毎回アドインのチェックを入れなければ表示されないという現象が起きているようです。回避方法は、アドインのファイルのプロパティを開き、「ブロックの解除」を行ってください。

お試しください。

コメントを書く



プロフィール

  • 名前:fnya
    経歴:
    SE としての経験は15年以上。様々な言語と環境で業務系システム開発を行い、セキュリティ対策などもしていました。現在は趣味SE。

    Twitter では、ブログでは取り上げない情報も公開しています。


    ブログについて

    このブログは、IT、スマートフォン、タブレット、システム開発などに関するさまざまな話題を取り上げたり、雑感などをつづっています。

    >>ブログ詳細
    >>自作ツール
    >>運営サイト
    >>Windows 10 まとめ

    Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから