• ベストアンサー

エクセルのマクロであるフォルダ内にある全エクセルファイルのシート1!(

エクセルのマクロであるフォルダ内にある全エクセルファイルのシート1!(A1:X365)の値を取得し、コピー元のエクセルファイル名のシートに貼付ける方法を教えて頂けないでしょうか?できればコピー元のエクセルファイルは開かずに実行させたいです。エクセルは2003を使っています。

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

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.5

 おはようございます。DOUGLAS_ です。 >「A1:X365」という読み込み範囲を指定する >SQL文 の書き方が分かりませんでしたので、・・・  前回答の 参照URL に書いてありました。  (;^_^A  前回答の下記2点を訂正していただければ結構です。 1) myRS.Open "select * from [Sheet1$]", myCon を myRS.Open "select * from [Sheet1$A1:X356]", myCon に差し替え。 2) Range(Range("Y1"), Cells(1, Columns.Count)).EntireColumn.ClearContents Range(Range("A366"), Cells(Rows.Count, 1)).EntireRow.ClearContents の2行を削除。  なお、ご存じかとは存じますが、「参照設定」というのは、Visual Basic Editor(VBE)で 1)[ツール(T)] - [参照設定(R)...] で、[参照設定 - VBProject] ダイアログ を開きます。 2)[参照可能なライブラリ ファイル(A):] の下の一覧の中から「Microsoft ActiveX Data Objects 2.x Library」というような文字列の書かれた項目の前の チェックボックス を オン にします。  私の環境では「2.x」の部分が「2.0」・「2.1」・「2.5」・「2.6」・「2.7」・「2.8」と 6通り ありましたので、番号の一番大きな「2.8」に参照設定しました。 3)最後に [OK] を クリック して、[参照設定 - VBProject] ダイアログ を閉じます。  なお、私の書いた マクロ は、マクロ が書かれた ブック には、何も変化はありません。  新規ブック を開いて、そこに データ を読み込み、別名で保存するようにしてあります。 >最終的に私がやりたいことは60ある同一フォームのエクセルファイルの、 >A1からX365に入力された数値を >それぞれのセル位置ごとにマスターのファイルで合計を出したい とのことですが、「60ある同一フォームのエクセルファイル」は、同じ フォルダ に入っていることが要件です。  VBA の知識がおありでしたら、私の書いた マクロ を適当に手直ししてくだされば、複数の フォルダ からの読み込みもできるようになります。  では、ご健闘をお祈りします。  <(_ _)>

ganba1192
質問者

お礼

おはようございます。 私の言葉足らずの質問、要望に熱心に回答頂き本当にありがとうございました。おかげさまでやりたかったことは完全に出来るようになりました。 また、いろいろと勉強にもなりました。 大変感謝しております。 本当にありがとうございました。

その他の回答 (4)

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.4

 毎度お騒がせいたします。DOUGLAS_ です。  ADO を使って データ接続 ということで、 http://antonsan.net/study/excel/excel021.php#9 を参考に書いてみました。  「Microsoft ActiveX Data Object 2.x Library」に参照設定なさってください。「2.x」の「x」は数字の大きなものを選べばよかったと存じます。  ただし、「A1:X365」という読み込み範囲を指定する SQL文 の書き方が分かりませんでしたので、読み込んだ後に、範囲外を削除する、というような ダサイ ヤリカタ になってます。 ' 参照設定「Microsoft ActiveX Data Object 2.x Library」 Sub test()  Application.ScreenUpdating = False '「あるフォルダ」の指定  Dim MyPath As String  With Application.FileDialog(msoFileDialogFolderPicker)   .Title = "フォルダを選択してください"   .InitialFileName = "D:\"   .Show   MyPath = .SelectedItems(1)  End With 'Dドライブ 直下に「あるフォルダ」名で、ブック を保存  Workbooks.Add Template:="ブック"  ActiveWorkbook.SaveAs Filename:= _     "D:\" & Replace(Replace(MyPath, ":", ":"), "\", "¥") & ".xls" '「あるフォルダ」内の、ブック を検索  Dim MyName 'As String  Dim myCon As New ADODB.Connection  Dim myRS As New ADODB.Recordset  MyName = Dir(MyPath & "\*.xls")  Do   'アクティブシート を「コピー元のエクセルファイル名」に変える   ActiveSheet.Name = Replace(MyName, ".xls", "")   '「シート1!(A1:X365)の値を取得し、」・「シートに貼付ける」   With myCon    .Provider = "Microsoft.Jet.OLEDB.4.0;"    .Properties("Extended Properties") = "Excel 8.0;HDR=NO"    .Open MyName   End With   myRS.Open "select * from [Sheet1$]", myCon   Range("A1").CopyFromRecordset myRS   Range(Range("Y1"), Cells(1, Columns.Count)).EntireColumn.ClearContents   Range(Range("A366"), Cells(Rows.Count, 1)).EntireRow.ClearContents   myRS.Close   myCon.Close '「あるフォルダ」内の、ブック がなくなるまで、繰り返す。   MyName = Dir   If MyName <> "" Then    Sheets.Add after:=ActiveSheet, Type:="ワークシート"   Else    Exit Do   End If  Loop   '再保存  Set myRS = Nothing  Set myCon = Nothing  ActiveWorkbook.Sheets(1).Activate  ActiveWorkbook.Save  Application.ScreenUpdating = True End Sub

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.3

#2 DOUGLAS_ です。  美味しそうな エサ に食らい付いて、とても初歩的な ミス をしてしまいました。  下記2点を訂正します(なお、変数は、都度、宣言しています)。 1) MyName = Dir(MyPath & "\*.xls") の前に  Dim i As Integer  Dim j As Integer  Dim myArr(364, 23) As Variant を追加します。 2) Range("A1:X365") = ExecuteExcel4Macro("'" & MyPath & "\[" & MyName & "]Sheet1'!R1C1:R365C24") を   For i = 1 To 24    For j = 1 To 365     myArr(j - 1, i - 1) = ExecuteExcel4Macro("'" & MyPath & "\[" & MyName & "]Sheet1'!R" & j & "C" & i)    Next   Next   Range("A1:X365") = myArr に差し替えます。  ただし、この方法では、とても時間がかかり、パソコン にも、かなり負荷が掛かってそうですので、別の方法を考えてみます。  大変お騒がせいたしました。   <(_ _)>

ganba1192
質問者

補足

DOUGLASさん回答ありがとうございます。やはりコピーしてシートを作っての繰り返しはパソコンへの負荷が大きいのですね。 最終的に私がやりたいことは60ある同一フォームのエクセルファイルの、A1からX365に入力された数値をそれぞれのセル位置ごとにマスターのファイルで合計を出したいと思っています。シートをファイル数分コピーして増やそうと思ったのは一つのファイルにまとめれば後は私のエクセル関数の知識でもやりたいことは達成できると思ったからです。 他にいい方法があれば教えて下さい。お願いします。

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.2

 面白そうなお題でしたので、乗ってみました。 Sub test()  Application.ScreenUpdating = False '「あるフォルダ」の指定  Dim MyPath As String  With Application.FileDialog(msoFileDialogFolderPicker)   .Title = "フォルダを選択してください"   .InitialFileName = "D:\"   .Show   MyPath = .SelectedItems(1)  End With 'Dドライブ 直下に「あるフォルダ」名で、ブック を保存  Workbooks.Add Template:="ブック"  ActiveWorkbook.SaveAs Filename:= _     "D:\" & Replace(Replace(MyPath, ":", ":"), "\", "¥") & ".xls"   '「あるフォルダ」内の、ブック を検索  Dim MyName 'As String  MyName = Dir(MyPath & "\*.xls")  Do    'アクティブシート を「コピー元のエクセルファイル名」に変える   ActiveSheet.Name = Replace(MyName, ".xls", "")    '「シート1!(A1:X365)の値を取得し、」・「シートに貼付ける」   Range("A1:X365") = ExecuteExcel4Macro("'" & MyPath & "\[" & MyName & "]Sheet1'!R1C1:R365C24") '「あるフォルダ」内の、ブック がなくなるまで、繰り返す。   MyName = Dir   If MyName <> "" Then    Sheets.Add after:=ActiveSheet, Type:="ワークシート"   Else    Exit Do   End If  Loop    '再保存  ActiveWorkbook.Sheets(1).Activate  ActiveWorkbook.Save  Application.ScreenUpdating = True End Sub

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

ブックを開かないで読む http://www.officetanaka.net/excel/vba/tips/tips28.htm とか、あとは外部接続などになるのかな。 開かないでやると、結構面倒な感じがします。

ganba1192
質問者

お礼

ありがとうございました。勉強になりました。

関連するQ&A

  • Excelのマクロを使用して以下の内容をしたいのですがどのようにすれば

    Excelのマクロを使用して以下の内容をしたいのですがどのようにすれば宜しいでしょうか? 1)「Sheet1」のセルの値が>2(2より大きい)の場合に「Sheet2」の同一のセルの色を例えば赤色にする。 これをA1~N34までのセルに関して連続で実行したい。 2)「X」というファイルのSheet1 A1からN34セルに同一のフォルダーに入っている、他のファイルの同セルに値が記載されていれば、その値をコピーしたい。 フォルダーに次々とファイルが追加されていくことを想定し、できれば他のファイル名は指定しなくてもどんどんコピーできるマクロがあればいいと思うのですが・・・ すみませんが宜しくお願いいたします。

  • 複数のエクセルファイルを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】に変更してマクロを再記録しても 駄目でした。 よろしくお願いします。

  • Excelマクロで、多数のシートの値だけを元のファイルに上書きするようなマクロを教えていただきたいのですが。

    あまり詳しくないのですが、Excelマクロで、1つのファイルにある40くらいのシートの計算式等をすべて排除した値&図だけを元のファイルに上書きするようなマクロを教えていただきたいのですが。 マクロを使わないでの方法は、 (1)、シート選択 (2)、CTRL+A(すべて選択) (3)、CTRL+C(コピー) (4)、形式を選択して貼り付け (5)、値(選択値) これをそのファイルが持っているシート分の繰り返しです。 宜しくお願いします。  

  • エクセル・シートコピーの際のマクロについて

    教えてください。 エクセルで、マクロを組んでいる月毎の勤務表を1つのシートとし、月が替わるたびにシートコピーをし増やしていきましたら、1つのファイル内にシートが多くなった為に、ファイル動作(保存等)が遅くなりました。 そこで、ファイルのコピーをし、別ファイルで管理し、再度、同じように作業していこうかと思っております。 しかし、ファイルのコピーをし、そのファイル内のマクロを実行しましたら、何故か、コピー元のファイルも一緒に開いてしまいます。マクロ情報がコピー元にあるからかと思いますが、このマクロ実行時にファイルが開かないようにする方法はありますか? よろしくお願い致します

  • エクセルマクロでファイル名やシート名変更できない

    エクセルは初心者なのでマクロを自動記録して作成しています。 少しづつ動作を小分けにして記録して、まとめてボタンで連続実行させるようにしました。 (1)作成途中で失敗したら最初からの作業になると思い、 ある程度進んだら何度かファイルのコピーを作成して進めていました。 ある程度完成した時点でファイル名が「○○○4~コピー~」の様な名前だったので、正式に名前を決めて変更したらマクロの実行が出来なくなりました。(元の名前に戻すと実行可能) (2)またシートも複数のシートに跨って参照するようなマクロです。 シート名を分かりやすい名前に変更したらこの場合もマクロ実行できなくなりました。 (3)コピーしたファイルもマクロ実行できないものがあります。 コピーしたファイルはマクロ実行できないのでしょうか? (4)ファイル作成途中で何かの変更が生じて列や行の挿入を行った場合、 特定のセルを参照して計算するマクロは実行できなくなるのでしょうか? その場合、簡単に修正する方法はありますか? 初心者にも分かるような回答をよろしくお願いいたします。

  • エクセル マクロ 複数ファイルを1枚のファイルに

    お世話になります。 私の業務で、多数のエクセルシートを1つのファイルにまとめ、 その上で縦串を通して合算を出す、という作業が頻発しております。 様々な資料で同様の作業が行われますので、簡素化ができればと思い、 質問させていただきます。 [作りたいマクロ] 『元データ』のフォルダに入っているエクセルファイルの 『指定シート(仮にA2セルにシート名を指定できるものとします)』を、 当マクロの入ったエクセルファイルにシートを追加したい。 その際、全てのシート名が同一になってしまうので、 『指定したセル(仮に各シートのB2セル)』をシート名にする。 ●各シートは全て同じフォーマットですので、書式等そのままコピーでOKです ●元のファイル名はバラバラになっていることが多いです

  • EXCELのマクロをバッチファイルから起動させ、あるフォルダ内のCSVファイルをTXTファイルに変換。

    あるフォルダにdata.csvというファイルがあります。 一つ目の質問は、EXCELのマクロで「あるフォルダ内にある***.csvを開く」という動作はどのように記述されますか? 2つ目の質問はバッチファイルあるいはスクリプトファイルでEXCELのこのマクロを実行させることは可能ですか。どのように記述したらよいのでしょうか。 3つ目はセルA1~A10の値をx B1~B10の値をyとしてグラフを描かせるコマンドはありますか。

  • エクセル:フォルダ内のファイル数を数える

    1つのファイルを選択後、 そのファイルを開いてある操作をし、閉じる。 その後自動的に、同一フォルダ内のファイルを開いて同様の操作をし、閉じる。 これをフォルダ内のファイル全てに対して行う、 というマクロを組みたいです。 例えば、 フォルダAに、File1.csv, File2.csv, File3.csv, File4.csv の4ファイルがある時、 File3.csvを選んで操作を実行(csvファイル内のセルA4の値を、マクロを実行したExcelファイルにコピー)。 実行完了後、File3.csvは閉じる。 続けて、File1,File2,File4についても、 開く→コピーする→閉じる、を繰り返す。 フォルダ内全てのファイルに対して実行したら終了。 ファイル名は、常にFile+数字.csvではありませんが、拡張子は常にCSVです。 素人考えでは、フォルダ内のファイルの数と名前を取得し、ループで回せばいいと思うのですが、 「フォルダ内のファイルの数と名前を取得」する関数でもあるのでしょうか? 他に何か楽な方法でもあれば、教えてください。

  • ★「フォルダ内の全エクセルシートを一括処理」★

    ★「フォルダ内の全エクセルシートを一括処理」★ エクセルのマクロのコードを教えていただけますでしょうか。 ★VBAの初心者です★ どなかた詳しい方、下記の内容を実行するためのコードを教えていただけませんでしょうか。 あるフォルダ内に入っている全エクセルシートの「sheet1」セルA1、B1、C1にある値を、デスクトップ上に保存されている別のエクセルシート”X” のF2、G2、H2、にそれぞれ貼り付けたい。 フォルダ内のエクセルシートは複数あるので、エクセルシートXのセルF2、G2、H2の次はF3、G3、H3、F4、G4、H4とそれぞれ1番ず つ下に貼り付けていきたい。 フォルダを検索するところから、全てのコピーが終了するところまで教えていただけると幸いです。 お忙しいところ恐れ入りますが、よろしくお願いいたします。

  • エクセルマクロ 指定したフォルダ内のファイルをコピーしたい

    エクセルのセルに入力されたフォルダを参照して、 wordファイルを別のフォルダにコピーするようなマクロがあれば、 ぜひ教えてください。 ・A1には、="パス名"&A2 と元々入力してあり、  A2には実行する前に"dd.mm"と入力。 ・このdd.mmフォルダから、yyyyフォルダに*.docをコピー。 A1セルを参照する方法がわかればいいのですが、何分初心者なもので ご指導いただければと思います。

専門家に質問してみよう