EXCELにcsv形式の外部データを取り込む際にカンマ区切りで取り込もうとした場合、csvデータの同一セル内に改行データがあると、ずれて表示されてしまいます。
改行を取り除くのはclean関数があることは知っていますが、マクロを利用して、EXCELのデータ→外部データの取り込みの選択だけで取り込む方法はないでしょうか?ご教示ください。

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

A 回答 (7件)

Sub try()


  Dim WRK As String '一時作業ファイル名。削除するので既存ファイル名と重複させないように。
  Dim buf As String
  Dim tmp As String
  Dim n  As Long
  Dim f

  '読込みファイルを選択
  f = Application.GetOpenFilename("csv,*.csv")
  If VarType(f) = vbBoolean Then Exit Sub
  '作業ファイル名設定
  WRK = Application.DefaultFilePath & "\temporary.csv"
  '読込みファイルOpen
  n = FreeFile
  Open f For Input As #n
  buf = StrConv(InputB(LOF(n), #n), vbUnicode)
  Close #n
  '置換(セル内改行を半角スペースに)
  With CreateObject("VBScript.RegExp")
    .Global = True
    .Pattern = "([^\r])(\n+)"
    buf = .Replace(buf, "$1 ")
  End With
  '作業ファイルOpen
  n = FreeFile
  Open WRK For Output As #n
  Print #n, buf
  Close #n
  '[外部データの取り込み]
  With Sheets.Add
    With .QueryTables.Add(Connection:="TEXT;" & WRK, _
               Destination:=.Range("A1"))
      .AdjustColumnWidth = False
      .TextFileParseType = xlDelimited
      .TextFileTextQualifier = xlTextQualifierDoubleQuote
      .TextFileCommaDelimiter = True
      .Refresh BackgroundQuery:=False
      .Delete
    End With
  End With
  '作業ファイル削除
  Kill WRK
End Sub

Excelで作成したcsvファイルで、セル内改行が含まれている場合は上記で読み込めるはずです。
そのcsvファイルをテキストエディタで編集してしまった場合は、うまくいかなくなるかもしれません。

'[外部データの取り込み]...以降、 Kill WRK までのコードは、無くても構いません。
取り込み前にセル内改行を置換してしまえば、
あとは手作業ででも[外部データの取り込み]ができます。
    • good
    • 1
この回答へのお礼

ありがとうございました。
標準モジュールに上記を貼りつけて、うまく読み込むことができました。
VBAの知識が乏しいので頼ってしまいましたが、これを機に勉強して習得したいと思います。
本当にありがとうございました。

お礼日時:2010/06/17 09:28

何年後しのせっかくの回答だったのに、そのままにしてしまうのは残念ですから、私なりの解釈で回答を入れておきます。



VBAのポイントは、
 '*ここで、Lf を抜く(Excelのセル内改行-Chr(10))
 buf = Replace(buf, vbLf, "")

この部分です。もし、該当するものがありましたら、ここに加えてください。
ここで、ひとつずつ不要コードを抜きますが、vbLf かvbCr のどちらかは残してください。

Clean 関数ですと、改行コードもなくなって一行になってしまいますので、それは使えません。

私の記憶では、Binary でインポートすると、StrConv の変換が必要になるということだったと思いますので、
それを省きました。元のファイル名の末尾に、ファイル名$.csv というのが、変換されたファイルです。
本当は、QueryTablesは、使わなくても出来ますが、ご要望なので、入れておきました。

ただし、ファイルの種類によっては、Cr+Lf で、Lf が落ちてしまい、内容が変わってしまう可能性がありますので、
上手くいかなかったら、その後に、
  buf = Replace(buf, vbCr, vbCrLf)
と加えることで、標準改行コードに戻るはずです。考え方は、単純だと思います。

'//
Sub MyAnswer()
Dim fName As String
Dim bkf As String
Dim fNum As Integer
Dim fbk As String
Dim buf As Variant
 fName = Application.GetOpenFilename("csvファイル(*.csv),*.csv")
 If VarType(fName) = vbBoolean Or fName = "" Then Exit Sub
 fbk = Mid(fName, 1, InStrRev(fName, ".") - 1) & "$.csv"
 fNum = FreeFile()
 
 Open fName For Input As #fNum
 buf = Input(LOF(fNum), #fNum)
 Close fNum
 
 '*ここで、Lf を抜く
 buf = Replace(buf, vbLf, "")
 
 fNum = FreeFile()
 Open fbk For Output As #fNum
 Print #fNum, buf
 Close #fNum
  'Sheet の挿入
   With Sheets.Add(After:=Sheets(Sheets.Count))
   With .QueryTables.Add(Connection:= _
    "TEXT;" & fbk, Destination:=Range("A1"))
    .RefreshOnFileOpen = False
    .RefreshStyle = xlOverwriteCells '上書き設定
    .AdjustColumnWidth = False
    .TextFilePlatform = xlWindows
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileSpaceDelimiter = True
    .TextFileConsecutiveDelimiter = True
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileTabDelimiter = True
    .TextFileCommaDelimiter = True
    .Refresh BackgroundQuery:=False
    .Delete
  End With
 End With
 ''Kill fbk 'テンポラリファイルの削除
End Sub
    • good
    • 1
この回答へのお礼

ありがとうございます。
質問を締め切ってしまった後にもかかわらず、ご投稿下さいまして感謝申し上げます。
上記のコードを標準モジュールに貼り付けましてうまく取り込むことができました。
私はVBAの基本的な用語もままならない状態ですので、用語や構造を勉強してコードを理解し、作成できるようになりたいと思っております。
締め切ってしまったためポイントを付与できない状態になってしまい申し訳なく思っております。
本当にありがとうございました。

お礼日時:2010/06/17 20:51

>csvの2つ目を取り込む前に加工して改行をなくしてから取り込むのでは手間がかかる



VBAが十分にできない状態ではこの手作業のが確実で早いのでは?と思います。

>clean関数があることは知っています

この関数を見つける時間をVBAを習得する時間に費やせたらと思います。

VBAでは
Aファイルを読み込みBファイルへ編集して出力する、
Bファイルを読み込みシート01へ値をセットする、
シート01から編集してシート02へ値をセットする、
シート02から編集してCファイルへ出力する、
などシート操作はもちろんファイル操作もできますから、
これまでの関数頼りより対応がかなり広くなり、
極論言えば質問しなくても済む程度になります。

今回はすぐできないにしても、これを機にまた取り組むと良いです。
ここの回答VBAを実行させるくらいは覚えておくべきです。
VBAを習得するにはどうしたら?という質問も出ているくらいですから。

今回の、データはどんな具合になっていますか?。

フリーソフトで「改行だけ取り除く」ものは探してみましたか?。
    • good
    • 0
この回答へのお礼

フリーソフトで探してはおりませんでした。
今回No5さんの方法でうまく取り込むことができましたが、これを機にVBAをきちんと勉強したいと思います。
ありがとうございました。

お礼日時:2010/06/17 09:32

#3の回答者です。


>マクロの作成後にコードを編集するという方法しかできない程度のレベルで

それで十分だと思います。掲示板の回答者の人たちの対応は、それぞれでも、ある程度のことは、それなりに満足させるまで、付き合うはずです。今まで、VBAの質問は、途中で分からなくなって、投げ出していたのではありませんか?そのようにお見受けしているからです。

VBAは、基本的に、Alt + F11 で開いたら、標準モジュールを挿入して、そこに貼り付けて、画面を締めて、フォーム・ツールボタンをつけるなり、Alt + F8 で、選んで実行すれば良いということさえすればよいのですね。分からないことは、分からないで、ここを教えて欲しいと、具体的に聞けばよいのですが、あまり漠然としたものは、回答には難しいです。いままで、VBAの質問は、こちらのチェックでは、どれも成功していないように思ったからです。投げ出さないで成功に結びつけてください。

今回の場合は、

------
もとの、CSV が、

123,456,"bb
b"

こうなっているのではないでしょうか?

それを、

123,456,bbb

このように直す、というように理解いているけれども、それはどうなんでしょうか?ということで、それをVBAのコードで作るというわけです。
-------
それ自体は、VBAでは大したことがありませんが、Clean 関数はあくまでも、ワークシートの関数ですから、それなりに方法がある、ということです。
    • good
    • 0
この回答へのお礼

>今まで、VBAの質問は、途中で分からなくなって、投げ出していたのではありませんか?そのようにお見受けしているからです。
★おっしゃる通りです。ですので私でもできそうな回答を選んで使用させていただいておりました。
VBAのコードを見ても自分のファイルにあてはめた時にどこをどう直せばよいのかわからず諦めていたのです。

今回ご質問させていただいた理由は複数のcsvファイルデータをA4サイズ縦1枚の表示にしたいからです。
仕事でこちらからお客様に提示した項目に入力していただいたものをcsv形式で媒体に保存して頂き、提出していただいております。それを見やすいようにしたいと思っております。csvファイルは1行目に項目名、2行目に内容が入っております。csvファイルは2つです。
しかし、その状態では見づらいし内容確認に時間がかかるので見やすくするためにexcelで取り込んで(sheet1にはcsvの1つ目、sheet2にはcsvの2つ目を取り込む)、sheet3にレイアウトして表示しようと考えました。
csvの1つ目は文章的なものがないので同一セル内に改行がないため、excelにとりこんでも同じレイアウトで表示されます。しかしcsvの2つ目をexcelにとりこんだところ、文章を入力するセルで改行されたものが、改行以降から別の場所(A列)に表示されてしまったため目的が達成できないでおります。検索したところclean関数で改行をなくすことができるところまではわかったという状況です。外部データの取り込みはマクロの記録で自動的にできるようになったのですが、改行によって分断されるところが解決されればと思いました。csvの2つ目を取り込む前に加工して改行をなくしてから取り込むのでは手間がかかるし、私以外の複数の人間が簡単に作業ができればと思ったのです。
それは業者に頼めば済むことではないかと思われるかもしれませんが予算の関係か後回しにされてシステム化の目処が立っていないのです。ご質問のcsvの構造がどうなっているかは明日にならないとわかりませんので確認いたします。

お礼日時:2010/06/16 22:10

もとの、CSV が、



123,456,"bb
b"

こうなっているのではないでしょうか?

それを、

123,456,bbb

にするということですか?確認してください。Clean 関数は使っても、除去できないと思います。

>マクロを利用して、EXCELのデータ→外部データの取り込みの選択だけで取り込む方法はないでしょうか?
マクロなら、外部データの取り込みの選択自体を、メニューからの取り込みでしたほうが楽です。外部データの取り込みは、テーブルオブジェクトを残してしまいます。

それと、ご質問者さんの過去の質問で、VBAの質問をしながら、私に対する返事を含めて、VBAの回答はきちんと対応がなされていませんが、今回は、VBAの回答は大丈夫なのですか?今度、ダメでしたというのでは、一部の人には覚えられてしまいます。2年も3何年も前とは言いながらも、どこかでご自身のVBA(マクロ)の質問に対してはケジメは必要だと思います。
    • good
    • 0
この回答へのお礼

申し訳ございません。
VBAの構造というのがほとんど分かっておらず、マクロの作成後にコードを編集するという方法しかできない程度のレベルで安易に質問をしてしまいました。
VBAに関する質問は勉強してわかるようになってから致します。
ありがとうございました。

お礼日時:2010/06/16 20:10

想定した形式でない以上、何かプログラムするかデータ補整しないとできないと思った方が良いです。



VBAで取り込みとする方法はどうですか。これならできると思います。


こうなるとCSVをどう作ったかも怪しいしTABとかも気になりますね。
    • good
    • 0

>EXCELのデータ→外部データの取り込みの選択だけで取り込む方法


そこまでMSのエクセルの機能を利用するなら、セル内改行(のコード文字)だけを取り除く操作(ダイアロウグボックスなどの選択肢)が無い以上、どうしようもないのでは。
なぜそんなことを改めて聞くのかな。
(VBAでも勉強して)自前で、CSVファイルの各行(レコード)を順次読んで、セル内改行のコードは削除し、書き出し他ファイルを作ってしまうとか、
レコードを読み込んだときに、セル内改行コードを取り除き、項目(列・フィールド)ごとにセルにセットしていけば仕舞いでしょう。10数行のコードで出来ることだ。
先所のためには
Instr関数で捉えられる
そのままシートに読み込んでからChar(10)を空白に置換する方法もあるのでは。
それはChar(10)はCTRL+Jで捉えられること
http://officetanaka.net/excel/function/tips/tips …
を読むこと。Googleで「セル内改行 削除」で照会してみたらこういうのも直ぐ見つかる。
    • good
    • 0

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

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

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

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

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

Q大量のCSVファイルをExcel形式に変換する

お世話になります。
大量のCSV(.csvファイルをExcel(.xls)ファイルに変換したい
と考えております。
リネームソフトを使って、(.csv)⇒(.xls)の一括変換を
したところ、拡張子は確かに.xlsに変換されたのですが、
中身はCSVのままとなっておりました。
(↑ファイル名とシート名が同期を取っているので)

このCSVを確実にエクセル形式へと変換したいのですが、
どなた様かいいお考えをお持ちでしたら教えてください。
ググってみたところ、そういったアドインがあるのですが、
できれば費用をかけずに行いたいです…。

Aベストアンサー

こんにちは。

すでに、マクロが1つ出ているようですが、私も作ってみました。

これは、ファイルをマルチセレクトして、そのファイル群を、Excelのマクロにより、一気に、CSV から XLS(Excel標準フォーマット)変換するマクロです。出来上がったら、Explorer 等で、確認してみてください。

>アドインがあるのですが、
私の個人的な意見ですが、この程度のものは、アドイン化すべきものではありませんから、よほど付加価値をつけないと公開用のアドインにはなりませんが、一般的にみて、アマチュアの作ったアドインは、押しなべて、あまり出来の良いものが少ないように思います。ですから、なるべく、一般のマクロで解決するように望みます。


'---------------------------------------------------

'<標準モジュール>
Sub CSV2XLS()
  'CSV を XLS に変換するマクロ
  Dim myArray() As String
  Dim FileName As Variant
  Dim fn As Variant
  Dim xlFileName As String
  Dim xlFileBaseName As String
  Dim TextLine As String
  Dim FileNo As Integer
  Dim i As Long
  Dim k As Long
  '基本となるフォルダ
  'BASE_DIR=""なら、マクロのあるブックと同じ場所のフォルダ
  Const BASE_DIR As String = ""
  If BASE_DIR <> "" Then
   ChDir BASE_DIR
   Else
   ChDir ThisWorkbook.Path
  End If
  FileName = Application.GetOpenFilename("CSV ファイル(*.csv),*.csv", MultiSelect:=True)
  If VarType(FileName) = vbBoolean Then
   Exit Sub
  End If
  Application.ScreenUpdating = False
  For Each fn In FileName
   On Error GoTo NextStatus
   With Workbooks.Open(fn)
     xlFileName = Mid$(fn, 1, InStrRev(fn, ".") - 1) & ".xls"
     Do
      k = k + 1 '同名の時枝番をつける
      If k > 3 Then Exit Do
      If Dir(xlFileName) = "" Then
        .SaveAs xlFileName
        xlFileBaseName = Mid$(xlFileName, InStrRev(xlFileName, "\") + 1)
        Workbooks(xlFileBaseName).Close False
        k = 0
        Exit Do
        Else
        xlFileName = Mid$(fn, 1, InStrRev(fn, ".") - 1) & "_" & CStr(k) & ".xls"
      End If
     Loop
   End With
NextStatus:
  Next fn
  Application.ScreenUpdating = True
  MsgBox "終了しました。",64
End Sub

'---------------------------------------------------

こんにちは。

すでに、マクロが1つ出ているようですが、私も作ってみました。

これは、ファイルをマルチセレクトして、そのファイル群を、Excelのマクロにより、一気に、CSV から XLS(Excel標準フォーマット)変換するマクロです。出来上がったら、Explorer 等で、確認してみてください。

>アドインがあるのですが、
私の個人的な意見ですが、この程度のものは、アドイン化すべきものではありませんから、よほど付加価値をつけないと公開用のアドインにはなりませんが、一般的にみて、アマチュアの...続きを読む

Qカンマ区切りcsvファイル上の'000'データの表示(エクセル)

Win95+エクセル2000です。

DBからカンマ区切りになるようにデータを抽出後、
一旦メモ帳に貼り付けてから名前をつけて保存でcsvファイルにし、
それをエクセルで開いて見ているのですが、
000で持っているデータが0になってしまいます。

ユーザー定義で見れなくはないですが、
一回目に開いた時から000で表示させることは可能でしょうか?

上記手順も含めてなにかご意見お持ちの方よろしくお願いします。

Aベストアンサー

データ抽出後拡張子をtxtにしテキストファイルにし、エクセルを開き
ファイル→開く→txtにしたファイルを指定してくだし。
テキストファイルウィザードが開きます。
カンマやタブなどのを選択→カンマを選択→3つめのデータ形式の選択で
おかしくなった列のデータ形式を文字列にして下さい。
これで開いた時には0ではなく000で表示されると思います。

QエクセルデータからCSVファイルへの変換について

現在エクセルファイルにあるデータをCSVファイルへ変換する作業(エクセルでデータを作成して、保存時にCSVファイルを選択)をしているのですが、以下の例の場合うまく変換ができません・・・。
基本的な質問かもしれませんがどなたかご存知でしたら教えていただけると助かります。
よろしくお願いします。

【例】
        (エクセル) ⇒  (CSV)

うまくいく   12345     12345

うまくいかない 01234     1234


上記のようにエクセル上は文字列で管理されている
ケースだとCSVファイルに変換した時数列に変換
され、上記例のうまくいかないケースのように
頭に0がある場合CSVだと0が消えてしまいます。

よろしくお願いします。

Aベストアンサー

> CSVファイルに変換した時数列に変換

ちがいます。
いったんCSVで保存したものをエクセルで開いたときにそうなるのです。
CSVをエクセルでそのまま開かず、メニューの「データ」、「外部データの取り込み」、「すべてのファイル」、で取り込み、書式で文字列を選べばOKです。
あるいはCSVを拡張子を.TXTにしてテキストで取り込んでもOK

Qexcel2003 選択セル内データ→1個のセルにカンマ区切りデータ

excel2003で、複数の選択セル内データを1個のセルにカンマ区切りデータに変換する操作をご教示願います。
具体的には、
「データ」メニューの「区切り位置」で、1つのセル内にカンマ区切りされた複数データを、データ数分のセルに変換可能ですが、これと逆の変換方法を知りたいのです。
可能であれば、VBA以外の方法が良いのですが・・・
ご教示よろしくお願い致します。

Aベストアンサー

Wordを使ってもいいのなら、
データを選択して、Wordに貼り付けます。
貼り付けた表を選択して、
罫線-変換-表の解除-文字列の区切りでカンマを選択してください。

その後、
編集-置換
検索する文字列に「^13」を入力
置換後文字列に「,」を入力
オプションであいまい検索のチェックを外すと、
改行が削除されて、カンマ区切りだけのデータになります。
これをコピーしてExcelのセルに貼り付ければできます。

参考URL:http://blog.goo.ne.jp/ek5555ek/e/49f1c184ef4be2c368e17abcab4e7e6d

QCSVファイルをEXCELに変換の自動化作業

CSVファイルをEXCELに変換の自動化作業
{CSVファイルをEXCELに変換するため、
excel  ツールバーよりデータ(D)→外部データの取り込み(D)→テキストファイルのインポート→ファイルの種類変更→全てのファイル→○○.csvのファイル指定→“,”の区切り選択、、ウィザードに従って変更し次へで進む→A1が指定されるのでそのまま完了→CSVがEXCELファイルに変換された。
参照したabc1.csvの名前に対して新しいabc1.xlsとなずけて登録する。これらの作業をMYドキュメントのhenkan ホルダーに入っているCSVファイルに同様に作業して同じくhenkan ホルダーに入れる。}
上記の{ }内の作業を何か,excelのVBAのマクロのようなもので実行することはできませんか。
やり方を教えてください。

Aベストアンサー

もともと、CSVとはカンマ区切りのはずですから、そうではないということなら、このコードは、違っています。こういう質問系掲示板は、質問者が分らない部分をお助けするような形で出来上がるものだと思いますので、回答者の回答を最初から否定するような発言は控えていだきたいと思いました。なお、フォルダーの中を一気に変換してしまうようなコードは、必ず変換後の様子を確認してからでなくてはなりませんので、それを確認していただくつもりでした。

私自身は、ここのカテゴリで、私は、一ゲンではありませんので、後々のためにコードを掲示しておきます。以下は、私が考えていたコードであって、その処理後の状態を保証するものではありません。

'<標準モジュール推奨>
Sub DirectryCSV2XLS()
  Dim myCSVFnames() As String
  Dim myCSVFname As String
  Dim xlFileName As String
  Dim i As Long
  Dim j As Long
  Dim n As Variant
  Dim msg As String
'=====================================
  '以下 フォルダー要設定
  Const MY_FOLDER As String = ""C:\Documents and Settings\<User>\My Documents\"
'=====================================
  If Left$(MY_FOLDER, 1) <> "\" Then MsgBox "フォルダーの設定の最後は、「\」が必要です。": Exit Sub
  If Dir(MY_FOLDER, vbDirectory) = "" Then _
   MsgBox "そのフォルダーは存在しません。", vbCritical: Exit Sub
 
  myCSVFname = Dir(MY_FOLDER & "*.csv")
  Do While myCSVFname <> ""
   ReDim Preserve myCSVFnames(i)
   myCSVFnames(i) = myCSVFname
   i = i + 1
   myCSVFname = Dir()
  Loop
  If i = 0 Then MsgBox MY_FOLDER & " には、CSVファイルが存在しません。", vbCritical: Exit Sub
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  For Each n In myCSVFnames
   xlFileName = Mid$(n, 1, InStrRev(n, ".csv")) & ".xls"
   If Dir(MY_FOLDER & "\" & xlFileName) = "" Then
     With Workbooks.Open(MY_FOLDER & "\" & n, Format:=2)
      .SaveAs MY_FOLDER & xlFileName
      Workbooks(xlFileName).Close False
      j = j + 1
     End With
   End If
  Next n
  Application.DisplayAlerts = True
  Application.ScreenUpdating = True
  If i <> j Then msg = "既に" & CStr(i - j) & "個のCSV ファイルは、XLSに変換されています。"
  MsgBox i & "個のCSVの内、" & j & "個のファイルをXLSに変換しました。" & vbCrLf & msg
End Sub

もともと、CSVとはカンマ区切りのはずですから、そうではないということなら、このコードは、違っています。こういう質問系掲示板は、質問者が分らない部分をお助けするような形で出来上がるものだと思いますので、回答者の回答を最初から否定するような発言は控えていだきたいと思いました。なお、フォルダーの中を一気に変換してしまうようなコードは、必ず変換後の様子を確認してからでなくてはなりませんので、それを確認していただくつもりでした。

私自身は、ここのカテゴリで、私は、一ゲンではありませ...続きを読む

Qカンマ区切りの数字をCSVファイルにインポートする時どうすれば?

カンマ区切りで区切られた金額を
CSVファイルにエクスポートなどする時は、
どうやって、カンマの区切りを判別するのですか?

Aベストアンサー

(1)アプリがかいてないのですが、エクセルとすると、エクセルの桁どりのカンマは書式設定の働きでもって、見た目にカンマが入っているが、数式バーではカンマがありませんので判るとおり、データにはカンマはありません。
ですからエクセルからエクスポートしても、数値項目にはCSVファイルには、桁取りカンマがありません。
(2)逆に
"1,001",023,34
'01,"122,234",34
1,234,"334,455"
をメモ帳で作って、エクセルに読み込ますと
"1,001",023,34
'01,"122,234",34
1,234,"334,455"
となるが、例えば334,455のセルには値はカンマが省かれています。
(3)だいたい、数値を表示するソフトは、値はカンマなしで保持し、画面や印刷するときに、カンマを入れるものです。
(4)(2)において3桁ごとのカンマを入れるだけにすると、項目区切りのカンマと区別がつかなくなりますが、
それでそのために前後をダブルクオーテーションでくくる
約束です。
(5)むしろCSVファイルの基本は、1項目の前後をダブルクオーテーションで括るのが原則なのですが、数値の場合省略できると言う約束になっている形式が多いです。しかし3桁ごとのカンマを入れるとすると、原則に戻らざるを得ません。

(1)アプリがかいてないのですが、エクセルとすると、エクセルの桁どりのカンマは書式設定の働きでもって、見た目にカンマが入っているが、数式バーではカンマがありませんので判るとおり、データにはカンマはありません。
ですからエクセルからエクスポートしても、数値項目にはCSVファイルには、桁取りカンマがありません。
(2)逆に
"1,001",023,34
'01,"122,234",34
1,234,"334,455"
をメモ帳で作って、エクセルに読み込ますと
"1,001",023,34
'01,"122,234",34
1,234,"334,455"
となるが、例え...続きを読む

QCSVをExcelに変換したい

お世話になります。

CSVファイルをExcelファイルに変換する場合、CSVファイルをExcelで開いて拡張子を「xls」もしくは「xlsx」を指定して保存すればよいかと思いますが、PCにExcelがインストールされてない環境の場合、Excelに変換することは不可能でしょうか。

今回、Accessにてツールを作成し、CSV(カンマ区切り)のデータを読み込もうとしておりますが、そのデータの中には単語の中にカンマが含まれているものがある為、普通にCSVをインポートしようとすると、ズレてしまいます。

なので、インポートする前準備としていったんExcelに変換したいと考えているのですが。。そのPCにExcelがインストールされてないと、やはり変換することは出来ないでしょうか。

もしくは、カンマ区切りのCSVファイルをタブ区切りに変換したりすることは出来ますでしょうか。

ご教授の程、宜しくお願い致します。

Aベストアンサー

>Accessにてツールを作成し、CSV(カンマ区切り)のデータを読み込もうとしておりますが、そのデータの中には単語の中にカンマが含まれているものがある為、普通にCSVをインポートしようとすると、ズレてしまいます。

毎回同じCSVのフォーマットだったら
(項目数やデータ型など)
一度インポートウィザードで進めて行って
設定ボタンから定義を保存し
次回からはその定義名を使用してインポートしては?
VBAならDocmd.transferText のヘルプにあるSpecificationNameに定義名を入れます。
・・・じゃダメかいな?

>インポートする前準備としていったんExcelに変換したい
CSVファイルを直接開くとExcelのお節介機能で
電話番号などの前ゼロがなくなったり、ハイフン付きのデータが日付と解釈されたり・・・
ということががあるので、拡張子CSVをTxtに変えてから
Excelで開こうとするとウィザードが立ち上がって・・・と出来ますが
結局のところ二度手間です。

ご参考まで。

QCSV出力して、MS/EXCELで開くとカンマ区切りがされてない

こんにちわ。

業務で、WEBレポーティングツールをいじっております。(特定のレポートを社内以外の人にブラウザで閲覧できるツール)

サーバーでDBよりデータ参照、レポート作成等の処理をしてクライアントにHTMLレポートを出力するという構造です。そのソフトにはサーバーでレポート閲覧やエラーなどの監査ログを残す機能があり、CSVファイルで出力されるのですが、ちょっと表示がおかしいのです。

そのCSVファイルをテキスト形式で開くと正しく表示されるのですが、MS/EXCEL2000で開くとカンマで区切られておらず、一行のデータが一つのセルにはいってしまいます。

具体的に言うと
A1セルに、「ABC,2000/01/08,あいうえお」
A2セルに、「DEF,2000/01/09,かきくけこ」
・・・・

なぜこういう現象が起きるのか検討しているのですが、文字コードが異なっているか、些細なゴミのようなものが混入されているか不明です。

ソフト会社に人に質問をしても、未だ回答がこないです。ただ、仕様によると吐き出すCSVファイルは、「unicodeでエンコーディングされている」ということはわかりました。

また、MS/ACCESS2000でそのCSVファイルをインポートすると、日付&数値の項目は、インポートエラーとなり読み込みできません。(文字は問題無し)

そのソフトは、米で販売されてた物を日本語仕様に直して販売しています。

上記の状況なのですが、どのように原因を推測されますでしょうか?
よろしくお願い致します。

こんにちわ。

業務で、WEBレポーティングツールをいじっております。(特定のレポートを社内以外の人にブラウザで閲覧できるツール)

サーバーでDBよりデータ参照、レポート作成等の処理をしてクライアントにHTMLレポートを出力するという構造です。そのソフトにはサーバーでレポート閲覧やエラーなどの監査ログを残す機能があり、CSVファイルで出力されるのですが、ちょっと表示がおかしいのです。

そのCSVファイルをテキスト形式で開くと正しく表示されるのですが、MS/EXCEL2000で開くとカンマで区切ら...続きを読む

Aベストアンサー

基本的なことですが、拡張子は.csvに成ってるのでしょうか?

それから、「MS/EXCEL2000で開く」とは、どのように開いているのでしょうか?
・Excelのメニューから開く
・エクスプローラーからDrug&Drop
・ファイルをダブルクリック
・エクスプローラーから「アプリケーションから開く」
等など
これに、よっても多少動きが違うような気もします。

QCSV形式に変換

プログラミング(C言語)で、ファイルの内容をCSV形式に変換し、指定した出力ファイルに出力するプログラムを作成せよ。という課題がありましたが、
ファイルの内容をCSV形式に変換
がわかりません。どのようなプログラムをかいたらよいのでしょうか?

Aベストアンサー

#5です。
よく見たらフィールド内での入れ替えが居るようなので、
#5で書いたやり方ではできませんね。。。
#参考だしいいのかな。。。

読み込みを一行ずつにして、
中を入れ替えて・・・
という作業が必要になります。

Qエクセルデータをカンマ区切り、ダブルコーテーションで囲んだデータにする方法を教えてください

はじめまして。
仕事でエクセルデータをカンマ区切り、ダブルコーテーション囲みのテキストデータにする必要があります。

例)
”111”,"222","","","","666""

このように空白のセルもあり、そのセルもダブルコーテーションで囲みたいです。
VBAで変更する方法をどこかで見かけましたが、張り付けてみましたが、上手く動きませんでした。
超初心者ですので、わかりやすく教えていただけると有り難いです。

お手数をおかけしますが、宜しくお願い致します。

Aベストアンサー

Unicode 出力の件ですが、せっかく、個人用マクロブックに納められる(つもり)ので、それを、書き換えるよりも、後づけマクロのほうがよいかもしれません。一緒にしてしまうと、Unicodeのみになってしまいますから、それも望まないし……
とあれこれ考えて、単独マクロで、Unicodeファイル判別するプログラムもつけました。BigEndien も LittleEndienも別けますが、出力は、BigEndienだけです。
こういうのは、余計なものかもしれません。

'//
Public Sub Convert2UNICODE()
'シフトJISをUnicodeに替えるマクロ
Dim stream As Object
Dim stream2 As Object
Dim fname As Variant
Dim buf As Variant
Dim b() As Byte
Dim i As Long
fname = Application.GetOpenFilename _
 ("File (*.*), *.*", 1, "ファイルオープン")
 If VarType(fname) = vbBoolean Then Exit Sub
 Open fname For Binary As #1
   ReDim b(1 To 6)
    Get #1, , b
  Close #1
 For i = 1 To 6
 buf = buf & Hex(b(i))
 Next
 If buf Like "FFFE*" Or buf Like "FEFF*" Then
  MsgBox "ファイルはすでにUnicodeです。", vbExclamation
  Exit Sub
 End If
 '-------変換プログラム-----------
On Error GoTo ErrHandler
Set stream = CreateObject("ADODB.Stream")
  stream.Open
  stream.Type = 2
  stream.Charset = "shift_jis"
  stream.LoadFromFile fname

Set stream2 = CreateObject("ADODB.Stream")
  stream2.Open
  stream2.Charset = "unicode"
  stream.CopyTo stream2
  stream2.SaveToFile (fname), 2
  stream2.Close
  stream.Close

Set stream2 = Nothing
Set stream = Nothing
Exit Sub
ErrHandler:
 If Err.Number <> 0 Then 
  Msgbox Err.Number & " :" & Err.Description
End If
End Sub

Unicode 出力の件ですが、せっかく、個人用マクロブックに納められる(つもり)ので、それを、書き換えるよりも、後づけマクロのほうがよいかもしれません。一緒にしてしまうと、Unicodeのみになってしまいますから、それも望まないし……
とあれこれ考えて、単独マクロで、Unicodeファイル判別するプログラムもつけました。BigEndien も LittleEndienも別けますが、出力は、BigEndienだけです。
こういうのは、余計なものかもしれません。

'//
Public Sub Convert2UNICODE()
'シフトJISをUnicodeに替えるマクロ
Di...続きを読む


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

人気Q&Aランキング

おすすめ情報