• 締切済み

エクセルVBAを利用したフォルダ内にあるファイルの指定エクセルシート貼り付け

フォルダ内にある任意のファイル(拡張子のないテキストデータ)を開き、指定されたエクセルのシートに貼り付けするといった方法がわかりません。 どなたか分かる人がいましたら教えていただきたいです。 現在openなどを使用していますがファイルを指定すれば実行できるのですが任意のファイルになるとエラーになってしまいます。

みんなの回答

回答No.4

「フォルダ内にある任意のファイル(拡張子のないテキストデータ)を開き」とありますが、 任意のファイルというものは存在しません。 存在しないものは開けません。 貴方がいいたいことを次のように理解して、回答します。 「特定のフォルダ内にある全てのファイルを開く」と理解し、「特定のフォルダ内にある全てのファイルのFullnameを取得する方法」を書きます。 Dim AAA,BBB,CCC,DDD Dim AA Dim A,B Dim XXX() AA="特定のフォルダ名" Set AAA = CreateObject("Scripting.FileSystemObject") Set BBB = AAA.GetFolder(AA) Set CCC=BBB.Files A=CCC.Count Redim XXX(A) B=0 For Each DDD In CCC B=B+1 XXX(B)=DDD.Fullname Next XXX(1)~XXX(A)を順次開けば、「特定のフォルダ内にある全てのファイルを開く」ことが出来ます。

noname#111860
noname#111860
回答No.3

フォルダの中に、ファイルがいくつかあるのはわかったけど 任意のデータは、どうやって選択しているの? ・テキストボックスで手で入力? ・リストボックスやコンボボックスを使って選択する? > 初めの部分が名前を指定して > 実行すればできたのですが任意のデータにすると実行できなくなります。 先の回答の中にも記載したけれども、  実行時エラーが発生しているのであれば、  その表示されたエラーメッセージをそのまま書いて欲しい。  アドバイスの方向や確認ポイントの検討も  こういったメッセージから何処でおかしいのか判断出来る場合も多いので

toppokun10
質問者

補足

少々わかりづらいですね。 Sub 上リンク() Dim myCell(1) As String Dim i As Integer, j As Integer Dim データ As Variant データ = Worksheets("入力").Range("H64") 'ワークシート[Sheet1]をアクティブにする Worksheets("上型NC").Activate '[C:\*****\***\***]フォルダの「データ」をシーケンシャ入力ルモードで開き、 'ファイル番号を「1」に指定する Open "C:\****\***\***\データ" For Input As #1 Do Until EOF(1) 'ファイルのデータを変数に格納する Input #1, myCell(1) i = i + 1 For j = 1 To 1 Cells(i, j).Value = myCell(j) Next j Loop 'ファイルを閉じる Close #1 Worksheets("入力").Activate End Sub になりまして”データ”の部分に任意の決まっていないデータがをいれたいのですがデータがないといわれてしまいます。ここではエクセルのシートにデータ名を入力して実行、上型NCシートに貼り付けといった手順をとりたかったのですが。 わかりづらいかもしれませんが宜しくお願いします。 ちなみにデータの部分を実際のファイル名にすれば貼り付けはできましたが任意のものにするとできなくなりました。 inputboxなども使用してみましたが同様におエラーになりました。 なにかいい方法がありましたら宜しくお願いします。

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

>常套句なれども、下記をやってどれぐらい有名な課題か調べてから言って。 調べて勉強すればもっと細かい点の質問になるはず。 Googledeなどで「フォルダ ファイル VBA」で照会して見ましたか。 プログラムを組むときの素人には数少ない情報入手元が、WEBです。たくさん出ます。 FSO Dir関数 の2方法が代表的。 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_080.html が照会結果の最初のもの。 >(拡張子のないテキストデータ って珍しいと思うが、ファイル名で「.」が無いをチェックするか。 >指定されたエクセルのシートに貼り付けするといった あいまいな表現。指定されたとは、テキストファイルごとに、貼り付けるシートが違うのか。 名前はバラバラか?そうするとデーターシートの対応関係のテーブル が必要で面倒で、質問実体と違う(筆が滑った)のでは。しかし大事な点。 ーー >openなどを使用していますがファイルを指定すれば実行できるのですが 変数名を使って、プログラムすれば解決する。 その変数名に、ファイルを見つけるループの処理の中でファイル名を次々セットしては、本体処理に入る。 この質問をしているところを見ると、プログラム経験が少ないのかな。コンピュター処理は、ほとんど全て処理を繰り返しに持ち込む。 そのとき必ずその回に内容を変えている変数が有るはず。なければ 同じ対象に同じパターンのことを繰り返すことにナリ、意味無いから。この処理パタンの認識(学習・実感)はプログラム学習で一番大切なこと。

toppokun10
質問者

お礼

ありがとうございます。 vbaをまじめにはじめてから1週間程度なのでまだまだ勉強不足なんですが。 できるシリーズのVBAは一通り読んだ程度です。 もう少し説明しますと、例でいうとフォルダ内にB0001A、B0003A、B0102A・・・といった複数の中身はテキスト系のファイルがはいっています。そこからデータを指定して実行してエクセルシートに貼り付けます。そのテキストから必要なコードのみ検出して別シートに貼り付けるというような内容になります(A??のすべて)。最後の部分はネットなどでさがして例文からなんとかできたのですが、初めの部分が名前を指定して実行すればできたのですが任意のデータにすると実行できなくなります。

noname#111860
noname#111860
回答No.1

テキストファイルの読み込みは ↓を参考に http://hanatyan.sakura.ne.jp/vbhlp/txt01.htm エクセルファイルの読み書きが ↓を参考に http://hanatyan.sakura.ne.jp/vbhlp/excelframe.htm また、上記のサイトを参考にしても 解決できない場合は、 エラーの内容・メッセージを、具体的に書いてください。

toppokun10
質問者

お礼

ありがとうございます。 お礼と補足の部分を間違えてしましました。 質問内容が少々曖昧でしたね。 ちなみにvbaをまじめにはじめてから1週間程度の素人です。 できるシリーズのVBAは一通り読んだ程度です。 例でいうとフォルダ内にB0001A、B0003A、B0102A・・・といった複数の中身はテキスト系のファイルがはいっています。そこからデータを指定して実行してエクセルシートに貼り付けます。そのテキストから必要なコードのみ検出して別シートに貼り付けるというような内容になります(A??のすべて)。最後の部分はネットなどでさがして例文からなんとかできたのですが、初めの部分が名前を指定して実行すればできたのですが任意のデータにすると実行できなくなります。 何分まだまだ素人ですのでお気に触るかもしれませんがよろしくお願いします

toppokun10
質問者

補足

質問内容が少々曖昧でしたね。 ちなみにvbaをまじめにはじめてから1週間程度の素人です。 できるシリーズのVBAは一通り読んだ程度です。 例でいうとフォルダ内にB0001A、B0003A、B0102A・・・といった複数の中身はテキスト系のファイルがはいっています。そこからデータを指定して実行してエクセルシートに貼り付けます。そのテキストから必要なコードのみ検出して別シートに貼り付けるというような内容になります(A??のすべて)。最後の部分はネットなどでさがして例文からなんとかできたのですが、初めの部分が名前を指定して実行すればできたのですが任意のデータにすると実行できなくなります。 何分まだまだ素人ですのでお気に触るかもしれませんがよろしくお願いします。

関連するQ&A

  • エクセルVBAによるファイル実行及び貼り付け

    フォルダ内にあるファイル(専用ソフトから出力されたファイル、中身はテキスト系、拡張子なしのファイル、エクセルでも読み込み可)を実行して指定したシートに貼り付けをしたいのですがファイルがないといわれてしまいます。 ちなみにまだまだプログラム初心者なものでおかしなことを聞いているかもしれませんが宜しくお願いします。 Sub 上リンク() Dim myCell(1) As String Dim i As Integer, j As Integer Dim データ As Variant データ = Worksheets("入力").Range("H64") 'ワークシート[上型NC]をアクティブにする Worksheets("上型NC").Activate '[C:\*****\***\***]フォルダの「データ」をシーケンシャ入力ルモードで開き、 'ファイル番号を「1」に指定する Open "C:\****\***\***\データ" For Input As #1 'ここでファイルがないというエラーが発生!データはフォルダ内にある任意データ Do Until EOF(1) 'ファイルのデータを変数に格納する Input #1, myCell(1) i = i + 1 For j = 1 To 1 Cells(i, j).Value = myCell(j) Next j Loop 'ファイルを閉じる Close #1 Worksheets("入力").Activate End Sub になりまして”データ”の部分に任意の決まっていないデータがをいれたいのですがデータがないといわれてしまいます。ここではエクセルのシートにデータ名を入力して実行、上型NCシートに貼り付けといった手順をとりたかったのですが。 わかりづらいかもしれませんが宜しくお願いします。 ちなみにデータの部分を実際のファイル名にすれば貼り付けはできますが、そこを任意にするとファイルがないといわれてしまいます。

  • (VBA)フォルダの中の複数のテキストファイルをエクセルに取り込みたい

    フォルダの中に複数のテキストファイルがあります。 それをVBAで1シートに1テキストファイルづつで取り込んで(区切り文字(#)、列のデータ形式(文字列)を指定して)作成済みのマクロを実行し、出力させたいのですが。。 データが大きいので5シートで1つのファイルにしたいです。フォルダの中にはテキストファイルが100ほどあるので、結果、エクセルファイルが20できればいいのですが。。 できればデスクトップに新しいフォルダが作成されてその中に出力されていくようにしたいです。 お力を貸してください。よろしくお願いします。

  • Excel VBA 違うxlsファイルの指定したシートを開く処理

    Excel VBAで違うExcelファイルの指定したシートを開きたいのですが、 うまくいきません。現在のコードは、 *フォーム* Private Sub CB1_Click() Dim A As Integer A = MsgBox("データ展開する?", 4, "データ展開?") If A = 6 Then INPORT.FILE_OPEN1 End If End Sub *INPORTモジュール* Sub FILE_OPEN1()  FILE_OPEN8 End Sub Sub FILE_OPEN8() Dim fnames As String fnames = fnames1 Workbooks.Open Filename:=fnames ***ここでしょうか?.Sheet("")と指定しても出来ません*** End Sub Function fnames1() As Variant fnames1 = Application.GetOpenFilename( _ Title:="ファイルを開く", _ FILEFILTER:="エクセルファイル (*.xls), *.xls") If fnames1 = False Then MsgBox ("ファイルを開けませんでした。" & Chr$(13) & _ "もう一度やり直して下さい。") End End If End Function また、指定する事が出来たら、選択したシートを現在のブックにコピーもしたいのですが、どの様にすればよいでしょうか? よろしくお願いします。

  • エクセルで別ファイルのシートの貼り付けマクロ

    マクロ初心者です。よろしくお願いします。 excelファイルのシートに同じシート名csvファイルのデーターの貼り付けをしたいのです。 ↓詳しくは。 excelファイルがあります。(ファイル名:全社) シート名=集計、1、2、3、4、5、6、7、8、9、10(固定) csvファイルがあります。1~始まり数は変動(1~3だったり、1~7とか) 1ファイル=1シート、ファイル名とシート名は同じ excelファイルのシート(1~10)に、開いたcsvファイルの同じシート名(1~10)のデータを貼り付けたい。 毎回コピー・貼り付けの繰り返し作業なので、マクロ作成を試しているのですが、うまくいきません。 教えてください。お願いします。

  • Excel VBA インポートファイル名指定したい

    Excel VBA 初心者です。 スイッチを押すと、テキストファイルのインポートダイアログを開いて、外部データの取り込みをしたいと考えています。 指定セルにインポートを設定+シートにマクロ実行スイッチを配置+マクロの自動記録の記述を参照してマクロを登録し、そのスイッチを押す事で、正常にインポート作業を行なう事ができました。 しかし不明点が2箇所ほどあります。 1.ダイアログを開いたとき、ファイル拡張子を指定したいのですが、どうすれば指定できますか? 2.ダイアログを「キャンセル」で閉じると、「実行時エラー1004:アプリケーション定義またはオブジェクト定義のエラー」と表示されるのですが、解決方法はどうすればいいですか?  ※マクロの自動記録を参照して記述したマクロ処理 Sub Macro1() Sheets("HIN").Select Range("A1").Select ActiveCell.Offset(2, 0).Select Selection.QueryTable.Refresh BackgroundQuery:=False Sheets("Sheet1").Select End Sub 環境:EXCEL2000、VB6.0 以上、宜しく御願い致します。

  • 複数のエクセルファイルを1つのエクセルファイルのシートにコピーをマクロ

    複数のエクセルファイルを1つのエクセルファイルのシートにコピーをマクロで行いたい。 マイドキュメントのデーターというフォルダ内に エクセルファイルA(シート名みかん) エクセルファイルB(シート名りんご) エクセルファイルC(シート名バナナ) エクセルファイルD(シート名ぶどう) エクセルファイルE(シート名いちご) があります。 雛形は同じです。すべてA列~F列までデータが入っています。 行数はファイルによって違います。 また毎日自動で上書き更新され、毎日行数が変わります。 エクセルファイルZがあります。シートが7個あります。 ・変換 ・集計 ・みかん ・りんご ・バナナ ・ぶどう ・いちご エクセルファイルZを開きます。(各シートには昨日のデータが貼り付けてあります。) マイドキュメントのデーターフォルダも開いておきます。 エクセルファイルZにおいて「マクロの記録」を起動。 エクセルファイルZの 【みかん】~【いちご】までの5シートを全データDELETEします。 開いてあるフォルダ「データー」の中からエクセルファイルAを開きます。 (タスクバーにいます) ファイルAのシート【みかん】の全データ選択して エクセルファイルZの【みかん】というシートのA1セルにカーソルを あわせて貼り付けします。 開いてあるフォルダ「データー」の中からエクセルファイルBを開きます。 (タスクバーにいます) ファイルBのシート【りんご】の全データ選択して エクセルファイルZの【りんご】というシートのA1セルにカーソルを あわせて貼り付けします。 これと同じ操作を【バナナ】【ぶどう】【いちご】も行います。 エクセルファイルZにおいて「マクロの記録」を終了させます。 マクロができあがりました。 ファイルZを上書き保存して終了。再立ち上げで記録したマクロを実行。 エラーにはなりませんが、ファイルZの5種類各シートに ファイルA~Eのデータが貼りつきません。 何か無理な事をしているのでしょうか? もしかしてシート名が同じだと駄目?とためしにファイルZのシート名【みかん】~【いちご】を 【みかんZ】~【いちごZ】に変更してマクロを再記録しても 駄目でした。 よろしくお願いします。

  • 複数のエクセルを一つに貼り付け

    複数のエクセルファイルを一つのエクセルファイルの中のシートに マクロを利用してデータを貼り付ける方法はありますでしょうか? 実績表というフォルダ内に、下記のエクセルファイルがあります。 ・貼付け元のエクセルファイル名:実績表+3桁数値 →10ファイル ・1つに集計したいエクセルファイル名:実績表  ※その中に、貼付け元のファイル名と同じシート名が10シートあります。 できれば、「値の貼付け」でなはく、数式も含めた状態のデータを貼付けしたい。 是非、マクロのコードを教えていただきたく、宜しくお願い致します。

  • エクセル2003のVBAを教えてパート3

    kドライブのVBA練習フォルダにある、全てのテキストデータファイル(拡張子.txt)を、エクセルに繋げて取り込こむ(指定のエクセルの1シートに全テキストデータを繋げて取り込む)方法がわかりません。どなたか教えてください。データは、A列にのみに入ります。 テキストデータファイルの数は、1~4ファイルと色々な場合があります。また、行数も1ファイル10行~ 400行と色々です。 次のように、決められた1つのデータなら、プログラムに「元データ.txt」と入力する方法で出来るのでっすが。 Sub テキストファイルの読み込み() '1ファイルのとき  Dim buf As String  Dim cnt As Long  Open "k:\VBA練習\元データ.txt" For Input As #1   Do Until EOF(1)    Line Input #1, buf    cnt = cnt + 1    Cells(cnt, 1) = buf   Loop End Sub

  • Excelの範囲指定セルににcsvファイルのデータを貼り付け

    Excelファイルの任意のセルにCSVファイルのデータを貼り付けたいと思っています。 各ワークシートにCSVファイルのデータを読み込むマクロを書いて実行していたのですが、ファイルが増えてしまったのでもっと簡単に処理ができたら、と思い相談させていただきます。 Visual C# 2008の勉強を始めて間もないので初歩的な質問かと思いますが、宜しくお願い致します。 希望する処理の流れは 1.「Excelファイル選択」ボタンを押すと、指定のフォルダ内のxlsファイルをリストボックスに表示 2.Excelファイル選択 3.「CSVファイル選択」ボタンを押すと、指定のフォルダ内のcsvファイルをリストボックスに表示 4.Excelファイルに対応するCSVファイル選択 5.「データ読込」ボタンでテキストファイルのデータをExcelファイルの指定のセルに貼り付け 6.Excelファイルを保存して終了 1.と3.のリストボックスへのファイル表示はできているのですが、選択したExcelファイルにcsvファイルのデータの貼り付けの方法がわかりません… それぞれのファイルを変数に格納して、更にcsvファイルのデータを配列変数に流して、繰り返し処理で貼り付けていくのかな?と想像しているのですが… http://support.microsoft.com/kb/302096/ja 上記のページを参考にしたのですが、外部ファイルのデータを指定のセルに入力するにはどうしたらよいのかわかりませんでした。 ・Excelファイルの指定のセルはB12~H1011までの7列1000行です。 ・csvファイルは1000行に満たないこともあります。 ・入力するデータ型は整数と文字列です。 PC環境 Windows XP SP3 Excel 2007 Visual C# 2008 要領を得ない説明で申し訳ありませんが、どうぞ宜しくお願い致します。

  • EXCEL 指定のフォルダ内にあるエクセルをコピー

    どなたかVBAの記述(コード)を教えて下さい。 指定のフォルダ内にあるエクセル(コピー元)を開きコピー、データを順次、指定のエクセル(コピー先)のシートの上から順番に貼付していきたいのです。コピー貼付が終わったら、コピー元のファイルは別のコピー済のフォルダへ移したいです。 フォルダ名は、自分で指定できますが、コピー元のエクセルのファイル名とシート名は一定ではありません。(コピー元ファイルはシート1枚のみ)。セル範囲は、A~F列、行は毎回変動するので、一番下の行を判定する必要があります。 コピー先のファイルは、指定のシート(※)に上から順番に貼り付けをしたいです。 (※セルに入力して指定したいです。) 不足事項などがありましたら、ご指摘いただけると助かります。 よろしくお願いいたします。 なお、簡単な関数のVBAは理解して使えるのですが(IF~ End If、For ~Next 等)、 イベントのプロシージャーなどが今だ理解できず、自分では書くことができません。 そのため。多少コードが長くなってもいいので、イベント・プロシージャーをなるべく使わない書き方のほうが自分で修正することができ、助かります(イベントを使わないと難しい処理でしょうか・・・)。

専門家に質問してみよう