• ベストアンサー

エクセル マクロ セルからファイルを読み込む?

いつもお世話になっています 早速ですが、フォルダー内のCSVファイルをシート2に書き出しているのですが その後、その部分(sheets2のa1から順に)を参照してファイルを開こうとするために Workbooks.Open(Filename:=myFile)を使用した場合カンマ区切りでは開かず羅列となるためWorkbooks.OpenTextをつかおうとしたのですが怒られてしまいます。 順次ファイルを読み込んで処理を自動で行い保存をして次のファイルと自動でフォルダー内を処理したいのですが その部分でつまってしまっています どうかよろしくお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 分かりにくい部分があるのは、 Sheets(2) に、set という拡張子のついたファイルリストを出します。 その後で、2行目に上書きしていくということでしょうか。 >For R = 2 To ThisWorkbook.Sheets(2).Range("A65536").End(xlUp).Row そこに、データ内容を出そうとしていますね。 ファイルリストは、Sheets(1)とかではありませんか?それとも、ひとつなのですか? それと、OpenText を使わなくても、ここの掲示板でも、 Open ファイル名(.set) For Input As #1 テキストインポートの技法が出ていますから、それを使ってもよいと思います。 set ファイルは、TextOpen の Query をつけなくてはならないほどの複雑な内容でしたでしょうか。単に、拡張子を.csv に直す程度でインポートできる単純なものでしょうか。 --------------------- まとめますと、 set ファイルリストを出す。(リストは残さなくてよい?) それを使って、テキストファイルインポートしていく。 複数ファイルがある場合は、その下につなげていく。 ---------------------- ということではありませんか? もしそうだとして、確認できればコードは書きますが、 今回、#1のお礼の中で、自力のコードのようですから、もしご自分で作る場合に、アドバイスとして、典型的な「マクロのサンプルコード」を二つ手に入れれば、そのまま作れてしまう内容のようです。KeyWord が思いつけば検索してできます。(そういう私も、他の回答者もそういう点では、同じようなことをして回答しているだけなのですね。本当はサンプルをみて書いています。プロでも、VB系は同じようです。)

hou66
質問者

お礼

ありがとうございます。 動作をさせますと (1)Sheets(2)にフォルダー内にあるsetファイルを書き出します (2)次に書き出されたリストを上から順に開いて処理を行いたいのです 処理の内容は http://oshiete1.goo.ne.jp/qa4700217.html の回答3補足部分に記述した内容です その後 教えていただいたCsvFileOut()を行いクローズし Sheets(2)に記述された次のファイルに同じ作業を実施する という事を考えています。別にSheets1でも問題ないのですが 説明などをsheets1に記入している関係でシート2にしています。 setファイルの中身は %HEADER CREATE=2008/12/19 PCBNAME=03AR-SRF CAMNAME=03AR@F CADNAME=03AR-SRF MODULE=001 COUNT=00443 LINENAME=CELL SIDE=T NAME= ;BM12-1 ;C1137 NAME= ;BM12-2 ;R1165 NAME= ;BM12-3 ;R1026 NAME= ;BM22-1 ;C211 NAME= ;BM22-2 ;IC900 %DATA BM12-1,ERJ3RED680V,,R1608H04D,,1,,9,,,,,P0804; BM12-1,ERJ2GEJ101X,,R1005H03D,,4,,27,,,,デフォルト,P0802; BM12-1,ECJ1VB1C105K,,C1608H08D,,21,,29,,,,デフォルト,P0804; この様な物なのです まとめてみますと 指定フォルダー内(現在はThisbookと同じ場所になっていますが)に含まれるSETファイルをリストに書き出し それを使ってファイルをインポート?開く?を行い 処理を加え 元と同じ様式で保存する(1ファイルづつ) その作業をリストに書かれてあるリストの最終まで行い終了する という事なのですが。 わかっていただけたでしょうか? 相変わらずの説明下手で申し訳ありませんが ご指導よろしくお願いします

hou66
質問者

補足

いつもありがとうございます  自己解決することが出来ました >Set myBook = Workbooks.Open(Filename:=myFile) をopentxtにしたときに 先頭のSET Mybook=をなくすのと ()くくりをはずすことで、無事動作完了することができました。 またよろいしくお願いします。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 行きがかり上、レスを付けさせていただきます。 どうやら、質問のコツが必要な気がしますね。このままですと、目的にまで至りません。 >「Workbooks.OpenTextをつかおうとしたのですが怒られてしまいます。」 このような表現は、VBAの質問には相応しくありません。エラーならエラーメッセージを書き取って、出してください。 拡張子は、CSVなのですか? http://oshiete1.goo.ne.jp/qa4697449.html >csv形式になっているテキストファイル(拡張が異なりますset) (なお、「シート名の変更はどうすればよいのでしょうか」に対しては、テキスト系のファイルでは不可能です。ファイル構造が違います。) CSV だったら、そのまま、Open で開くはずです。羅列とは、A列に入るという意味なのか分かりませんが、カンマ切りファイルではないとかいうのではありませんか。 >次のファイルと自動でフォルダー内を処理したいのですが その部分でつまってしまっています つまってしまうとは、どういうことなのですか? Dir 関数で読み込むコードが分からないということでしょうか。 細かい状況を書き出して、こうしたいと書いたほうが早道ですね。失礼ですが、もしかしたら、どういうメソッド、どういう関数を必要かというパターンがわからないレベルではありませんか? もう少し、具体的に質問をまとめてください。

hou66
質問者

お礼

いつもありがとうございます。また申し訳ありません。 現状過去に教えていただいたマクロを用いシートにファイル名を書き出しています。 Sub List() Dim myPath As String Dim myBook As Workbook Dim myFile Dim BookCnt As Integer myPath = ThisWorkbook.Path & "\" myFile = Dir(myPath & "*.set", vbNormal) If myFile = "" Then MsgBox "setファイルはありません" Exit Sub End If Sheets(2).Activate Cells.Clear Range("A1").Value = "ファイル名" Range("B1").Value = "更新日" Do Until myFile = "" BookCnt = BookCnt + 1 Range("A1").Offset(BookCnt).Value = myFile Range("A1").Offset(BookCnt, 1).Value = FileDateTime(myPath & myFile) myFile = Dir Loop End Sub その後 Sub FileRead() Dim myPath As String Dim myBook As Workbook Dim myFile As String Dim Clm As Integer Dim R As Long Application.ScreenUpdating = False myPath = ThisWorkbook.Path & "\" For R = 2 To ThisWorkbook.Sheets(2).Range("A65536").End(xlUp).Row myFile = myPath & ThisWorkbook.Sheets(2).Range("A" & R).Value Set myBook = Workbooks.Open(Filename:=myFile) でファイルを読み込んでいく途中なのですが、SETファイルはカンマ区切りになっておりまして それが、ご指摘のとおりA列に入ってしまいます それをカンマ区切りで読み込みたくopentextにすると「コンパイルエラー」funcyionまたは変数が必要ですとエラー表示されます。 読み込みを順次行い処理を加え前回教えていただいた方法で保存を行い http://oshiete1.goo.ne.jp/qa4700217.html 次のファイルを処理していきたいのです。 シート名の変更は一部変更だったために以下で対応できました。 'シート名変更 ActiveSheet.Name = Left(shName, 26) & "R" shnamenew = ActiveSheet.Name いつも申し訳ありませんがよろしくお願いします。

関連するQ&A