CSVファイルが4000個ほどあり、VBAを用い、そのファイルの行列変換をして、1つのエクセルファイルにまとめたいのですが、うまくいきません。どなたか教えていただけないでしょうか?
CSVファイルは、以下の様な2列200行位あるものを、2列目のみ取り出し、エクセルファイルには1行(列ではなく)にして取り出したいのです。
変換前データー
A列 B列
B013 毛
B014 54
B015 ポリエステル
B016 36
B017 絹
B018 10
B020 0
B022 0
B023 ポリエステル
B024 0
B025 キュプラ
B026 0
B028 0
B030 0
B032 0
・ ・
・ ・
・ ・
取り込み変換後データ
1行: 毛 54 ポリエステル 36 絹 10 0 0 ポリエステル 0 キュプラ 0 0 0 0
のようにしたいのです。
どなたかお教えいただけないでしょうか?
よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
4000個もあるんじゃマクロじゃなきゃできませんよね。
次の手順を試してみてください。
その4000個程度のCSVファイルが入っているフォルダーに、以下のマクロを書いたエクセルBOOKを保存してください。(パス取得のため必ず「保存」してください。)
そのフォルダー内の全てのCSVファイルから、B1:B256の範囲のデータを読み込み、エクセルの.Sheets("Sheet1")の1行目から順に転記していきます。
読み込むのをB1:B256としたのは、わたしのエクセルが2007ではないので、行列を入れ替えたとき列が256列までしかないからです。でも200件程度のデータなら大丈夫ですね?
Sub test01()
Dim myFile As String, MyPath As String '変数宣言
Dim i As Long
Dim wb As Workbook
MyPath = ThisWorkbook.Path & "\" '自分のパスを取得
myFile = Dir(MyPath & "*.csv", vbNormal) 'パス内のcsvファイル
Application.ScreenUpdating = False '画面更新停止
Application.Calculation = xlCalculationManual '自動計算停止
Do Until myFile = "" '対象ファイルがなくなるまで
Set wb = Workbooks.Open(MyPath & "\" & myFile) '選択したファイルを開く
ThisWorkbook.Sheets("Sheet1").Range("A1:IV1").Offset(i).Value = _
Application.Transpose(wb.Sheets(1).Range("B1:B256").Value) '行列を入れ替えて転記
i = i + 1 'カウント
wb.Close (False) '開いたファイルを閉じる
myFile = Dir '次のファイルを検索
Loop '繰り返し
Application.Calculation = xlCalculationAutomatic '自動計算停止解除
Application.ScreenUpdating = True '画面更新停止解除
Set wb = Nothing
MsgBox i & "件のCSVファイルから転記しました。", vbInformation, " " & Environ("UserName") & "さん (o^-')v "
End Sub
No.4
- 回答日時:
A列に半角スペースで区切って連結した値を代入すると解釈しました。
CSVファイルはブックと同じフォルダにあるとします。
クリップボードを操作する(1)
http://www.officetanaka.net/excel/vba/tips/tips2 …
【ダイレクトに格納/取得する】
ツール>参照設定をお忘れなく。
Sub try()
Dim Clip_B As New DataObject
Dim wb As Workbook
Dim r As Range
Dim Fname As String, Fdir As String
Set r = ThisWorkbook.Worksheets("Sheet1").Range("A1")
Fdir = ThisWorkbook.Path & "\"
Fname = Dir(Fdir & "*.csv", vbNormal)
Application.ScreenUpdating = False
Do Until Fname = ""
Set wb = Workbooks.Open(Fdir & Fname)
wb.Worksheets(1).Range("B1:B200").Copy '200行固定
With Clip_B
.GetFromClipboard
r.Value = Replace(.GetText, vbCrLf, " ")
End With
Application.CutCopyMode = False
wb.Close False
Set r = r.Offset(1)
Fname = Dir()
Loop
Application.ScreenUpdating = True
Set wb = Nothing
Set r = Nothing
End Sub
勘違いでしたらスル~して下さい。
No.3
- 回答日時:
>CSVファイルが4000個ほどあり
とのことですので、[Open ステートメント] を使用して、[シーケンシャル入力モード] で開いた CSVファイル の「2列目のみ取り出し」て横方向に並べました。
1列目に CSVファイルのファイル名を配置しましたが、不要の場合は
Cells(i, 1) = Replace(MyName, ".CSV", "")
j = 1
の2行を
j = 0
の1行に差し替えてください。
また、
MyPath = "D:\hoge\hoge\hoge\"
の行は、CSVファイルの保存されたフォルダの「フルパス & "\"」を指定します。
merlionXX さんの [回答番号:No.2] のように、CSVファイルと同じフォルダに保存したブックで作業をされるときは、
MyPath = ThisWorkbook.Path & "\"
で結構です。
「On Error Resume Next」・「On Error GoTo 0」の2行は、「2列目」にデータがなかった場合に配列の2番目の要素「Split(InputData, ",")(1)」がなく、インデックス エラーになりますので、エラー処理を施しています。
なお、コーディングは、[Dir 関数]・[EOF 関数] の使用例を参考にして書きました。
同一フォルダに「250行×3列」の CSVファイル を256個作成して試行してみましたが、私の低スペックパソコンで作業時間は18秒(1列目の見出しを省くと17秒)でした。
Sub ReadCSV()
Dim MyPath As String
Dim MyName As String
Dim i As Integer, j As Integer
Dim InputData As String
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
MyPath = "D:\hoge\hoge\hoge\"
MyName = Dir(MyPath & "*.CSV", 3)
Do While MyName <> ""
i = i + 1
Cells(i, 1) = Replace(MyName, ".CSV", "")
j = 1
Open MyPath & MyName For Input As #1
Do While Not EOF(1)
j = j + 1
Line Input #1, InputData
On Error Resume Next
Cells(i, j) = Split(InputData, ",")(1)
On Error GoTo 0
Loop
Close #1
MyName = Dir
Loop
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
ご教授ありがとうございました。
あの後データが15000件に膨らみましたが、
スムーズに取り込むことができました。
本当に助かりました。
ありがとうございました。
No.1
- 回答日時:
VBAでなければならない理由が良くわかりませんが、
要は、B列を切り出して、改行をカンマに置換すれば済むのではないですか?
MS-Wordやテキストエディタで容易にできることですが
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
【お題】・忍者がやってるYouTubeが炎上してしまった理由
-
最強の防寒、あったか術を教えてください!
とっても寒がりなのですが、冬に皆さんがされている最強の防寒、あったか術が知りたいです!
-
【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
「出身中学と出身高校が混ざったような校舎にいる夢を見る」「まぶたがピクピクしてるので鏡で確認しようとしたらピクピクが止まってしまう」など、 これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
-
今から楽しみな予定はありますか?
いよいよ2025年が始まりました。皆さんには、今から楽しみにしている予定はありますか?
-
複数のCSVの指定行だけを残し、さらに行と列を入れ替えたい
Excel(エクセル)
-
EXCELで「行と列を入れ替える」操作を何回も繰り返して自動実行する方法はないでしょうか?
Excel(エクセル)
-
バッチで118項目のCSVを処理したいですが。。。
その他(開発・運用・管理)
-
-
4
複数のCSVファイルを横に並べてひとつのエクセルファイルへ結合する方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~1/20】 追い込まれた犯人が咄嗟に言った一言とは?
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定のエクセルファイルを起動...
-
【Excel】[Expression.Error] ...
-
vbsでゴミ箱への移動
-
共有フォルダに誰が何にアクセ...
-
batファイル、コマンドプロンプ...
-
メールで送られてきたワードの...
-
月が変わったら自動でシートが...
-
VBAでCSVファイルが使用中かど...
-
一時ファイルについて win32 Ge...
-
拡張子が「cda」のファイルを聞...
-
Dream weaverで、誤ってファイ...
-
(Excelマクロ)datファイルをエ...
-
phpで連番
-
XMLデータを変換し印刷する方法
-
tmpファイル なぜできる?削除...
-
テキストファイルからデータを...
-
amifldrv64.sysについて教えて...
-
社内Excel共有ブックでの保存ト...
-
accessのmdbが勝手にできている?
-
ACCESS で 項目名を出力せずに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【Excel】[Expression.Error] ...
-
特定のエクセルファイルを起動...
-
共有フォルダに誰が何にアクセ...
-
Batch: フォルダ内の特定のファ...
-
VBAでCSVファイルが使用中かど...
-
AccessVBAで作成したExcelファ...
-
(Excelマクロ)datファイルをエ...
-
excelを共有ファイルにすると行...
-
月が変わったら自動でシートが...
-
batファイル、コマンドプロンプ...
-
Excel VBA 処理後データが重た...
-
XMLデータを変換し印刷する方法
-
Access VBA を利用して、フォル...
-
【アクセス】「ほかのユーザー...
-
特定のフォルダに入れたファイ...
-
WEBクエリが使えない場合のHPデ...
-
ファイルの途中に文字列を挿入
-
tmpファイル なぜできる?削除...
-
大量のCSVデータを行列の変換を...
-
社内Excel共有ブックでの保存ト...
おすすめ情報