• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CSVを特定の列だけ抽出してエクセルへ変換したい)

CSVを特定の列だけ抽出してエクセルへ変換したい

このQ&Aのポイント
  • VBA初心者がCSVの特定の列を抽出してエクセルに変換する方法を教えてください。
  • エクセル2013を使用して、長さ200行程度のCSVファイルから特定の5列のデータを抜き出し、同じフォルダにエクセルファイルとして保存する方法を教えてください。
  • CSVファイルから特定の列のデータを抜き出すVBAコードを教えてください。エクセル2013を使用して、200行程度のデータを抽出し、エクセルファイルとして保存する方法を知りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • SI299792
  • ベストアンサー率47% (772/1616)
回答No.4

情報不足! CSV は,区切りでいいですか? 特定の5列程とはどこですか? 書いてないので、B~Fとしました。 読み込んだ後、それ以外を消して保存しています。違っている場合、[A:A,G:Z] を直して下さい。 複数のフォルダということは、1つのフォルダのサブフォルダということでしょうか。 このマクロを入れたワークブックを作り、処理したい1番上のフォルダに保存してから実行してください。このワークブックのフォルダと、サブフォルダが対象になります。 csv と同じ名前のxlsxファイルがあれば、消去してから実行します。 ' Sub Macro1() '   Dim OldLen As Long   Dim NewLen As Long   Dim FileName As String '  サブフォルダを含むファイル一覧取得   ChDrive ThisWorkbook.Path   ChDir ThisWorkbook.Path   Shell ("Cmd /C Dir *.csv /B /S > Dir.Txt") '  Dir が終わるまで止める   On Error Resume Next   Do While OldLen <> NewLen Or NewLen = 0     OldLen = NewLen     NewLen = FileLen("Dir.Txt")     DoEvents   Loop   On Error GoTo 0 '  本処理   Open "Dir.Txt" For Input As #1   Do Until EOF(1)     Line Input #1, FileName     Workbooks.Open FileName     OldLen = Len(FileName) - 4     FileName = Left(FileName, OldLen) & ".xlsx"     On Error Resume Next     Kill FileName     On Error GoTo 0     [A:A,G:Z].ClearContents '消す場所を指定     ActiveWorkbook.SaveAs FileName, FileFormat:=xlOpenXMLWorkbook     ActiveWindow.Close     DoEvents   Loop   Close End Sub

tikuwasan
質問者

お礼

ご丁寧にありがとうございます。

tikuwasan
質問者

補足

ありがとうございました!! 情報不足ですみません・・・! 約100程のフォルダの中にそれぞれ5つ前後のCSVが格納されており、その中から特定の列のデータだけを管理用エクセルへ書き出す作業を します。CSVデータの形式は全て共通、20列(固定)100~200行(これは各々まちまち)程で、抜き出したい列は2・7・13・17・18列の5つです。(今後増えるかもしれません)管理票エクセルシートに転記する際、データを昇順したり、特定のものだけを抜き出し、チェックしながら管理票エクセルに貼り付けて行くといった作業が必要になる為、CSVファイルのままではなく、エクセルに変換したいのです。したい作業をまとめると、 (1)任意のCSVファイルを選択する(実行ボタンを押したらファイルパスを入力する画面が出て、入力をしてエンターを押したら以下(2)~(4)のアクションが起こるようにしたい) (2)そのCSVファイルから特定の列だけ抜き出す(3・5・9・11・17)など (3)特定の列のみなったCSVファイルをエクセルに変換し、元となったCSVファイルと同じフォルダに格納する(元となったCSVファイルは何のう変更もせずそのまま閉じる) (4)出来れば元となったCSVファイルを閉じたあと、特定列だけ抜き出しエクセルに変換されたファイルが自動で開くようにしたい 以上の質問でした。 先程教えていただいたコードを貼り付けてみましたが、上手くいきませんでした。本当に図々しいお願いで心苦しいのですが、上記内容が上手くいくようなコードをお教えいただくことは出来ますでしょうか・・・。 情報不足なのに、親切にご回答を下さったSI299792様にこれ以上のお手数をお掛けするのは本当に申し訳ないのですが、何卒よろしくお願いいたします。不躾なのですが、ビットコインのお礼もさせていただきたいです。どうぞよろしくお願いいたします。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

csvファイルは、今どきのエクセルなら、エクセルでそのまま読み込めるはず。 読み込んで、例えばC列だけを範囲指定してコピーして、他シートや、他ブックのシートの列に張り付けたらしまいではないか。 それでVBA、VBSは必要ないのだが、VBAコード作成の経験はあるの。 >どのようなコードを書けばよいのか 今更なのだが、ついでなので、初心者向けの解説を上げておく。 本番の前に、下記簡単な例をやってみて、理解・類推して。 ーー 例データを作る。 メモ帳で、下記の例の通りデータ打ち込み a1,a2.a3,a4,a5 <--ここで改行。以下行同じ b1,b2,b3,b4,b5 c1,c2,c3,c4,c5 ファイルの名前をテスト1.csvで保存。 ーー エクセルの白紙のシートを開いて ALTキーとF11キーを同時押し。 VBEの画面で 挿入ー標準モジュール 下記コードをコピペ。 Sub test01() Open "テスト1.csv" For Input As #1 i = 0 Do Until EOF(1) Line Input #1, x MsgBox x y = Split(x, ",") 'カンマで分割 MsgBox y(2) '第3番目だけ取り上げ=第3列に相当 i = i + 1 Cells(i, "A") = y(2) 'A列i行目にデータをセット Loop Close #1 End Sub これでアクチーブシートのA列に 第1行目(上記i=0の部分で何合目からを指定できる)からで a3 b3 c3 Msgboxは本番では削除して実行。指定する列は変更のこと。

tikuwasan
質問者

お礼

詳しいご回答をありがとうございました。 勉強してみます。

  • msMike
  • ベストアンサー率20% (364/1804)
回答No.2

≫ あまりにも数が多すぎるので、… 何の数ですか、余りにも多過ぎるってのは?

tikuwasan
質問者

お礼

コメントを下さってありがとうございます。 数が多いのは、CSVファイルのことです。 複数のフォルダ(全100程)にそれぞれ多くて20程のCSVファイルがあります。CSVファイルは全て同じ構成になっており、中身のデータが違います。 (例:郵便番号、住所、電話番号・・・の列にそれぞれのデータが行として格納されてるようなイメージです) 複数のフォルダの中の複数のCSVの特定の列だけのデータを1つの管理表としているエクセルブックに書き出していく作業が必要なのですが、全て自動化はせず、必要な列のデータだけをCSVから取り出し、エクセルに変換し、確認作業をしながら管理票エクセルブックに貼り付けていこうと思っていました。 図々しい上に分かりにくい質問で申し訳ありませんでした。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

不要な行を削除して、名前を付けて保存でExcelブックを選んでみてください。

tikuwasan
質問者

お礼

ありがとうございます。 その作業をするには、あまりにも数が多すぎるので、マクロで自動化したいと思い質問したのですが・・・。 図々しい質問ですみませんでした・・・。