- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:複数のtxtの特定部分を抽出し、一つのxlsファイルにまとめたいです。)
複数のtxtから特定部分を抽出し、一つのxlsファイルにまとめたい
このQ&Aのポイント
- 複数のtxtファイルから特定の情報を抽出し、一つのxlsファイルにまとめる方法を教えてください。
- 現在、複数の同じ体裁のtxtファイルを持っています。これらのファイルにはタブで区切られたデータが含まれており、CSVファイルに変換しました。
- エクセルで開いたCSVファイルには、必要な情報がB601からB802に入っています。これらの情報をまとめたxlsファイルを作成したいです。VBAマクロで解決できる方法を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
処理する順番が決っていないのでしたら DIR関数とループを上手く使えば良いかもです。 (手抜きなサンプルですが) strFileName = Dir("C:\TEMP\*.CSV", vbNormal) i = 0 Do While strFileName <> "" 'ファイル開く(省略 ※エラーなら抜けないとですが) 'コピー(省略) 'ペースト Sheets("コピー先").range("A2").offset(0,i).pastespecial i = i + 1 '次のファイル名 strFileName = Dir() Loop 決っていないなら iColumn = .Cells(iRows, .Columns.Count).End(xlToLeft).Column if .Cells(1,iColumn) = "" then iColumn = iColumn + 1 end if とかでカラム位置を求めるしかないかもです。
お礼
さらにmo2yakkoさんのアドバイスを取り入れた結果、 なんとか狙い通りのマクロを組むことが出来ました! 本当にありがとうございます!
補足
ありがとうございます! 実は質問の後、http://www.moug.net/tech/exvba/0060001.htmを参照して 自分なりに作ってみましたが、動きません。 (エラーもはき出さず、白紙のエクセルのまま。) 正直どこがダメなのか、皆目検討がつきません。 mo2yakkoさんのアドバイスをどのように生かせばよいのかもわかりません。 どなたかご教授願えませんでしょうか? Sub sample() Dim myPath As String Dim myFName As String Dim FCnt As Integer ThisWorkbook.Activate '使うブックをアクティブに myPath = ActiveWorkbook.Path 'そのパスを定義 ChDir myPath 'そのパスのフォルダに移動 FCnt = 0 '取得ブック数をカウントするための変数を初期化 myFName = Dir("*.csv") 'Dir関数で最初のファイルを選択 If myFName <> "" Then 'ブックが取得できた場合 FCnt = FCnt + 1 'カウントをプラス Workbooks.Open Filename:=myFName 'ファイルオープン Range("B601:B802").Copy '必要部分のコピー ActiveWorkbook.Close 'データファイルを閉じる ThisWorkbook.Activate 'まとめブックをアクティブに Cells(1, FCnt).Value = myFName 'まとめ一行目にファイル名を挿入 Range(Cells(2, FCnt), Cells(6002, FCnt)).PasteSpecial Paste:=xlPasteValues '二行目から値のみ貼り付け(一つのデータ終了) Do myFName = Dir("*.xls") 'Dir関数で次のファイルを選択 If myFName <> "" Then 'ブックが取得できた場合 FCnt = FCnt + 1 'カウントをプラス Workbooks.Open Filename:=myFName 'ファイルオープン Range("B601:B802").Copy '必要部分のコピー ActiveWorkbook.Close 'データファイルを閉じる ThisWorkbook.Activate 'まとめブックをアクティブに Cells(1, FCnt).Value = myFName 'まとめ一行目にファイル名を挿入 Range(Cells(2, FCnt), Cells(6002, FCnt)).PasteSpecial Paste:=xlPasteValues '二行目から値のみ貼り付け(一つのデータ終了) Else Exit Do End If Loop End If End Sub