重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

2014/06/19 12:34:56
といった日時が書きこまれたCSVファイルをExcel(2010)で読み込んだとき
(csvファイルはexcelに関連付け状態でファイルをダブルクリックして読み込み)
A1セルに読み込まれ 表示が###### となってしまいます(添付画像参照)
※ 画像は比較しやすいように 同じデータを3つ並べているだけでj実際は1つです
   A1  デフォルト
   B1  セル幅変更
   C1  セル幅およびセル書式変更

自分でA1セルの幅を調整すれば日時(B1)になりますが秒が表示されません
これももちろんセルの表示方法を設定すれば秒まで表示はできます(C1)

自分としてはCSVファイルである以上無理だと思っていますが
ユーザの操作を必要とせずA1の表示をC1と同じ状態にもっていくことは可能なのでしょうか?
可能であればその方法を教えてください

「Excelの表示設定」の質問画像

A 回答 (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なのか使い手なのかで全然違うと考えています。

ご参考に。

 
    • good
    • 0
この回答へのお礼

まだマクロの使い方などを理解してない部分があるので
Auto_Open 等と合わせて再度調査・確認してみたいと思います
Bookにマクロ登録して共通モジュールにすれば
いいらしいことはなんとなくわかりましたが
(場合によっては共通モジュールでなくてもいいのかも)
何も開いていない素のExcelだけでマクロ共通モジュール定義なんかできるのかな
と悩んでいました
   少なくても今回の内容でいえば全て別のBookからの
   マクロ起動としての対処になっているように感じました

>読み込み用のExcel Bookを作って、その中にモジュール(マクロ、Excel VBA)
>を書いて、マクロを起動
そういった意味(EXcel VBA)のソフトでしたか
Excel以外のプログラムでそういった操作を行ったといった意味かと勘違いしました
確かにこの方法であればマクロも自由に組めると思うので
ある程度の融通は効くんでしょうね
ダブルクリックでは無理でExcel上からなら~~ というのも理解できます

拡張子 独自形式に変えて 専用BOOK経由でないと見れないよ(伏字になったりするよ)
の方式がいいか 素直に自分で成型する方式がいいか といった
2択で相手に選ばせた方がいいかもしれませんね

もう少し調べてみますが  実装の方向性が広がりました
回答ありがとうございました

お礼日時:2014/06/19 22:30

 CSVファイルをダブルクリックして開いたときに、仕様とは別の「ある状態」に自動的に変更することになりますね。

かつ、それを望まない人もいるはずです。大変そうです。

 質問者様の「自分としてはCSVファイルである以上無理だと思っていますが」は正にその通りだと思います。
 
・マクロで「Auto_Open」を使って・・・などと悪巧み(?)をしても、ほとんどはその処理を望まないはずなので混乱するだけでしょうか。
・CSVファイルの関連付けを変更しても全てのCSVファイルを対象にはできないですね。
・エクスプローラーCSVファイルを右クリックして、「プログラムから開く・・・」。特別なプログラムを用意しておけばできそうですが、ダブルクリックではないし、「そこまでやる?」という感じです。
・後は、Microsoftさんの仕様変更に期待。どんな仕様という問題はあります。
 
 
 実は私もこのような経験があって、相手にCSVファイルを送ったら、「住所が日付になっている」とか「部門コードが数字になった」、「数字が####になっている」などいろいろ指摘がありました。いずれもCSVファイルをエクスプローラーからダブルクリックで開いたパターンです。

 送り手としては、対応として、文字列にしたい場合は「" "」で囲ったりしました。しかし、何十万件も送るような場合は、相手方に「送り手側で作成した読み込みプログラム」で開くようにお願いしました。データ数が少なければデータ項目のパターン数も少ないので、検証して問題がなけれがばダブルクリックで開いてもらいました。

 また、取引先から受け取る場合もあるわけで、少なくともその取引先からのデータに問題ないと判断するまではExcel側から開いたり、簡易なプログラムで開いていました。昔は拡張子「CSV」を「txt」に変えないとウイザードが使えない時があったと記憶しています。
 
 社内限りのデータについては、「CSVファイルはダブルクリックして開いてはいけない」と教えています。質問者様の事例も開いてはいけない事例の一つとしています。ちょっと見るだけは別だよとはいっています。


解答というより感想になってしまいました。
何か解決策があるといいですね。 ご参考に。
    • good
    • 0
この回答へのお礼

ちょっと分からないところがありますのでもし回答できる内容であれば教えてください

>相手方に「送り手側で作成した読み込みプログラム」で開くようにお願い
これは 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に対しての知識不足も絡んでおり
もし何らかの方法で比較的簡単に対処できるのであれば何か方法がないかな
と思っているところです

書き込みありがとうございました

お礼日時:2014/06/19 17:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!