VBにてCSVデータを読み込むロジックを組んでいるのですが
データの中にカンマが入ったものがたまにあります。
通常通り読むとデータのカンマを区切りのカンマと間違え正しく変数に読み込まれません。
たとえばCSVデータが下記の場合
123,de-ta,12,000,jjjj
実際のデータは
123
de-ta
12,000
jjjj
ですが
12,000を2個のデータと認識して
123
de-ta
12
0000
jjjj
のようになってしまいます。
どなたか12,000をちゃんと読める方法をご存知の方お力をお貸しください。
よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (11件中1~10件)

こんにちは


そのアプリは、固定長出力はできないでしょうか。
二重引用符もだめだとすると、規則性を利用してロジックで分けるしかありません。
例えば・・
Line Input で1行ずつ取り込み。
念のためカンマの数をカウントしてみる。
カンマの位置で、データを切り出す。Instr()かVB6のSplit()で。
IsNumeric(str)を利用して、データが数値か文字列かを判断する。
例ですと、数値の後ろの項目は文字列になっているので、文字列が後ろに来たら、そこまでの数値を連結する。
てな具合です。
では!
    • good
    • 0
この回答へのお礼

ありがとうございます。
私もLine Input で1行ずつ取り込み。を考え、とりあえずプログラミングしてみました。
なんとか今、正常に稼動しています。
やはりこの手しかないようですね。

お礼日時:2002/09/19 12:00

難しいですね。



でも、まずカラム数は決まっているのですよね?
123,de-ta,12,000,jjjjの場合はカラムが4になるべき?

一行を一度に読み込み、Split関数などで配列にデータを
分割し、カラム数が必要な値より大きい場合は、配列の後
ろから数値でかつ3桁のものを探して、その前が数値であれ
ば繋げるとかすれば、少しいけるかも知れません。
データが
1,222,333,222 でカラム数が2とかの場合は無理ですが。

以上、参考になれば幸いです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
line input文にてなんとか切抜けました。

お礼日時:2002/09/19 12:03

123,de-ta,12,000,jjjj



あなたは12,000をどうやって12と000は一緒の数値だと見分けました?
そこからロジックをたててみて、カンマ区切りを読み込む関数を作ってみてください
しかしもしあなたが見分けられない物があるとするとロジックのたてようはありません。

質問だけではわかりませんがおそらく数値、文字、数値、文字などのなんらかパターン
があるのでしょう。
    • good
    • 0
この回答へのお礼

ありがとうございます。
line input文にてなんとか切抜けました。

お礼日時:2002/09/19 12:03

既解答の中に、読んで後のロジックで解決する的な話がありますが、今私も別件の解答で失敗しましたが、もしInput #1,a,b,c式で読むと、次々にずれて変数a,b,cなどにセットされ、最後にEof(1)でレコードの終わりを上手く捉えられず、読むデータが無いというエラーに行き付くと思います。

ご解答にあるようにメモ帳に読みこんで手作業で,を除くより他無いと思います。解答者は実際テストデータでやってみて頂いて、ご批判を仰ぎたいと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
line input文にてなんとか切抜けました。

お礼日時:2002/09/19 12:04

No.5の者です。

カンマは小数点のことかと思いましたが、金額のカンマが正しいのでしょうか。金額のカンマとしても、難しいですね。例えば、

12,345とあったとします。
\12と\345とも取れますし、\12345とも取れますね。

金額のカンマを除いた状態で出力すると12,345→12345となり、\12345に固定されてしまいますね。

やはり、カンマが「区切り記号」と「金額のカンマ」との違いが無い限り、無理な気がします。12、234,56、78,90とかになっていないと厳しいでしょう。\12,\234,56,\78,90など金額の頭に「区切り記号」の意味の文字列があったなら良かったのですが。

7_7_7さんは12,345のような場合、\12と\345、\12345、どのように見分けているのでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございます。
line input文にてなんとか切抜けました。

お礼日時:2002/09/19 12:04

>データの中にカンマが入ったものがたまにあります。


ロジックを組んで取り込もうとする先がカンマがあったりなかったりの可変では
ロジックでの対処は難しいのではないですか。
手間になりますが一度別のアプリで読み込んで金額をカンマなしで再出力するとか
で取り合えず対処するくらいだと思います。(例えばExcelで読み込んでカンマ編集
を除くとか)

市販のソフトでCSVで出力出来るのであれば金額のカンマを除いた状態で出力する
設定がありそうなものですが。
CSVで出力する際の設定を変更するオプションは無いのでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございます。
line input文にてなんとか切抜けました。

お礼日時:2002/09/19 12:04

No.3の回答だと、例、12,34,56,78(12,34と56,78)として、「数字と数字の間にあるカンマは数字の一部と見なす」としたら、12.34.56.78("."は小数点)とありえない数値になってしまいます。

質問の意図からして、12,000の","は小数点のことだと思いますが、上の例のように、カンマで区切られた数字が連続であった場合、12と34と56と78、12と34.56と78、・・・など、あいまいすぎて法則を見つけるのが非常に困難だと思います。12,000の前後に何か一定の法則がないと、市販のアプリ側が小数点のことを考慮していただく他に無いのでは、と思います。
    • good
    • 0

市販のソフトなのであれば、販売元のサイトにパッチファイル等がないですかねえ。

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

ありがとうございます。
line input文にてなんとか切抜けました。

お礼日時:2002/09/19 12:06

 市販のアプリがそういうの出力してるってことは、それアプリのバグですね(^_^;


 裏技つかって何とかするしかないです。
 数字と数字の間にあるカンマは数字の一部と見なすとか。
    • good
    • 0
この回答へのお礼

ありがとうございます。
line input文にてなんとか切抜けました。

お礼日時:2002/09/19 12:05

CSVでは、データにカンマが含まれる場合(というか、文字列なら。

)は、二重引用符で、クォートするのが、お約束のような。

ex) 3,"12,000","Test"

データ作成側で対処すべきかと。
    • good
    • 0
この回答へのお礼

ありがとうございます。
line input文にてなんとか切抜けました。

お礼日時:2002/09/19 12:05

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q読点とカンマの違い

「読点」の意味を辞書で引いたら下のようにでていたのですが、今ひとつよく意味が解りません。英語のカンマとはどう違うのか説明してほしいんですが。


味の切れ目を示すため、文中に施す「、」の符号。→句点

お願いします。

Aベストアンサー

「味の切れ目」→「意味の切れ目」ですね。(^^)

で,既に出ている回答とも重なりますが,日本語でも横書きの場合はカンマを使うことがあります。特に数字やアルファベットのあとに読点が来ると何となく間が抜けてみえるので,数字や欧文を多用する理工系の図書や雑誌などに多く見られます。
この文章もそのスタイルで書いています。なので,farsideさんの前の質問(http://oshiete1.goo.ne.jp/kotaeru.php3?q=98303)の回答で「今も使っていません。」と断言されてしまうと,私が書いているのは一体何なの?と,ちょっと困ってしまいます。
あ,よく見ると「正式な日本語の文章にカンマはありません。」でしたね。正式じゃないからいいのか。でも,それなら正式な日本語って何? 理工系の図書や雑誌は大多数が正式じゃないってこと? 「公用文の書き方」(という政府の内部規定)が正式? じゃ民間の文章はみんな正式じゃないのか? よくわからなくなってきました。

話を戻しますと,横書きの日本語でカンマを使うか読点を使うかは,単にその図書なり雑誌なりの出版社が編集方針として決めているだけのことで,機能的には従来からの読点と何ら変わりがありません(数値の区切りとかは別)。
では,その日本語本来の読点と,英文のカンマはどう違うかというと…基本的には,文(センテンス)の中に打って,意味上の切れ目を示すわけですから,似たようなものといってよいでしょう。
ただ,細かく見ていくと,そもそも英文法と日本語文法が違いますので,比較のしようがなくなってくると思います。たとえば,英語では関係節と主節を区切る時に使いますが,日本語ではそもそも関係代名詞がありませんね。

英語のカンマの打ち方は,文章のルールブックというのがいろいろとあって,それを見ると出ています。代表的なものとして,Chicago Manualの中から該当のページを参考URLに載せておきました。カンマの打ち方だけで,全部で27項目あります。

ちなみに,中国語では読点(、)は並列を表し(日本の中黒「・」のような使い方),それ以外はすべてカンマです。横書きでも縦書きでも一緒です。
日本語で書くとこんなふうになるでしょうか。「私は,彼女と一緒に,京都、奈良、大阪、神戸を旅して回った。」

参考URL:http://www.publicbookshelf.com/public_html/Manual_of_Style/commarule_i.html

「味の切れ目」→「意味の切れ目」ですね。(^^)

で,既に出ている回答とも重なりますが,日本語でも横書きの場合はカンマを使うことがあります。特に数字やアルファベットのあとに読点が来ると何となく間が抜けてみえるので,数字や欧文を多用する理工系の図書や雑誌などに多く見られます。
この文章もそのスタイルで書いています。なので,farsideさんの前の質問(http://oshiete1.goo.ne.jp/kotaeru.php3?q=98303)の回答で「今も使っていません。」と断言されてしまうと,私が書いているのは一体何なの?と...続きを読む

QCSVをVB(input)で読み込んだ場合に数値を文字列として読込みたい。

初めまして。個人的にVB6.0を勉強しています。教えてください。

【概要】
VBを使用し、CSVの読込(input #)→編集→TXTで出力(White #) する場合、inputの読込段階でデータが自動変換されてしまう。

【内容】
CSV(カンマ区切)のデータです。
(例)
シメイ,住所(都道府県),市街局番,番号
小林○○,千葉県○市○○,011,111-1111
佐藤○○,埼玉県○市○○,009,999-9999

input #で読込むと、市外局番の頭0(ゼロ)が省略され【11】や【9】と読込まれてしまう。
なんとか文字列として【011】や【009】と読込みたいです。

【奮闘記】
input #を使用し上記ファイルを+読込んでいます。
(line inputで読み込むと1列全てが結合された文字列となってしまうので、電話番号を結合するなど、編集ができなくなってしまうので)

input #として読込んだ段階で、数値として自動変換されてしまっているので、どうすればよいものなのか。。。
どんなアドバイスでも助かります!!よろしくお願いします。

初めまして。個人的にVB6.0を勉強しています。教えてください。

【概要】
VBを使用し、CSVの読込(input #)→編集→TXTで出力(White #) する場合、inputの読込段階でデータが自動変換されてしまう。

【内容】
CSV(カンマ区切)のデータです。
(例)
シメイ,住所(都道府県),市街局番,番号
小林○○,千葉県○市○○,011,111-1111
佐藤○○,埼玉県○市○○,009,999-9999

input #で読込むと、市外局番の頭0(ゼロ)が省略され【11】や【9】と読込まれてしまう。
なんとか文字列として【011...続きを読む

Aベストアンサー

こんにちは。

> input #として読込んだ段階で、数値として自動変換されてしまっている
ということですが、受け取り変数をString型にすれば
問題ないと思います。

Sub TEST()
Const cnsFILENAME = "D:\TEMP\TEST_DATA.csv"
Dim intFF As Integer
Dim X(1 To 4) As String
intFF = FreeFile
Open cnsFILENAME For Input As #intFF
Do Until EOF(intFF)
Input #intFF, X(1), X(2), X(3), X(4)
Debug.Print "(1)=" & X(1) & ", (2)=" & X(2) & _
", (3)=" & X(3) & ", (4)=" & X(4)
Loop
Close #intFF
End Sub

こんにちは。

> input #として読込んだ段階で、数値として自動変換されてしまっている
ということですが、受け取り変数をString型にすれば
問題ないと思います。

Sub TEST()
Const cnsFILENAME = "D:\TEMP\TEST_DATA.csv"
Dim intFF As Integer
Dim X(1 To 4) As String
intFF = FreeFile
Open cnsFILENAME For Input As #intFF
Do Until EOF(intFF)
Input #intFF, X(1), X(2), X(3), X(4)
Debug.Print "(1)=" & X(1) & ", (2)=" & X(2) & _
...続きを読む

Q電卓 パソコン カンマの位置の違い

999円以上の数字を打つときにパソコンと電卓とで不思議に思うことがあります。

例えば「1000」と表記する時に
千の位と百の位の間の下に「,(コンマ)」を入れて
「1,000」とするようですが
なぜ電卓では上にコンマを入れるのでしょうか?
(私が保有している電卓だけなのか?)

電卓では
区切り点と小数点を見やすくするためですか?
しかしもしそうなら
なぜ電卓だけで、普段のパソコンなどでの書式は
区切り点と小数点も下に点をつけるのでしょうか?

 何かわかる方よろしくお願いします。

Aベストアンサー

> なぜ電卓では上にコンマを入れるのでしょうか?

・日本(アメリカ、イギリス)では、3桁ごとの区切りは「,」カンマ、小数点は「.」ピリオドが使われています。
ところが、ヨーロッパ圏を主体に、日本とは逆の3桁ごとの区切りは「.」ピリオド、小数点は「,」カンマが広く使われています。

近年、インターネットオークションなどで、桁取りや少数点でトラブルが多発するようになりました。
そこで、2003年10月17日にフランスのパリで行われた国際度量衡(どりょうこう)総会(CGPM)で、小数点を統一するための会議が行われました。

この国際会議で決定されたのが、なんと、なんと、、、
・「小数点は、ピリオドまたはコンマのどちらでもOK」と決められました。
・その代わり「3桁ごとの位取りはスペースを用いる、または、無し」となりました。

例: 123 456 789.012(ピリオド) または 123 456 789,012(コンマ) と定められました。


第22回国際度量衡総会決議(PDF)
http://www.intermet.jp/metric/22ndCGPM.pdf
原文
http://www1.bipm.org/jsp/en/ViewCGPMResolution.jsp?CGPM=22&RES=10

=ご質問に係わる要約=(上記PDFの7ページ)
2003年、第22回国際度量衡総会において、小数点は「小数点は、ピリオドかコンマのどちらかとする」と決められました。
3桁区切りは、3桁ごとに空白を入れて読みやすくするのは構わない。
しかし、混乱を避けるため3桁区切りに「コンマやピリオド」を使ってはならないと規定されています。

そこで、2003年以降の電卓では、従来の位置に3桁区切り「コンマ」を使うことが出来なくなったため、電卓メーカーは、苦肉の策としてzxdaeg様のご質問の通り、上部に印(マーク)を付けています。

添付写真の通り、古い電卓では、従来の位置に3桁区切り記号があります。

> なぜ電卓では上にコンマを入れるのでしょうか?

・日本(アメリカ、イギリス)では、3桁ごとの区切りは「,」カンマ、小数点は「.」ピリオドが使われています。
ところが、ヨーロッパ圏を主体に、日本とは逆の3桁ごとの区切りは「.」ピリオド、小数点は「,」カンマが広く使われています。

近年、インターネットオークションなどで、桁取りや少数点でトラブルが多発するようになりました。
そこで、2003年10月17日にフランスのパリで行われた国際度量衡(どりょうこう)総会(CGPM)で...続きを読む

Qcsvファイルを読み込んでデータベースのデータと比較して異なっていた場

csvファイルを読み込んでデータベースのデータと比較して異なっていた場合は更新するようにしたいと考えています。

csvデータ…10
データベースから取得したデータ…10.0
※比較するテーブルのフィールドのデータ型はFLOAT型です。

文字列を数値変換して比較、またはデータベースから取得したデータを文字列に変換して比較、どっちがいいのでしょうか。
またどのように比較すればいいのでしょうか。

くだらない質問かもしれませんが宜しくお願いします。

Aベストアンサー

No1の方が言いたいこと良くわかります。けして、質問の意味取り違えていませんよ。

>文字列を数値変換して比較、またはデータベースから取得したデータを文字列に変換して比

問題になるのは、対象となるデーターの背景です。何のデーターを対象としているかです。

例えば、計測又は計量したデーター10.10 と10.1 では意味が違いますね。10.10では100分の1まで計測したが100分の1は0だったという意味です。10.1は10分の1までの計測で、100分の1の値は不明と言うことです(又は四捨五入などの圧縮したデーター)。

数値的には同じ10.1ですが、何桁で扱うかが問題になります。DBでデーター型で扱う利点は、このような時に精度をそろえられるところにあります。文字列として扱ってしまうと、余計な(0と言う文字を追加)作業が出てくる場合もあります。

逆にそんなのどうでもいい、と言う場合もたくさんあり、ケースbyケースです。

文字列として"10.10" == "10.1"なるのかと言う問題ですね。これを==で結びたいときは数値として扱うべき、そうでない時は文字列として扱うと簡単です。

と言うことで回答はケースbyケースです。

No1の方が言いたいこと良くわかります。けして、質問の意味取り違えていませんよ。

>文字列を数値変換して比較、またはデータベースから取得したデータを文字列に変換して比

問題になるのは、対象となるデーターの背景です。何のデーターを対象としているかです。

例えば、計測又は計量したデーター10.10 と10.1 では意味が違いますね。10.10では100分の1まで計測したが100分の1は0だったという意味です。10.1は10分の1までの計測で、100分の1の値は不明と言うことです(又は四捨五入などの圧...続きを読む

Q英文中のカンマの使い方について

英文の中で、so の前のカンマが有るのと無いのがありますが、なぜですか?違いは何ですか?

全般的に、カンマの打ち方、法則みたいのがあれば教えてください。

宜しくお願いします。

一応自分でも調べてみたのですが、難しい説明でしたので、・・・簡単に解説していただければ幸いです。

Aベストアンサー

「だから」のような意味の時はコンマを使うことがあります。しかし、法則という程のものはありません。so が very のような「とても」という意味になる時はコンマは使いません。very good, so good 、どちらもコンマは使いません。

QVB2005 でtxtデータをデータグリッドビューに読み込む

VBに取り付かれて、悪戦苦闘している素人です。メモ帳に縦に並んでいる100人ほどの名前を、直接データグリッドビューに取り込むにはどうしたらよいのでしょうか。どなたかお分かりになる方、教えていただけないでしょうか。宜しくお願いいたします。

Aベストアンサー

こんな感じです

Dim filename As String = (なにやらテキストファイルのパス)
Dim dt As New System.Data.DataTable()
dt.Columns.Add("名前", Type.GetType("System.String"))

Using sr As New System.IO.StreamReader(filename, System.Text.Encoding.GetEncoding("shift-jis"))
  Do While sr.Peek() >= 0
    Dim dr As System.Data.DataRow = dt.NewRow()
    dr("名前") = sr.ReadLine()
    dt.Rows.Add(dr)
  Loop
End Using

Me.DataGridView1.DataSource = dt.DefaultView

Q",which"と"which"の違いとは

関係代名詞の”,Which”とカンマのないWhichの違いとは何なんでしょうか。よく理解できていないので、教えてください。お願いします。

Aベストアンサー

(1)which:限定(制限)用法
(2), which:非制限用法
と呼びます。

前者は、一般に先行詞を「限定」するために、後者は先行詞に「追加情報」を与えるために用います。

よく使う例ですが
(1)Tom has three pens which look very expensive.
(2)Tom has three pens, which look very expensive.

(1)の方では、'pens'のうち、「高そうに見える」ものだけに話の対象を限定しています。

対して(2)の方では、トムの持っている'pens'に対して、それが「高そうに見える」という情報を付け加えています。

その結果生じる明確な違いは、
(1)の場合には、「3本の高そうなペン」以外に、「高そうではないペン」を持っている可能性があります。言い換えれば、(1)の文は「高そうなペン」の話しかしていない(限定している)ため、それ以外についてはわからないのです。

(2)の場合には、「トムは3本のペンを持っている」と言った上で「そのペンは高そうに見える」という情報を追加しているので、トムの持っているペンはその3本以外にはないという含みがあります。

(1)which:限定(制限)用法
(2), which:非制限用法
と呼びます。

前者は、一般に先行詞を「限定」するために、後者は先行詞に「追加情報」を与えるために用います。

よく使う例ですが
(1)Tom has three pens which look very expensive.
(2)Tom has three pens, which look very expensive.

(1)の方では、'pens'のうち、「高そうに見える」ものだけに話の対象を限定しています。

対して(2)の方では、トムの持っている'pens'に対して、それが「高そうに見える」という情報を付け加えています。
...続きを読む

QCSVファイルの読み込み

使用ソフト:Microsoft Visual Basic 2005 Express Edition
csvファイル(カンマ区切り)で一列目(aaaの部分)を表すにはどうしたらよいのでしょうか?
aaa,bbb,ccc

Aベストアンサー

テキストをまず1行ずつ読み込んで、Split関数でカンマごとに区切った配列として使えばいいだけでは?

Qこの問題、どうしてカンマ不要なのか?

次のような英作問題がありました。
二番目の問題で、「but の前には、カンマをつけよ」と模範解答にはありました。
一番目の問題では、「andの前」には、カンマがありません。
これはどうしてなのでしょうか。

■彼女は立ち上がって窓を開けました。(andを用いて)
She stood up and opened the window.

■私はとても疲れていましたが、母を手伝いました。
I was very tired, but helped my mother.

二つとも、前節と後節の主語は同じです。
二つとも、二つの文章を結びつけています。
一見、「違いはないじゃないか」と思いました。

私が考えた2つの文章の違いは、

◇一番目の文章は、立ち上がり→窓をあけるという一連の動作であること。
◇また、一番目の文章の方が、二番目の文章と比べると…まあ、短い。

よって、一番目のandの前には、カンマがつかないのかと思いましたが…。

しかし、自信がもてません。

アドバイスを、お願いいたします。

Aベストアンサー

この問題、どうしてカンマ不要なのか?
次のような英作問題がありました。
二番目の問題で、「but の前には、カンマをつけよ」と模範解答にはありました。
一番目の問題では、「andの前」には、カンマがありません。
これはどうしてなのでしょうか。

andやbutは、等位接続詞と言って、基本は2つの同等なものをつなぎます。
Tom and Mary are married.
名前と名前をつなぎ、同等なものを結んでいます。


■彼女は立ち上がって窓を開けました。(andを用いて)
She stood up and opened the window.
→この場合、upはついていますが、stoodとopenedという動詞を2つ結んでいます。
ここにカンマを入れることは可能ですが、
その場合、彼女が立ち上がり、それからーーと、ひと呼吸あるといいますか、少しそこに時間のずれを感じさせます。
She stoop up, and opened the window.はちょっと特殊な言い方となりますね。

■私はとても疲れていましたが、母を手伝いました。
I was very tired, but helped my mother.
→これはbe動詞と一般動詞という、同じ動詞でも、種類の違うものを結んでいます。
こういう場合、
1.I was [ very tired ] and [ ( I was ) helped ]
2.I [ was very tired ] and [ I ] helped.
という2つの解釈の可能性が生じてしまいます。
ところが、カンマを入れることにより、1ではなく、2だということになるのです。
この場合カンマを入れるべきです。

以上、ご参考になればと思います。

この問題、どうしてカンマ不要なのか?
次のような英作問題がありました。
二番目の問題で、「but の前には、カンマをつけよ」と模範解答にはありました。
一番目の問題では、「andの前」には、カンマがありません。
これはどうしてなのでしょうか。

andやbutは、等位接続詞と言って、基本は2つの同等なものをつなぎます。
Tom and Mary are married.
名前と名前をつなぎ、同等なものを結んでいます。


■彼女は立ち上がって窓を開けました。(andを用いて)
She stood up and opened the window.
→この場合、up...続きを読む

QExcelVBA CSV読込書き込み

ExcelVBAです。Excelバージョンは2003,2007です。
CSVファイルを読み込み、書き換えて、別のファイル名で保存します。
一通りできるのですが、次の場合どの様にしたら良いでしょうか?
CSVのデータ項目が、20桁ほどの数値、住所などの文字列、5桁ほどの数値となっています。
20桁ほどの数値は文字列扱いにしたいのですが、Excelでは指数表示になってしまいます。
そのままCSVとして保存すると指数で保存されてしまいます。
これを文字列として表示し、CSV保存でも文字列として保存したいのです。

よろしくお願いします。

Aベストアンサー

CSVファイルのフォーマットが
列数や各列のデータ型が固定であればVBAで作って・・という気にはなりますが
不定の場合なら、データ→外部ファイルのインポートからCSVファイルを選択し
ウィザードに従って、20桁の数字を文字列として取り込めば・・と思います。

VBAの場合、ファイルが3列の時には

Sub インポート()
Const inCSV As String = "e:\test.csv"
'test.csv は、12345678901,aa,1234 のような感じ
Dim ff As Integer
Dim StrLine As String
Dim i As Integer
Sheets(1).Columns("A:A").NumberFormatLocal = "@"

ff = FreeFile
Open inCSV For Input As #ff
Do Until EOF(ff)
Line Input #ff, StrLine
Range("A1:C1").Offset(i, 0) = Split(StrLine, ",")
i = i + 1
Loop
End Sub

なお保存時に、仮に
12345678901,aa,1234 が
"12345678901",aa,1234 のようでもあっても、
Excelは数値と判断できれば一律に数値として扱ってしまうので
CSVファイルをダブルクリックで開く時に、このお節介機能を止めるすべは無いかと?
※なにかしら列の先頭に(タブコードとか?を)入れて置けば出来そうですが
これはこれで後々はまりそうなので、どうかな?と思います。

CSVファイルのフォーマットが
列数や各列のデータ型が固定であればVBAで作って・・という気にはなりますが
不定の場合なら、データ→外部ファイルのインポートからCSVファイルを選択し
ウィザードに従って、20桁の数字を文字列として取り込めば・・と思います。

VBAの場合、ファイルが3列の時には

Sub インポート()
Const inCSV As String = "e:\test.csv"
'test.csv は、12345678901,aa,1234 のような感じ
Dim ff As Integer
Dim StrLine As String
Dim i As Integer
Sheets(1).Columns("A:A").NumberFormatL...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報