• 締切済み

excelファイルを検索してセル内容を転記する方法

VBA初心者です。 Aというディレクトリがあり、その中に1,2,3,4というフォルダがあります。 1には「apple1.csv」、「orange1.csv」、「banana1.csv」 2には「apple2.csv」、「orange2.csv」、「banana1.csv」 ・・・ 4には「apple4.csv」、「orange4.csv」、「banana4.csv」 が入っています。 この1から4のフォルダのapple1,apple2,apple3,apple4のファイルをとりだし、それぞれのA1~A10セルを新たなファイルに自動転記する(apple1はA1~A10,apple2はB10~B10・・・)といった具合のマクロを組みたいと思っています。 あるフォルダの中のexcelファイルであれば、以下のソースコードを用いてコピーしたいファイルを選択してセルを転記しているのですが、今回のように、ディレクトリがいくつもあり、その各ディレクトリ中のファイル名の共通項を検索してそのセルを転記する方法が全く分かりません。 どなたかわかる方アドバイスをお願いします。 Sub ブック保存() Dim j As Integer Dim ファイル一覧 As Variant ファイル名一覧 = Application.GetOpenFilename("apple,*.xlsm", MultiSelect:=True) If VarType(ファイル名一覧) = vbBoolean Then Exit Sub Application.EnableEvents = False For i = 1 To UBound(ファイル名一覧) Set ブック = Workbooks.Open(ファイル名一覧(i)) With ThisWorkbook.Worksheets(1) For j = 1 To 10 .Cells(j, i) = ブック.Worksheets(1).Cells(j, 1).Value Next End With ブック.Close Next Application.EnableEvents = True End Sub

みんなの回答

  • fmxBeem
  • ベストアンサー率54% (325/599)
回答No.1

このページが参考になると思います。 http://officetanaka.net/excel/vba/tips/tips36.htm

inverter11
質問者

補足

ありがとうございます。 そのページのディレクトリ下のフォルダすべてを表示するプログラム 「 Sub Sample() Call FileSearch("C:\Sample") End Sub Sub FileSearch(Path As String) Dim FSO As Object, Folder As Variant Set FSO = CreateObject("Scripting.FileSystemObject") For Each Folder In FSO.GetFolder(Path).SubFolders Debug.Print Folder.Path Call FileSearch(Folder.Path) ''見つかったフォルダを引数に指定して、自分自身を呼び出す Next Folder End Sub 」におきまして、私はイミディエイトではなくて、それをセルに表示させるために、 「Sub Sample() Call FileSearch("C:\Sample") End Sub Sub FileSearch(Path As String) Dim FSO As Object, Folder As Variant ' Dim i As Integer ' i = 1 Set FSO = CreateObject("Scripting.FileSystemObject") For i = 1 To FSO.GetFolder(Path).SubFolders Debug.Print Folder.Path Call FileSearch(Folder.Path) ''見つかったフォルダを引数に指定して、自分自身を呼び出す i = i + 1 Cells(i, 2) = Folder Next i End Sub 」 というプログラムを組んだのですが、2列目にはC:\Sample下のすべてのフォルダは表示されず、一部のものしか表示されません。 イミディエイトにはすべてのフォルダが表示されます。 何か間違っていたらご指摘よろしくお願いします。

関連するQ&A

  • 全ファイル名をセルに出力するVBAプログラム

    VBA初心者です。 Aというディレクトリがあり、その中に1,2,3,4というフォルダがあります。 1には「apple1.csv」、「orange1.csv」、「banana1.csv」 2には「apple2.csv」、「orange2.csv」、「banana1.csv」 ・・・ 4には「apple4.csv」、「orange4.csv」、「banana4.csv」 が入っています。 この1から4のフォルダのapple1,apple2,apple3,apple4のファイルをとりだし、それぞれのA1~A10セルを新たなファイルに自動転記する(apple1はA1~A10,apple2はB10~B10・・・)といった具合のマクロを組みたいと思っています。 そこで以下のHPを参考にし、まずはトップディレクトリである「C:\Sample」の中のすべてのフォルダを表示するプログラムをつくってみようと試みました。 ホームページでは以下のソース Sub Sample() Call FileSearch("C:\Sample") End Sub Sub FileSearch(Path As String) Dim FSO As Object, Folder As Variant Set FSO = CreateObject("Scripting.FileSystemObject") For Each Folder In FSO.GetFolder(Path).SubFolders Debug.Print Folder.Path Call FileSearch(Folder.Path) ''見つかったフォルダを引数に指定して、自分自身を呼び出す Next Folder End Sub によってイミディエイトにフォルダを表示する仕様になっています。 実際、私もこのソースで実行したところ、イミディエイトにはトップディレクトリ以下の全ディレクトリ名が表示されました。 これを改良し、2列目に全ディレクトリ名が表示されるプログラムを組みました。ソースは以下です。 Sub Sample() Call FileSearch("C:\Sample") End Sub Sub FileSearch(Path As String) Dim FSO As Object, Folder As Variant ' Dim i As Integer ' i = 1 Set FSO = CreateObject("Scripting.FileSystemObject") For i = 1 To FSO.GetFolder(Path).SubFolders Debug.Print Folder.Path Call FileSearch(Folder.Path) ''見つかったフォルダを引数に指定して、自分自身を呼び出す i = i + 1 Cells(i, 2) = Folder Next i End Sub これを実行したところ、2列目にはすべてのディレクトリは表示されず、一部のディレクトリしか表示されません。 改良の仕方がおそらくまずいと思うのですが、何か私が根本的に間違えている気がするので、ご指摘いただけたら幸いです。

  • Excel: 複数セルの内容を一つに連結するマクロ

    複数セルの内容を一つに連結するマクロの書き方を教えてください。例えば、セルの内容が以下で、 A1:apple A2:orange A3:banana A1からA3を選んだ状態でマクロを実行すると、 先頭のセル(ここではA1)に連結された内容が 以下のように代入され、先頭セル以外はクリア されるようにします。 apple<改行> orange<改行> banana<改行> 選択範囲の行(横方向)の大きさは可変 ですが、列(縦方向)は1列のみです。 よろしくお願いします。

  • エクセルの特定セルを別へのブックに行方向に転記

    エクセル2010で、専用フォルダーに入っている複数のエクセルファイルの特定のセル(A1,B2,C3等)を別のブック(まとめ)に行方向に転記したいのですが。 まとめ用のシートの上の行から順に各シートのセル内容を転記していきたいのですが何か方法がありませんでしょうか? 例えば各ファイルに住所、TEL No、名前が決まった書式のセルに入っていて、これが毎月新規データとして追加されるのですが、別のエクセルシートに必要な項目のみ転記して、一覧表を作成したいのです。 現在は、1つずつファイルを開いて、目的のセルのコピペでまとめのシートに貼り付けて作業していますので、これより少しでも簡単な方法があれば教えてください。

  • エクセルでブック上の転記

    例  (1)ブック(a)のsheet1のセルA1~G1を入力専用とする  (2)入力専用に入力する  (3)ブック(b)のsheet1のセルA1~G1に転記される  ※ブック(b)は開いてない状態  (4)(1)を繰り返す   ブック(b)のセルはブック(a)で入力される度に段が変わってる この説明でわかりますでしょうか。 VBAは初心者ですが多少はわかります。

  • エクセルで、複数のファイルの特定のセルの内容を、ファイルを開かず検索したい

    エクセルのマクロについての質問です。 見積書の一覧表のC列に記入されている見積書番号をダブルクリックすると、 フォルダに入っているファイルの中から、N1セルに同じ見積書番号が入っている ファイルを探し出して開く、というマクロを作成したいと思っています。 ダブルクリックするとアクションを起こすという部分と、 フォルダ内のエクセルファイルのアドレスを取得する部分はできたのですが、 ファイルを開かずに特定のセルを検索する方法がわかりません。 探す範囲のフォルダにはサブフォルダがいくつかあります。 また、見積書のブックのシート数は決まっておらず、 ブック名もシート名もばらばらで規則性はありません。 使用しているのはWINDOWS98SE,EXCEL97です。 ご存知の方、よろしくお願いします。

  • 「Excelのセルへの入力内容の転記と元の内容への復帰」

    「Excelのセルへの入力内容の転記と元の内容への復帰」 何故それが必要かは別にして、次のようなことがしたい。 ・あるセル(例えばA1)にはある関数(式)が設定されている。 ・いま、セルA1にある値が入力されたとき、 ・その値を別のセル(例えばB1)へ転記(保存)し、 ・セルA1には元の関数に戻す。 これを、VBAで実現するにはどうすれば良いのでしょうか?。お教えください。 changeやselectionchangeイベントなどを使用すると出来そうですが、単純なコーディングではchangeの無限ネスト(無限再帰)となってしまいます。 例えば、次のようなコーディング:セルC1をA1セル選択時の関数保存場所として補助的に使用している。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "A1" Then Range("B1") = Range("A1") Range("A1").Formula = Range("C1").Formula End If End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "A1" Then Range("C1").Formula = Range("A1").Formula End If End Sub これでは何か発想の転換が必要に思えます。

  • Excel 自動転記について

    セルA1からA10に入力してある数値で0以外の数値を別のブックに自動転記する方法をご指導願います。

  • エクセル セル内容をファイル名に

    はじめまして。 今現在エクセルにていくつかのセル内容を結合しています。(ファイル名用として) その中には日付をTEXT(A1,yy.mm.dd)としSUBSTITUTE(A2,"/",".")でスラッシュをピリオドに 変換してるセルもあります。 ボタンを作り押したときにそのセルを読み込み、ファイル名にしているのですが 読み込まれた内容にダブルコーテーションがついてしまいます。 「”ファイル名”」の様になってしまい、そのまま保存を押すと .xlsが付かず困っております。 ちなみにボタンに入れてあるマクロは Private Sub CommandButton1_Click() Application.Dialogs(xlDialogSaveAs).Show Arg1:=Range("AK14").Value End Sub です。 どなたかご教授頂けませんでしょうか。。。 宜しくお願い致します。

  • エクセルVBAでファイル作成

    エクセルVBAで、データをフィルタで抽出し、別なBOOKの指定シートに転記し、名前をつけて保存したいのです。一応、下記のコードでテストは成功しました。 しかし下記コードでは1回ごとにデータの転記先を開かなくてはなりません。 処理する件数が多いので、できればいちいち新たに開き直さなくともよい方法はないでしょうか? 最初から開いておいて、転記後名前をつけて保存すると、開いていたファイルが閉じてしまい、うまくいきません。 別BOOKでなく別シートに転記して、そのシートをMoveして別ファイル保存ならわかるのですが、今回はどうしても別BOOKに転記しなければなりません。 よろしくお願いします。 Option Explicit Sub データ分割転記()   Dim myPth As String, fname As String   Dim myRng As Range, myC As Range   Dim i As Long, x As Long   Dim wb(2) As Workbook   Dim ws As Worksheet   Dim t As Single   t = Timer   Set wb(0) = ThisWorkbook   myPth = wb(0).Path   With wb(0).Sheets("Key")     Set myRng = .Range("A2", .Range("A2").End(xlDown)) 'KeyData   End With      For Each myC In myRng     Application.EnableEvents = False     Set wb(1) = Workbooks.Open(Filename:=myPth & "\20150806TEST.xlsm")     Set ws = wb(1).Sheets("List")        With wb(0).Sheets("DATA")       .Range("A1:J1").AutoFilter Field:=4, Criteria1:=myC.Value       .Range("A2", .Range("A2").SpecialCells(xlLastCell)).SpecialCells(xlCellTypeVisible).Copy ws.Range("A9")       .ShowAllData     End With     With ws       x = .Cells(Rows.Count, "A").End(xlUp).Row       myC.Offset(, 2).Value = x '行数確認       .Range("A9").Value = 1       If x > 9 Then         .Range("A9").AutoFill Destination:=.Range("A9:A" & x), Type:=xlFillSeries '連番       End If     End With     wb(1).SaveAs Filename:=myPth & "\作成ファイル\" & myC.Value & ".xlsm"     wb(1).Close (False)     Application.EnableEvents = True     i = i + 1   Next   MsgBox i & "件を完了" _   & vbCrLf & Timer - t & " Sec." End Sub *Application.EnableEvents = False を使っているのば別BOOKが持つイベントマクロを作動させないためです。

  • 既存のExcelファイルをコピーして、コピーしたファイルに画面内容を転記する方法

    タイトル通りの質問です。 流れ的には、こんな感じになると 思われますが、文法等がイマイチ 分からなかったので書き込みしました。 お分かりの方がいらしたら、お願い致します。 Option Explicit 変数の指定 Private Sub 実行ボタン_Click()  Excelファイルをコピー  コピーしたExcelファイルをオープン  指定したセルに画面内容(テキストボックス)を転記  コピーしたExcelファイルをクローズ End Sub

専門家に質問してみよう