CSVデータで 5182-1 というのがあると Jan-82 になってしまいます
0000002というのがあると 数値の2になってしまいます
”5182-1” や ”0000002” にしても同じです
’5182-1 にすると ’5182-1となり F2で再入力すると 表示は5182-1になりますが’が付いています
これは仕方のないことでしょうか
拡張子をCSVではなくてTXTにしてEXCELの開くで読み込めば列毎に標準や文字列の指定ができるのですが...
なお オプションのLOTUS1-2-3形式の操作キーにチェックは入っていません
csv ファイルを txt ファイルを開いたときと同じ、テキストファイル ウィザードに
よって、列の書式設定を指定して開くので良ければ、以下の方法でできます。
メニューバーの「データ」から「外部データの取り込み」-「データの取り込み」を
クリック。オープンした「データファイルの選択」ダイアログで、「ファイルの種類」に
「テキストファイル」を選択します。
これをマクロ記録しておいて加工してやれば、任意の csv ファイルを選択して読み込む
ことも難しくはないと思います。
--
∧∧
Zzz。. (- - )⌒υ
⌒⌒⌒⌒
柏 琢司
Kashiwa Takuji
"柏木敬子" <kashiwa...@hotmail.com> wrote
in message news:OEQXWkek...@tk2msftngp13.phx.gbl...
ご教示いただいた方法も参考にさせていただきます
"Kashiwa Takuji" <t-ka...@seibu-const.co.jp> wrote in message news:ejbJ4ffk...@tk2msftngp13.phx.gbl...
> メニューバーの「データ」から「外部データの取り込み」-「データの取り込み」を
> クリック。オープンした「データファイルの選択」ダイアログで、「ファイルの種類」に
> 「テキストファイル」を選択します。
>
"柏木敬子" 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列だけは、テキストを読み込むときに、日付として解釈する
のが優先されているのは明らかですが、どこで設定されてい
るのでしょうか?
拡張子.csv形式のテキストファイルは、そのまま読み込むとデータ形式の設定は
できません。csvファイルを、データ形式を指定しながら読み込むにはつぎのよ
うにします。
※Excel2000の場合
1、まず先にExcelを起動しておいて、「データ」-->「外部データの取り込み」
-->「テキストファイルのインポート」をクリックする。
2、すると、テキストファイルウィザードが起動するので、それに従ってファイ
ルを読み込みます。
※このとき、最初に表示されるファイルは、拡張子.txtのファイルだけなので、
拡張子が.csvのファイルはファイルの種類を「すべてのファイル」に変更して
表示させてください。
3、テキストファイルウィザードの3番目で、列ごとにデータ形式を指定するよ
うになっています。ここで、データ形式を文字列にします。
2003/10/16 16:54:11
-----------------------
あだーじょ <adagi...@hotmail.com>
# パソコン歴は長いけど、文科系出身なので
# 難しい話はなんにも分かりません。(^^;)
デフォルトで、csvファイルのデータを、文字列として読み込ませるように設定
する方法はないようです。
データを""で括ってもうまくいきませんでした。
2003/10/16 17:08:05
"Hiroyuki" <smi...@hotmail.com> wrote
in message news:u5c$nm7kDH...@TK2MSFTNGP11.phx.gbl ...
> A列だけは、テキストを読み込むときに、日付として解釈する
> のが優先されているのは明らかですが、どこで設定されてい
> るのでしょうか?
カンマの後(つまりB列以降の文字列の先頭)にスペースがあるか
らではないでしょうか?スペースを取るとまた違った結果になりま
す。
--
岸上幸生 ( ykis...@mail.gosei.co.jp )
"Yukio Kishiue" wrote in message
news:ev4GcW8k...@TK2MSFTNGP12.phx.gbl...
> > A列だけは、テキストを読み込むときに、日付として解釈する
> > のが優先されているのは明らかですが、どこで設定されてい
> > るのでしょうか?
>
> カンマの後(つまりB列以降の文字列の先頭)にスペースがあるか
> らではないでしょうか?スペースを取るとまた違った結果になりま
> す。
ありがとうございました。
目からウロコです。列特異性ではなく、フォーマットなんですね。
まだ、完全には理解していませんが、スペースがない場合で、
2つの数字の間にハイフンがある場合は、日付だろうと仮定し
て処理され、ある範囲を越えた場合は、無処理のテキストに
なっているようですね。日本語書式と英語書式などが混在する
ので、もう少し複雑な条件がありそうですが・・・・
ユーザーが操作できるかどうかは別にして、フォーマットによって
変化するのなら、納得しました。
> > カンマの後(つまりB列以降の文字列の先頭)にスペースがあるか
> > らではないでしょうか?
そうなのです 「スペースがあるとそのままの形式で読める! ラッキー!」
と思ったら読みこんだ物の頭にスペースが入っているので
ソートやvlookupでうまくないし...
> ユーザーが操作できるかどうかは別にして、フォーマットによって
> 変化するのなら、納得しました。
私は納得しません が まぁそんなもんか とあきらめてます
ずいぶん前に「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
よく考えたら、一時ファイルは必要なく、より短いコードで可能でした。
で、せっかくですから "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
5182-1 を 5182/1/1 と認識して Jan-82 と表示するとは
これもマイクロソフト流のお節介な機能だと思います
先の自己フォロー 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