Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

CSVファイルを読み込んだときに文字 列として読みたい

11,315 views
Skip to first unread message

柏木敬子

unread,
Oct 10, 2003, 6:13:17 AM10/10/03
to
柏木です
Excel2000SR-1(に限らないでしょうが) でCSVファイルを読む時のトラブルなのです

CSVデータで 5182-1 というのがあると Jan-82 になってしまいます
         0000002というのがあると  数値の2になってしまいます
 
       ”5182-1” や ”0000002” にしても同じです

       ’5182-1 にすると ’5182-1となり F2で再入力すると 表示は5182-1になりますが’が付いています

これは仕方のないことでしょうか
拡張子をCSVではなくてTXTにしてEXCELの開くで読み込めば列毎に標準や文字列の指定ができるのですが...

なお オプションのLOTUS1-2-3形式の操作キーにチェックは入っていません

Kashiwa Takuji

unread,
Oct 13, 2003, 10:07:39 PM10/13/03
to
柏です。

csv ファイルを txt ファイルを開いたときと同じ、テキストファイル ウィザードに
よって、列の書式設定を指定して開くので良ければ、以下の方法でできます。

メニューバーの「データ」から「外部データの取り込み」-「データの取り込み」を
クリック。オープンした「データファイルの選択」ダイアログで、「ファイルの種類」に
「テキストファイル」を選択します。

これをマクロ記録しておいて加工してやれば、任意の csv ファイルを選択して読み込む
ことも難しくはないと思います。

--

∧∧
Zzz。. (- - )⌒υ
⌒⌒⌒⌒
柏 琢司
Kashiwa Takuji

"柏木敬子" <kashiwa...@hotmail.com> wrote
in message news:OEQXWkek...@tk2msftngp13.phx.gbl...

柏木敬子

unread,
Oct 14, 2003, 11:27:54 PM10/14/03
to
柏木です
ありがとうございました
よく知らない人が データをCSVでもらったときに
ファイルをWクリックしてExcelに取り込んでしまい
「5182-1 が Jan-82 に化けた」のを
「Excelが壊れた」と大騒ぎするのです  お笑いでしょ 
それを防ぐ方法はないかと思ったのですが 無いみたいですね

ご教示いただいた方法も参考にさせていただきます

"Kashiwa Takuji" <t-ka...@seibu-const.co.jp> wrote in message news:ejbJ4ffk...@tk2msftngp13.phx.gbl...


> メニューバーの「データ」から「外部データの取り込み」-「データの取り込み」を
> クリック。オープンした「データファイルの選択」ダイアログで、「ファイルの種類」に
> 「テキストファイル」を選択します。
>

Hiroyuki

unread,
Oct 16, 2003, 3:46:39 AM10/16/03
to
ひろゆきです

"柏木敬子" wrote in message news:%2381TZO5...@TK2MSFTNGP11.phx.gbl...

> 「5182-1 が Jan-82 に化けた」のを
> 「Excelが壊れた」と大騒ぎするのです  お笑いでしょ 

横からスミマセン。私にとってはお笑いではなく、納得でき
ません。もちろん、csv形式のテキストデータはexcelに読み
込まれた時の解釈で意図しない変換が生じることは驚きで
はありませんが、5182-1の扱い方に納得がいきません。

5182-1, 1-1, 10-1, 100-1, 1000-1, 10000-1
5182-1, 5-1, 51-1, 518-1, 5182-1, 51820-1
, 5182-1, 5-1, 51-1, 518-1, 5182-1, 51820-1

と、いうcsvファイルをエディタで作りました
このファイルをダブルクリックでexcel2000に読み込ませると
Jan-82 1-1 10-1 100-1 1000-1 10000-1
Jan-82 5-1 51-1 518-1 5182-1 51820-1
5182-1 5-1 51-1 518-1 5182-1 51820-1

となります。

A列だけは、テキストを読み込むときに、日付として解釈する
のが優先されているのは明らかですが、どこで設定されてい
るのでしょうか?

あだーじょ

unread,
Oct 16, 2003, 4:03:11 AM10/16/03
to
> ません。もちろん、csv形式のテキストデータはexcelに読み
> 込まれた時の解釈で意図しない変換が生じることは驚きで
> はありませんが、5182-1の扱い方に納得がいきません。
>
> 5182-1, 1-1, 10-1, 100-1, 1000-1, 10000-1
> 5182-1, 5-1, 51-1, 518-1, 5182-1, 51820-1
> , 5182-1, 5-1, 51-1, 518-1, 5182-1, 51820-1
>
> と、いうcsvファイルをエディタで作りました
> このファイルをダブルクリックでexcel2000に読み込ませると
> Jan-82 1-1 10-1 100-1 1000-1 10000-1
> Jan-82 5-1 51-1 518-1 5182-1 51820-1
> 5182-1 5-1 51-1 518-1 5182-1 51820-1
>
> となります。
>
> A列だけは、テキストを読み込むときに、日付として解釈する
> のが優先されているのは明らかですが、どこで設定されてい
> るのでしょうか?

拡張子.csv形式のテキストファイルは、そのまま読み込むとデータ形式の設定は
できません。csvファイルを、データ形式を指定しながら読み込むにはつぎのよ
うにします。

※Excel2000の場合

1、まず先にExcelを起動しておいて、「データ」-->「外部データの取り込み」
-->「テキストファイルのインポート」をクリックする。
2、すると、テキストファイルウィザードが起動するので、それに従ってファイ
ルを読み込みます。
※このとき、最初に表示されるファイルは、拡張子.txtのファイルだけなので、
拡張子が.csvのファイルはファイルの種類を「すべてのファイル」に変更して
表示させてください。
3、テキストファイルウィザードの3番目で、列ごとにデータ形式を指定するよ
うになっています。ここで、データ形式を文字列にします。

2003/10/16 16:54:11
-----------------------
あだーじょ <adagi...@hotmail.com>
# パソコン歴は長いけど、文科系出身なので
# 難しい話はなんにも分かりません。(^^;)

あだーじょ

unread,
Oct 16, 2003, 4:12:25 AM10/16/03
to
質問の趣旨を読み違えたみたいです。失礼しました。

デフォルトで、csvファイルのデータを、文字列として読み込ませるように設定
する方法はないようです。
データを""で括ってもうまくいきませんでした。

2003/10/16 17:08:05

Yukio Kishiue

unread,
Oct 16, 2003, 5:12:20 AM10/16/03
to
岸上です。

"Hiroyuki" <smi...@hotmail.com> wrote
in message news:u5c$nm7kDH...@TK2MSFTNGP11.phx.gbl ...


> A列だけは、テキストを読み込むときに、日付として解釈する
> のが優先されているのは明らかですが、どこで設定されてい
> るのでしょうか?

 カンマの後(つまりB列以降の文字列の先頭)にスペースがあるか
らではないでしょうか?スペースを取るとまた違った結果になりま
す。
--
岸上幸生 ( ykis...@mail.gosei.co.jp )

Hiroyuki

unread,
Oct 16, 2003, 6:40:04 AM10/16/03
to
ひろゆきです

"Yukio Kishiue" wrote in message
news:ev4GcW8k...@TK2MSFTNGP12.phx.gbl...

> > A列だけは、テキストを読み込むときに、日付として解釈する
> > のが優先されているのは明らかですが、どこで設定されてい
> > るのでしょうか?
>
>  カンマの後(つまりB列以降の文字列の先頭)にスペースがあるか
> らではないでしょうか?スペースを取るとまた違った結果になりま
> す。

 ありがとうございました。

 目からウロコです。列特異性ではなく、フォーマットなんですね。
まだ、完全には理解していませんが、スペースがない場合で、
2つの数字の間にハイフンがある場合は、日付だろうと仮定し
て処理され、ある範囲を越えた場合は、無処理のテキストに
なっているようですね。日本語書式と英語書式などが混在する
ので、もう少し複雑な条件がありそうですが・・・・

ユーザーが操作できるかどうかは別にして、フォーマットによって
変化するのなら、納得しました。

柏木敬子

unread,
Oct 17, 2003, 12:17:11 AM10/17/03
to
柏木です
"Hiroyuki" <smi...@hotmail.com> wrote in message news:eIEihH9k...@TK2MSFTNGP09.phx.gbl...

> "Yukio Kishiue" wrote in message
> news:ev4GcW8k...@TK2MSFTNGP12.phx.gbl...
>
> > > A列だけは、テキストを読み込むときに、日付として解釈する
ということではない のはわかって頂けたと思います

> >  カンマの後(つまりB列以降の文字列の先頭)にスペースがあるか
> > らではないでしょうか?
そうなのです 「スペースがあるとそのままの形式で読める! ラッキー!」
と思ったら読みこんだ物の頭にスペースが入っているので
ソートやvlookupでうまくないし...

> ユーザーが操作できるかどうかは別にして、フォーマットによって
> 変化するのなら、納得しました。
私は納得しません が まぁそんなもんか とあきらめてます

ずいぶん前に「Excelのベテラン」とかいう人が講師できたので
この件をぶつけてみたのですが
いろいろ試してみて「わからない 持ち帰って調べてみます」といったっきり
返事なし に終わっています  やっぱりね

Saito

unread,
Oct 17, 2003, 4:52:08 AM10/17/03
to
"123","456"とダブルクォーテーションで囲むだけでは、文字列として認識しないので
="123",="456"とすると文字列として認識できると思いましたが・・・

試してみては・・・

Miyahn

unread,
Oct 17, 2003, 9:52:19 AM10/17/03
to
"柏木敬子" wrote in message news:OEQXWkek...@tk2msftngp13.phx.gbl
> 拡張子をCSVではなくてTXTにしてEXCELの開くで読み込めば列毎
> に標準や文字列の指定ができるのですが..

以下は、昨年の12月に投稿した記事の練り直しですが。

スクリプトを使って、txt な一時ファイルを作って、全てテキスト設定
で開く方法はいかがでしょう?
下記内容のテキストファイルを作成し、適当な名前のスクリプトファイル
として保存します。 例えば、「CSV2TXT.vbs」とか。

Dim xlApp, WS, FS, Args, TempFile, I, Format(255)
Set Args = WScript.Arguments
If Args.Count <> 1 Then WScript.Quit
If LCase(Right(Args(0),4)) <> ".csv" Then WScript.Quit
Set WS = CreateObject("WScript.Shell")
TempFile = WS.ExpandEnvironmentStrings(WS.Environment.Item("Temp"))
Set WS = Nothing
Set FS = CreateObject("Scripting.FileSystemObject")
TempFile = FS.BuildPath(TempFile, FS.GetBaseName(Args(0)) & ".txt")
FS.CopyFile Args(0), TempFile
For I = 0 To 255
Format(I) = Array(I + 1, 2) ' 全列を文字形式に
Next
Set xlApp = CreateObject("Excel.Application")
With xlApp
.Visible = TRUE
.WorkBooks.OpenText TempFile, , , , , , , , True, , , , Format
.DisplayAlerts = False ' ※
.ActiveWorkBook.SaveAs Args(0), 6 ' ※
.DisplayAlerts = True ' ※
.ActiveWorkBook.Saved = True
End With
Set xlApp = Nothing
FS.DeleteFile TempFile '※
Set FS = Nothing

このファイル若しくはそのショートカットに、対象ファイルをドラッグ&
ドロップすれば、全部の列を文字列として Excel で開きます。
SendTo フォルダに入れておけば、右クリック->「送る」で利用できます。

一時ファイルを消す関係で、元の CSV ファイルを上書きしますので、
タイムスタンプは変わります。
一時ファイルが残ってもかまわないなら、コメントに※がある 4行を削除
して下さい。

--
Miyahn?戌年うまれ
HQF0...@nifty.ne.jp

Miyahn

unread,
Oct 17, 2003, 11:14:50 AM10/17/03
to
Miyhan より、自己フォローです。

よく考えたら、一時ファイルは必要なく、より短いコードで可能でした。
で、せっかくですから "csv" ファイルをダブルクリックした時に利用
できるように、レジストリへの登録機能を追加してみました。

Dim xlApp, Args, I, Format(255)
Set Args = WScript.Arguments
If Args.Count = 0 Then Reg_UnReg ' レジストリ登録/解除


If Args.Count <> 1 Then WScript.Quit
If LCase(Right(Args(0), 4)) <> ".csv" Then WScript.Quit

For I = 0 To 255
Format(I) = Array(I + 1, 2) ' 全列を文字形式に
Next
Set xlApp = CreateObject("Excel.Application")

xlApp.Visible = True
xlApp.WorkBooks.OpenText Args(0), , , , , , , , True, , , , Format
Set xlApp = Nothing
WScript.Quit
' 以上が本体コード、以下はレジストリ登録/解除の為のコード
Sub Reg_UnReg
Const TKey = "HKCR\Excel.CSV\shell\"
Dim WS


Set WS = CreateObject("WScript.Shell")

On Error Resume Next
WS.RegRead TKey & "OpenAllText\"
If Err Then
WS.RegWrite TKey, "OpenAllText,Open"
WS.RegWrite Tkey & "OpenAllText\", "全て文字項目で読み込む(&A)"
WS.RegWrite Tkey & "OpenAllText\command\", _
"wscript """ & WScript.ScriptFullName & """ ""%1"""
WS.PopUp "レジストリに登録しました。", 1,"登録完了"
Else
WS.RegDelete Tkey & "OpenAllText\command\"
WS.RegDelete Tkey & "OpenAllText\"
WS.RegWrite TKey, "Open"
WS.PopUp "レジストリから解除しました。", 1,"解除完了"
End If
On Error Goto 0
Set WS = Nothing
End Sub

このスクリプトを引数なしで実行すると、レジストリへ自分自身を登録
し、"csv" ファイルをダブルクリックした時に起動するようになります。
通常の開き方をしたい時は、"csv" ファイルを右クリックして「開く」
を選んで下さい。
レジストリに登録済みの状態で、再度引数なしで実行すると、登録は
解除されます。

--
Miyahn?戌年うまれ
HQF0...@nifty.ne.jp

Sinchan

unread,
Oct 18, 2003, 7:37:36 AM10/18/03
to
Sinchanです
"Saito" <m-sa...@muf.biglobe.ne.jp> wrote in message news:O7bv7vI...@tk2msftngp13.phx.gbl...

> "123","456"とダブルクォーテーションで囲むだけでは、文字列として認識しないので
> ="123",="456"とすると文字列として認識できると思いましたが・・・
> 試してみては・・・
試してみました。
=5182-1  は 5181 になりました セルの中身は =5182-1 です 計算してるのですね
=”5182-1” は 5182-1 ですが セルの中身は =”5182-1” です
 手入力した 5182-1 と =”5182-1” を IF文で判定させたら 同じ と判定しました
 でも =”5182-1” と セルに入っているのは気持ち悪いですね

5182-1 を 5182/1/1 と認識して Jan-82 と表示するとは
これもマイクロソフト流のお節介な機能だと思います

Miyahn

unread,
Oct 19, 2003, 9:46:47 AM10/19/03
to
再び Miyahn より、自己フォローです。

先の自己フォロー news:uma6xHM...@TK2MSFTNGP10.phx.gbl
で提示したコードでは、スレッドで例示されているデータのうち、
5182-1 は正常に読み込まれますが、0000002 や、(先頭に空白のない)
1-1 や 10-1 などはやはり勝手に変換されてしまうようです。

ということで、最初のフォローのように、やはり txt な一時ファイル
を作成する方法がよろしいようです。

news:OHg3YYLl...@tk2msftngp13.phx.gbl のコードの 3行目に


If Args.Count = 0 Then Reg_UnReg ' レジストリ登録/解除

を挿入し、末尾に news:uma6xHM...@TK2MSFTNGP10.phx.gbl の
コードの WScript.Quit 以下を合体させれば、レジストリ登録機能
付きに修正できます。

--
Miyahn?戌年うまれ
HQF0...@nifty.ne.jp

0 new messages