• 締切済み

ブックを開いて閉じるVBA

初めまして、ブックを開いて閉じるループのVBAについて質問させてください! 別添の画像のようなブックAの中に、「りんご」のように名前のついたシートが複数あります。(この数は変動します。来月は「ぶどう」が入るかもしれないし、「りんご」がなくなるかもしれません。) そして「新しいフォルダ」という名前のフォルダに、別添の画像のようにいくつかブックAのシートの名前を含むファイルが入っています。別添画像のように、シートの名前は必ず含むものの、ファイル名はバラバラで、「すもも」のようにシートにはないものもあります。そして、「みかん」のようにシートにあるのにファイルがない場合もあります。 このうち、ブックAに存在するシートの名前を含むファイルのみ開いて閉じるというループのVBAを入力したいのですが、どうすればよいのでしょうか…?!ちなみに、「すもも」のようにブックAに存在しないシートの名前のファイルは開かないでおきたいです。 「みかん」のようにシートはあるがファイルがない場合は、エラーを出さずそのまま次の処理をすすめたいです。 ちなみに、「新しいフォルダ」の存在する場所は 「C:\Users\PC〇〇〇\Desktop\新しいフォルダ\」です。 VBA初心者なので、なるべく簡素なものにしたいと思っています。 ご助力いただけると大変嬉しいです…!よろしくお願いいたしますm(_ _)m

みんなの回答

  • Mathmi
  • ベストアンサー率46% (54/115)
回答No.2

当方の実力不足故シェルスクリプトはよく分からないので、Dirにより検出する方法で作ってみました。 Sub test()  'アクティブシートの全てのシート名を配列に格納  Dim SheetNames() As String  ReDim SheetNames(1 To ActiveWorkbook.Worksheets.Count)  Dim i As Integer  For i = 1 To UBound(SheetNames)   SheetNames(i) = ActiveWorkbook.Worksheets(i).Name  Next i  Const myPath As String = "C:\Users\PC〇〇〇\Desktop"  Dim myFlg As Boolean  Dim buf As String  Dim myBK As Workbook  buf = Dir(myPath & "\" & "*.xls*")  Do While buf <> "" '全てのブックを検索   myFlg = False   '対象のブック名内に、アクティブシートのシート名が含まれているか確認。   For i = 1 To UBound(SheetNames)    If InStr(buf, SheetNames(i)) > 0 And InStr(buf, ThisWorkbook.Name) = 0 Then     myFlg = True     Exit For    End If   Next i   '含まれていれば、そのファイルを開いて閉じる。   If myFlg = True Then    Set myBK = Workbooks.Open(Filename:=myPath & "\" & buf) '開いたブックを変数myBKに格納    '***各ブックに行う処理を入力***    MsgBox myBK.Worksheets(1).Name '例    myBK.Worksheets("sheet1").Cells(1, 1).Value = 1 '例    '******************************    Call myBK.Close(SaveChanges:=False) '保存せずに終了   End If   '次のファイル名をbufに格納する。   buf = Dir()  Loop End Sub

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

>ブックAに存在するシートの名前を含むファイルのみ開いて閉じる Sub Test()   Dim fso As Object   Dim src As Object   Dim Fil As Object   Dim myPath As String   Dim ws As Worksheet   Dim myBook As Workbook   myPath = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\新しいフォルダ"   Set fso = CreateObject("Scripting.FileSystemObject")   Set src = fso.GetFolder(myPath)   For Each Fil In src.Files     For Each ws In ThisWorkbook.Worksheets       If Fil.Name Like "*" & ws.Name & "*" Then         'シート名に該当するファイルを開く         Set myBook = Workbooks.Open(myPath & "\" & Fil.Name)         '何らかの処理         '処理終了後、開いたブックを上書きして閉じる         myBook.Close True       End If     Next   Next End Sub

関連するQ&A

  • シート名と同じブックを開くVBA

    初めまして、以下のVBAについて質問させてください!「新しいフォルダ」に入っている「りんご」という名前のブックを開くことに成功したのですが、ここからさらに応用して、アクティブワークブックのシート名と同じ名前を含むブックが新しいフォルダにあれば、該当のブックを開く作業をしたいと思っています。シート名は「りんご」を含め「みかん」や「りんご」など色々あります。 VBA初心者のため以下の簡単なコードをなるべく崩したくないのですが、何か方法はありますでしょうか…?!ネットで色々検索しているのですが同じようなケースが見つからず困っています!どうかよろしくお願いします…!m(_ _)m Const お茶 As String = "C:\Users\PC○○\Desktop\新しいフォルダ\" Dim 三色団子 As String 三色団子 = Dir(お茶 & "りんご.xlsx") Workbooks.Open Filename:=お茶 & 三色団子

  • VBA初心者です。

    VBA初心者です。 日付順に並べたいのですが、どのようにしたらいいのでしょうか。 【エクセル】日付順に別シートに並べるやり方を教えてください。 エクセルsheet1に下記の情報があります。 B(名前) C(記号) E~H(日付) 5 ばなな a 4/2 5/3 6/6 6 みかん b 4/8 5/7 6/6 7 りんご c 5/1 6/8 7/9 ・ ・ ・ ・ 下にどんどん続きます。 sheet2 (c.5)くらいから日付、名前、記号 4/2 ばなな a 4/8 みかん b 5/1 りんご c 5/3 ばなな a 5/7 みかん b 6/6 ばなな a 6/6 みかん b 6/8 りんご c 7/9 りんご c ・ ・ ・ 下に続きます。 このようにsheet2に日付順に並べつつ、横の情報もそのまま並べたいです。 (同じ日付はあります) sheet1で日付がたて1列であればできるのですが、 横にもたくさんある中からの抽出はどうしてもできませんでした。 よろしくお願いいたします。

  • VBA 複数ブックへ書き込み

    VBA初心者です。 1つのフォルダ内にある100(ファイル名001から100)個のエクセルファイル(ブック)の特定の場所(すべてのエクセル ファイルはファイル名は違うが、同一のシート名で同一のセルの構造になっている。 以上に対して、1つのもとになるファイルA(ブック、シート)の特定のセル(同一列の行を上から順次下る)セルの値を先の同一フォルダ内のエクセルファイル100(001~100)個に対して、ブックオープン、特定セルのデリート、特定セルへの書き込み、ブック保存という一連の作業を行いたいです。 多数のファイルから1つの集計ファイルに値を読み込んできて書き込むサンプルはあるようですが、逆に1つのファイルから同一フォルダ内の多数のファイル(ブック)の特定場所に書き込むためのサンプルコードを教えていただけると大変助かります。 以上よろしくお願いいたします。

  • 同一フォルダの別ブックへのデータ貼り付け(VBA)

    Excel2007・VBAにより、マクロ実行ブック(「親」)の≪Sheet1≫シートにおけるP10:P54に入力されている数値を、「親」と同一フォルダにある複数の別ブック(「子」)の≪Sheet1≫シートのP10:P54に貼り付けたいです。 なお、同一フォルダには「子」とは別に本処理対象としない≪Sheet1≫シートが存在しない他のブックも存在しています。 考えたり幾度か検索したりしたのですが、希望に合った内容が出てきませんでした。 宜しくお願い致します。

  • VBAによるブック間のシートの移動またはコピペ

    検索で探すもピッタリ来るものが探せなかったものですみません。 Aブックにシート1とシート2があります。 bブックにシート3があります。 シート2とシート3の名前は同じ"abc"とします。 Aブックのシート1にコマンドボタンを設置し、このボタンをクリックするとシート3をシート2に移動またはコピー&ペーストするようにVBAで実現できますでしょうか? よろしくご教授ください。

  • VBAでブック内のワークシートを名前をつけて保存

    エクセルVBAで作業中のブックの一部のワークシート(2枚)を名前をつけて保存する方法を教えてください。 (例)  《ブックA》  sheet1 sheet2     sheet3 10/5     10個 10,000円    4個 25,000円 東京     25個 18,500円    6個 42,000円 というブックから『10/5 東京』というブックでsheet2,sheet3の内容を 保存したいのですが・・・ VBAは勉強し始めでほとんどわからないので教えてください。

  • Bookへファイルを飛ばす!

    Bookへファイルを飛ばす! エクセルVBAで "A"BooKと"B"Bookと"C"Bookがあります! 3つのBookにそれぞれSheetを飛ばしたいです。 例えば、 CommandButton1_Click()すると Sheet1は"A"Bookへ Sheet2は"B"Bookへ Sheet3は"C"Bookへ とそれぞれの場所に行かせたいのですが… すいません教えて下さい 1つだけ飛ばすなら分かるのですが!

  • EXCEL VBA 別ブックから貼り付け

    お世話になります。 A、Bという2つのブックがあります。 A.xls データファイル B.xls 処理実行ファイル Bブックを開いてSheet1に置いてあるボタンを押すとファイル洗濯ダイヤログが出てきて、そこで指定したBブックをsrtPathに格納(シートは1つだけ)のBブックのA1から全データをAブックのSheet1に貼り付けたいのです。 下記VBAを書いてみましたがエラーになってうまく動きません。 Workbooks(strPath).Range("A1").Copy ActiveWorkbooks.Worksheets("Sheet1").Range("A1").PasteSpecial どなたが解決方法をご教授いただけませんでしょうか。 よろしくお願い致します。

  • Excel VBA別ブックのシートをコピーするには

    Excel2010のVBAで別ブックのシートをコピーしてくる方法 Excelファイル(C:\test\BOOK2.xls)のシート名が TESTというシートを自分のExcelファイル(C:\doc\BOOK1.xls)に コピーするにはどのように記述すればよいのでしょうか。 ・コピー先:自分のExcelファイル(C:\doc\BOOK1.xls)  VBAのコードがあるファイルです ・コピー元:C:\test\BOOK2.xlsのTESTシート  なお、TESTシートを持つ同じ名前(BOOK2.xls)のファイルが  別フォルダにもあります   Workbooks( )の引数にファイル名(BOOK2.xls)は指定できるのですが、 フルパス名(C:\test\BOOK2.xls)で指定できないので困っています。

  • Excel 他の複数ブック開くVBA 

    お世話になります。田中と申します。 以前も同じ質問させていただきましたが、複数のブックを自動で開いて閉じるVBAロジックをご教授いただきましたく思います。 Excel VBAを使って下記(1)、(2)の処理を実現したいと思っております。 どなたかVBAロジックをご教授いただけませんでしょうか。 (1)集計.xlsxというブックがあります。このブックに[ファイル]というシートがありまして A1のパス、B1にファイル名が記入されています。 この組み合わせのファイル数は可変ですが下記のように大体10個程度あります。 A2(パス)+B2(ファイル名) A3(パス)+B3(ファイル名) A4(パス)+B4(ファイル名) A5(パス)+B5(ファイル名) ・・・ (2)このシートに[開く]というボタンを配置して、クリックされたらA1(パス)+B1(ファイル名)でファイルを開いて何もしないですぐに閉じて、次のファイルを開いて閉じて、また次のファイルを開いて閉じて。。という動きをファイル数分繰り返したいのです。 どなたかご教授いただけますでしょうか。 よろしくお願い致します。

専門家に質問してみよう