- ベストアンサー
ExcelのCSVファイル読み込み時に表示が######となる問題の解決方法
- CSVファイルをExcel(2010)で読み込むと、A1セルに表示が######となる問題が発生します。セルの幅を調整すれば日時が表示されますが、秒は表示されません。しかし、ユーザの操作を必要とせずにA1の表示をC1と同じ状態にする方法があります。
- CSVファイルをExcel(2010)で読み込む際に、A1セルに表示が######となる問題が起きます。セルの幅を調整すれば日時は表示されますが、秒は表示されません。しかし、ユーザの操作を必要とせずにA1の表示をC1と同じ状態にする方法があります。
- Excel(2010)でCSVファイルを読み込むと、A1セルの表示が######となる問題が発生します。セルの幅を調整すれば日時は表示されますが、秒は表示されません。しかし、ユーザの操作を必要とせずにA1の表示をC1と同じ状態にする方法があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>>相手方に「送り手側で作成した読み込みプログラム」で開くようにお願い >これは Excel で開くための読み込みプログラムではなくてそのCSVデータを表示するための専用のビュアープログラムを作成しそのソフトで開いてもらったということでしょうか? > >専用ビュアー作ったという意味であればいいのですが、もしExcelで開くための橋渡し的なソフトを作成したというのであればぜひその方法を知りたいところです いろいろ作りましたが、一番分かりやすかった(相手方にとって)のは、読み込み用のExcel Bookを作って、その中にモジュール(マクロ、Excel VBA)を書いて、マクロを起動すると、ファイル指定、読み込み、シートのフォーマットを行うツールでした。相手方に渡していました。 1.マクロを起動 最初のシートにコマンドボタンを配置し、ボタンを押すとマクロ開始。 2.ファイル指定、 GetOpenFilenameメソッドを使ってファイルを指定してもらう。送ったファイルは相手方のパソコン内にあるためです。フォルダーの指定ですね。指定してもらったブック名はチェックしていました。OKならファイルを開いて次に行きます。合わせて、データを読み込んで作成するブック名、保存フォルダー名を指定してもらいます。ほとんど規定値+年月日.xlsのようなブック名を自動作成するようにしていました。 3.読み込み 基本的には、拡張子が「txt」の固定長や「CSV」のプレーンテキストでした。VBAのLine Input文で読んで「カンマ」やレイアウト(「4」)を参考にして区切ってセルに展開(別ブックです。)します。その当時はSplit関数もなかったですね。この段階まではどの相手方でも同じです。 4.シートのフォーマットを行う ここからが相手方によって少し異なる処理になりますが、やってることは、列の書式設定とAutoFitメソッドを使った列幅の調整です。 書式設定は「最初のシート」にプレーンテキストのフォーマット(項目の桁数や属性、書式設定など)を書いておいてモジュールはそれを参照する形式した。結局フォーマットを個別に定義しますが、モジュールは一つでした。また、相手方には極力、同じようなフォーマットを使うようお願いしました。 細かな話をすると、日付として認識できる項目(住所の1-2-3など)などはExcelが自動変換するので、「4」の処理前に「3」で対応していました。 できたツールの運用は、相手方に送るファイルのフォーマット登録くらいでした。こちらが受け取るデータについても同じツールを使うようにしていました。 ーーーーーーーーーーーーーーーーーーーーーーー >ダブルクリックで開こうが Excel上からCSVを開こうが 現象としての違いはありません。回答者さんの環境では挙動が違った(バージョンの違い?)ということなのでしょうか? ダブルクリックで開く ・・・こちらは何もできません。Excelの意のままです。 Excel上からCSVを開く ・・・「CSVを開く」という行為をマクロの開始とすれば、何でもできます。例えば、そのブックに「CSVを開く」というボタンを置いておき、ファイルのフルパスを書いておくくらいでユーザーはそのボタンを押すだけで目的のフォーマットが手に入ります。上記1~5を行うわけですが、そのブックに読み込むわけで、かなり特化したツールになるのでシートの整形部分は数行かもしれません。まぁ、ファイルを読む部分を入れればまだ増えるでしょう。 列幅の自動調整なら一行でしょう。(例えば、Columns("A:Z").AutoFit)、 秒まで表示なら(Columns("C:C").NumberFormatLocal = "yyyy/m/d h:mm:ss") 主導権がExcelなのか使い手なのかで全然違うと考えています。 ご参考に。
その他の回答 (1)
- nishi6
- ベストアンサー率67% (869/1280)
CSVファイルをダブルクリックして開いたときに、仕様とは別の「ある状態」に自動的に変更することになりますね。かつ、それを望まない人もいるはずです。大変そうです。 質問者様の「自分としてはCSVファイルである以上無理だと思っていますが」は正にその通りだと思います。 ・マクロで「Auto_Open」を使って・・・などと悪巧み(?)をしても、ほとんどはその処理を望まないはずなので混乱するだけでしょうか。 ・CSVファイルの関連付けを変更しても全てのCSVファイルを対象にはできないですね。 ・エクスプローラーCSVファイルを右クリックして、「プログラムから開く・・・」。特別なプログラムを用意しておけばできそうですが、ダブルクリックではないし、「そこまでやる?」という感じです。 ・後は、Microsoftさんの仕様変更に期待。どんな仕様という問題はあります。 実は私もこのような経験があって、相手にCSVファイルを送ったら、「住所が日付になっている」とか「部門コードが数字になった」、「数字が####になっている」などいろいろ指摘がありました。いずれもCSVファイルをエクスプローラーからダブルクリックで開いたパターンです。 送り手としては、対応として、文字列にしたい場合は「" "」で囲ったりしました。しかし、何十万件も送るような場合は、相手方に「送り手側で作成した読み込みプログラム」で開くようにお願いしました。データ数が少なければデータ項目のパターン数も少ないので、検証して問題がなけれがばダブルクリックで開いてもらいました。 また、取引先から受け取る場合もあるわけで、少なくともその取引先からのデータに問題ないと判断するまではExcel側から開いたり、簡易なプログラムで開いていました。昔は拡張子「CSV」を「txt」に変えないとウイザードが使えない時があったと記憶しています。 社内限りのデータについては、「CSVファイルはダブルクリックして開いてはいけない」と教えています。質問者様の事例も開いてはいけない事例の一つとしています。ちょっと見るだけは別だよとはいっています。 解答というより感想になってしまいました。 何か解決策があるといいですね。 ご参考に。
お礼
ちょっと分からないところがありますのでもし回答できる内容であれば教えてください >相手方に「送り手側で作成した読み込みプログラム」で開くようにお願い これは Excel で開くための読み込みプログラムではなくて そのCSVデータを表示するための専用のビュアープログラムを作成し そのソフトで開いてもらったということでしょうか? 専用ビュアー作ったという意味であればいいのですが もしExcelで開くための橋渡し的なソフトを作成したというのであれば ぜひその方法を知りたいところです >CSVファイルの関連付けを変更しても全てのCSVファイルを対象にはできない 今回 自作プログラムで特定のログを作成するのですが そのログをExcelで見たいという話があり 自作プログラム上から Excelの標準データフォーマットのファイルを作成するのはいろいろな面で無理があるので (探してもいませんがExcelのデータフォーマット仕様なんか公開されてないですよね) Excelで読み込み可能な CSV ファイルへの変換して吐き出すことを考えています ユーザ側でそのデータを使ってExcelによりデータのグラフ化などの 加工を行いたいということのようです (Excel機能を自作プログラムに持たせるのはなおさら無理がある) ですので場合によっては全く独自の拡張子ファイルを作成して 新たに関連付けを追加する といったことも不可能ではありません >マクロで「Auto_Open」を使って そういったマクロもあるんですね 知りませんでした うまく作成すれば使えるかもしれないとは感じましたのでもう少し調べてみます CSVでマクロ動かすこと自体できない or オペレータ操作が必要になる と思ってたんでどんなファイルでもオープンの際に動くんであれば ファイル形式チェックなどしたうえで処理動くように考えれば 何とかなるかもしれません 正直な話 Excelはほとんど使っていないのでかなりの初心者級です 今回久しぶりに触ったところ昔のバージョンでは CSVファイル読み込むときに カンマ区切りとか指定しながら読めた記憶があるのですが(2000か2003使ってた時) 現在2010で操作するとそれができなくなっている? 用です リボンのメニューとしてファイル開いた後に設定できるところは見つけてますが 昔はファイル開く段階でできてた記憶が 仮に旧バージョンでそういった形式で開けば対処可能だとしても 今の段階で旧Office用意してくださいってわけにもいきませんし >いずれもCSVファイルをエクスプローラーからダブルクリックで開いたパターン 簡単な手順としてダブルクリックで開くと書きましたが実際こちらでは ダブルクリックで開こうが Excel上からCSVを開こうが 現象としての違いはありません 回答者さんの環境では挙動が違った(バージョンの違い?)ということなのでしょうか? あくまでこちらのスタンスとしてはCSVファイルである以上無理なので 必要ならユーザ側でファイル変換して形式変えたファイルで操作してほしい といった方向で話はしていますが どうせExcelで何らかの操作してデータ加工するんだから ファイル変換ぐらい簡単だろ(その際幅も勝手に設定しとけ) と思っています 自分のExcelに対しての知識不足も絡んでおり もし何らかの方法で比較的簡単に対処できるのであれば何か方法がないかな と思っているところです 書き込みありがとうございました
お礼
まだマクロの使い方などを理解してない部分があるので Auto_Open 等と合わせて再度調査・確認してみたいと思います Bookにマクロ登録して共通モジュールにすれば いいらしいことはなんとなくわかりましたが (場合によっては共通モジュールでなくてもいいのかも) 何も開いていない素のExcelだけでマクロ共通モジュール定義なんかできるのかな と悩んでいました 少なくても今回の内容でいえば全て別のBookからの マクロ起動としての対処になっているように感じました >読み込み用のExcel Bookを作って、その中にモジュール(マクロ、Excel VBA) >を書いて、マクロを起動 そういった意味(EXcel VBA)のソフトでしたか Excel以外のプログラムでそういった操作を行ったといった意味かと勘違いしました 確かにこの方法であればマクロも自由に組めると思うので ある程度の融通は効くんでしょうね ダブルクリックでは無理でExcel上からなら~~ というのも理解できます 拡張子 独自形式に変えて 専用BOOK経由でないと見れないよ(伏字になったりするよ) の方式がいいか 素直に自分で成型する方式がいいか といった 2択で相手に選ばせた方がいいかもしれませんね もう少し調べてみますが 実装の方向性が広がりました 回答ありがとうございました