マクロのワイルドカードの使い方&ループ記述について

このQ&Aのポイント
  • マクロ初心者がファイルを開く動作をループさせる際に、ワイルドカードを使って特定の条件のファイルを開く方法について質問しています。
  • 質問文のマクロを実行すると、特定のフォルダ内のファイルの指定範囲のセルの値をコピーし、別のファイルに貼り付ける動作を実現したいとしています。
  • 質問者はマクロの記述がうまくいっていないため、エラーメッセージが出てしまっているようで、正しい記述方法を知りたいとしています。
回答を見る
  • ベストアンサー

マクロのワイルドカードの使い方&ループ記述について

マクロ初心者です! 下記の動作を実現したいのですが、 「(下記★の)フォルダが見つかりません。移動や削除が行われた可能性があります。」とエラーが出ます。 初心者のためエラーの理由がわからず、そもそも記述が間違っているのかも不明な状況です。 知識をお持ちの方がいらっしゃれば、下記動きを実現するために、どこを修正する必要があるのか、 ご教示いただけますと幸いです。。。 実現したい動きとしては以下です。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・ ファイル名に「あいう」を含むファイルを開く →F25:F42の値をコピー …(1) ファイル名に「えお」を含むファイルを開く →F25:F42の値をコピー …(2) (1)と(2)を加算して、貼り付け先ファイルのF25:F42に貼り付け →以上の動きをF列~AC列まで1列おきに行う。 ※以上のすべてのファイルは同じフォルダ内に格納されています。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・ そして、書いてみたマクロは以下です。 Sub マクロ() Dim i As Integer For i = 5 To 28 Step 2 Dim xAdr As Range Set xAdr = Range(Cells(25, i), Cells(42, i)) Dim ex As New Excel.Application Dim wb As Workbook Dim wbA As Workbook Dim sPath Dim sPathA Dim r As Range Dim sht As Worksheet With Workbooks("貼り付け先ファイル.xlsm").Worksheets("指定sheet") sPath = "C:\Users\指定フォルダ\*あいう*.xlsm" ★ Set wb = ex.Workbooks.Open(Filename:=sPath, UpdateLinks:=0, ReadOnly:=True, IgnoreReadOnlyRecommended:=True) wb.Worksheets("指定シート").Range(xAdr).Copy .Range(xAdr).PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd Call wb.Close sPathA = "C:\Users\指定フォルダ\*えお*.xlsm" Set wbA = ex.Workbooks.Open(Filename:=sPath, UpdateLinks:=0, ReadOnly:=True, IgnoreReadOnlyRecommended:=True) wbA.Worksheets("指定シート").Range(xAdr).Copy .Range(xAdr).PasteSpecial Paste:=xlPasteValues Call wbA.Close End With End Sub どうぞよろしくお願いいたします。。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1601/2438)
回答No.2

以下のサイトを参考にしてください。 Dir 指定したファイルまたはフォルダの名前を返します。 引数pathnameにはワイルドカードを使用できます。 http://officetanaka.net/excel/vba/function/Dir.htm サンプルの cnt = cnt + 1 の部分にファイルを開いて作業をして閉じるまでを記載してください。 また tmp にフルパスが入っているかどうかも確認してあとのコードを作成してください。

その他の回答 (1)

  • WDY
  • ベストアンサー率28% (121/430)
回答No.1

「(下記★の)フォルダが見つかりません。移動や削除が行われた可能性があります。」 という事はファイルが無いんじゃないですか? それと取得したファイル名が複数になる事があるので 取ってきたファイル名のどれを開くか指定しないとエラーになると思います。 そもそもなぜ開いているのでしょうか? 中身を参照すれば良いのでは? http://officetanaka.net/excel/vba/tips/tips28.htm

関連するQ&A

  • マクロでループ構文がうまく使えません。。

    マクロ初心者です! 下記の動きを実現したく、マクロを組んでいます。 F列~AD列の間で、1列おきに下記処理を行う 「あいう」の指定sheetのF25→F42までの値をコピー →「えお」の指定sheetのF25→F42までの値をコピー →「貼り付け先ファイル」のF25→F42に上記2つの値を加算で貼り付け 下記の記述をF列、H列、、と地道に書いていくことで 形としては動くようになったのですが、これはループ構文を用いることができるのでは? と思って試行錯誤をしているところです。が、上手くいきません。 どのようにしたらうまく動くのか、知識のある方からお力を借りたいです。。 よろしくお願いします。。 Sub マクロ() Const xAdr As String = "(F25:F42)" Dim buf As String buf = Dir("C:某フォルダ\*あいう*.xlsm") With Workbooks("貼り付け先ファイル.xlsm").Worksheets("貼り付け先シート") Workbooks(buf).Worksheets("シート#1").Range(xAdr).Copy .Range(xAdr).PasteSpecial Paste:=xlPasteValues buf = Dir("C:\某フォルダ\*えお*.xlsm") Workbooks(buf).Worksheets("シート#2").Range(xAdr).Copy .Range(xAdr).PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd End With End Sub

  • エクセル マクロ 値の貼り付け

    以下のエクセルのマクロで値のみを貼り付けたいのですが、.valueを指定しても上手くできません。 どのように修正すればいいか教えてください。 Dim wb As Workbook Application.ScreenUpdating = False Set wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\ファイルA.xls", UpdateLinks:=0) ThisWorkbook.Sheets("BBB").Range("E4:AR4").Copy wb.Sheets("BBB").Range("E4:AR4") Application.DisplayAlerts = False wb.Close (True) Application.DisplayAlerts = True Application.ScreenUpdating = True

  • 異なるワークシートに値を貼り付けるマクロ

    数式の入ったワークシートから値のみをコピー&ペーストしたいのですが、うまくいきません。 どこにxlPasteValuesを入れたらいいのでしょうか?よろしくお願いします。 Sub copypaste() Dim bk As Workbook Set bk = Workbooks("‘貼り付け先.xlsm") Workbooks("Book1.xlsm").Worksheets("Sheet1").Range("B2:F6").Copy bk.Worksheets("Sheet1").Range("B2:F6")

  • マクロでのワイルドカードの使い方について

    マクロ初心者です! 下記の動きを実現したいです。 (1)ファイル「*あいう*」(※)の「シート#1」のF5→AE24までの値をコピー →上記の値をすべて加算し、「貼り付け先ファイル」のF5→AE24に貼り付け ※「某フォルダ」に存在する、ファイル名に「あいう」を含むすべてのファイル(ファイル数は可変)が対象 (2)上記を同様の動きを、範囲のすべてのセルでなく、 (F25:F42)、(H25:H42)、、~(AD25:AD42)と1列ごとに対して行う 方々で知識のある方からご助力いただき、 下記の「それっぽい」記述までは辿り着いたのですが、上手く動かず。。 また、(1)と(2)は1つにできるのでは?とも推測してますが、どのように書けば間違いないのかわからない状況です…! 知識のある方から、間違いや改善点などご教示いただけたらとてもうれしいです。 Sub (1)() Dim folder As String Dim dws As Worksheet Dim sfile1 As String Dim swb1 As Workbook Dim adr As String folder = "C:\Users\某フォルダ\" Set dws = ThisWorkbook.Worksheets("貼り付け先シート") sfile1 = Dir(folder & "*あいう*.xlsm") If sfile1 = "" Then Exit Sub Set swb1 = Workbooks.Open(folder & sfile1) adr = Range(Cells(5, 6), Cells(24, 31)).Address(0, 0, 1) swb1.Sheets("シート#1").Range(adr).Copy dws.Range(adr).PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd swb1.Close False End Sub Sub (2)() ((1)と同じ宣言) Dim c As Integer folder = "C:\Users\某フォルダ\" Set dws = ThisWorkbook.Worksheets("貼り付け先シート") sfile1 = Dir(folder & "*あいう*.xlsm") If sfile1 = "" Then Exit Sub Set swb1 = Workbooks.Open(folder & sfile1) For c = 6 To 30 Step 2 adr = Range(Cells(25, c), Cells(42, c)).Address(0, 0, 1) swb1.Sheets("シート#1").Range(adr).Copy dws.Range(adr).PasteSpecial Paste:=xlPasteValues, Operation:=xlAdd Next swb1.Close False End Sub

  • ブック内に特定名のシートがある場合

    はじめまして、こんにちは。 VBAを最近はじめたばかりの者です。質問が初歩的なもので申し訳ないのですが是非教えてください。 以下を使って、複数ブックの○○というシートから指定セルの内容を抜き出したいと思っています。 ところが、ブックによっては○○というシートが存在しない場合があり、その場合には「インデックスが有効でない」というエラーで動作が止まってしまいます。 ブック内に○○というシートがある場合にのみ動作させるようにするにはどのようにすれば良いのでしょうか。 よろしくお願いします。 Dim wb As Workbook, myRow As Long Dim e As Integer myRow = ThisWorkbook.Worksheets(1).Rows.Count With Application.FileSearch .NewSearch .LookIn = ThisWorkbook.Path .SearchSubFolders = True .FileType = msoFileTypeExcelWorkbooks If .Execute() > 0 Then For i = 1 To .FoundFiles.Count If .FoundFiles(i) <> ThisWorkbook.FullName Then Set wb = Workbooks.Open(.FoundFiles(i), UpdateLinks:=0) Application.ScreenUpdating = False ThisWorkbook.Worksheets(1).Range("A" & myRow).End(xlUp).Offset(1, 0).Value = _ wb.Worksheets("○○").Range("F6").Value ThisWorkbook.Worksheets(1).Range("B" & myRow).End(xlUp).Offset(1, 0).Value = _ wb.Worksheets("○○").Range("F7").Value ThisWorkbook.Worksheets(1).Range("C" & myRow).End(xlUp).Offset(1, 0).Value = _ wb.Worksheets("○○").Range("F8").Value ThisWorkbook.Worksheets(1).Range("D" & myRow).End(xlUp).Offset(1, 0).Value = _ wb.Worksheets("○○").Range("Y6").Value wb.Close False End If Next i Else MsgBox "ファイルがありません。" End If End With End Sub

  • Excelマクロについての質問です。

    Excelのマクロについての質問です。 マクロについての質問です。 以下のようなマクロを作成しました。 このマクロを動作させているのはこのマクロを作成したファイル上です。 Sub Macro9() Dim WBA As Workbook Dim WBB As Workbook Dim WSA As Worksheet Dim WSB As Worksheet Set WBA = Workbooks("A") Set WBB = Workbooks("B") Set WSB = WBB.Worksheets("1") For i = 100 To 3000 Step 20 Worksheets.Add Before:=Worksheets("Sheet1") Dim k As String k = i ActiveSheet.Name = (k / 100) Set WSA = WBA.Worksheets(k / 100) WSB.Range("A1:AY30").Copy Destination:=WSA.Range("A1") WSA.Range("D4:I30").Clear WSA.Range("Q4:V30").Clear WSA.Range("AD4:AI30").Clear WSA.Range("AQ4:AV30").Clear Next i Application.DisplayAlerts = False Sheets("Sheet1").Delete Application.DisplayAlerts = True Application.DisplayAlerts = False Sheets("Sheet2").Delete Application.DisplayAlerts = True Application.DisplayAlerts = False Sheets("Sheet3").Delete Application.DisplayAlerts = True End Sub そこで質問ですが、このマクロを作動させると何のエラーの表示もなく最後まで動作は完了します。 ですが、シートの作成は30まで作成できてもその後のセルのコピー&ペーストはなぜかシート6.8までしかできていません(7~30までのシートはシート作成はできているのですがコピペのみが実行されず空白のままになっています。) シートもコピペも両方ともシート30まで完了するにはどの点を改善すればいいのでしょうか? 知恵が足りずどうしても直す事が出来ません。 長文申し訳ございませんが是非皆さまのお知恵をお貸しください。 宜しくお願い致します。

  • 他ファイルを参照するマクロ

    excel2010 check.xlsmというファイルにマクロが存在します。 このファイルは、c:\workフォルダに登録されている***A2***.xlsmというファイルからデータを抽出するマクロになっています。 ***A2***.xlsmの***は、ファイル名の中にA2という文字があり、 色々とファイル名が変化するということを意味しています。 ***A2***.xlsmのファイルにはチェックボックスがあり、名前を付けています。 _ch227173520_0002 が一例です。 check.xlsmのファイルで、いろんなファイルのチェックボックス状態を収集するマクロが 下記です。 Dim mypath As String Dim myFile As String '検索フォルダ mypath = "C:\work\" '検索ファイル名 myFile = Dir(mypath & "*A2*.xlsm") 'F列に抽出した結果を記載 Workbooks.Open mypath & myFile With Workbooks("check.xlsm").Worksheets("Sheet1").Range("F65536").End(xlUp) .Offset(0, 0).Value = myFile 'ファイル名 .Offset(63, 0).Value = Range("_ch227173520_0002").Value End With Workbooks(myFile).Close savechanges:=False このマクロでcheck.xlsmファイルのF64セルに、 100A2001.xlsmファイルのチェックボックス_ch227173520_0002の内容を抽出しています。 しかしながら、***A2***.xlsmファイルに仕様変更があり、チェックボックスの名前が変わってしまいました。 _ch227173520_0002 → _ch3131000 の様にです。 これだと、データを参照できないので実行エラーが出てしまいます。 なので、 .Offset(63, 0).Value = Range("_ch227173520_0002").Value → .Offset(63, 0).Value = Range("_ch3131000").Value とマクロを修正すれば、データは参照可能になりますが、 どのA2ファイルがどちらのチェックボックスなのかは、分かりません。 エラーが出たらcheck.xlsmのファイルを変えてやり直すというのは不便です。 チェックボックスの名前がどちらであっても .Offset(63, 0).Valueにデータを持ってくる様にしたいのですが、 どの様にしたらよいでしょうか? マクロ初心者です。 学習マクロくらいしかできないので、ベタで教えていただきたく、 よろしくお願いします。

  • エクセル マクロ 簡素化

    マクロ初心者です。 下記のデータのコピペする、マクロを使用しています。 下記にはAAAとBBBの2つのエクセルへのコピペのみしか記述していませんが、 その下に50ファイル分のファイル名、コピー元、コピー先だけが違うマクロが並んでいます。 メンテナンスや更新に手作業で行っているので、非常に時間がかかります。 例えば、別のシートにファイル名、コピー元、コピー先の一覧を作成し、 そのシートでファイル名、コピー元、コピー先を修正し、コピペができるようになるなど、 どうにかして簡素化したいのですが、どのように実現すればいいか、教えてくださると助かります。 ---------------------------------------------------------------------- Private Sub CommandButton1_Click()   Dim wb As Workbook Application.ScreenUpdating = False Set wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\AAA.xls", UpdateLinks:=0) ThisWorkbook.Sheets("BBB").Range("A1:B1").Copy wb.Sheets("CCC").Range("A1:B1").PasteSpecial (xlPasteValues) Application.CutCopyMode = False Application.DisplayAlerts = False wb.Close (True) Application.DisplayAlerts = True Application.ScreenUpdating = True Set wb = Workbooks.Open(Filename:=ThisWorkbook.Path & "\BBB.xls", UpdateLinks:=0) ThisWorkbook.Sheets("BBB").Range("A2:B2").Copy wb.Sheets("CCC").Range("A2:B2").PasteSpecial (xlPasteValues) Application.CutCopyMode = False Application.DisplayAlerts = False wb.Close (True) Application.DisplayAlerts = True Application.ScreenUpdating = True 'アイテム名、コピー元、コピー先、だけがちがう、同じようなマクロが50ファイル分ある。 End Sub

  • エクセル マクロ 

    以下のマクロを作成し Fnameを開き、そのファイルで特定の文字列を探し、Offsetしたセルの値のコピー&ペーストをしようとしています。 しかし、ファイルは開くのですが、コピー&ペーストをいません。 どのようにすれば、実行できるのでしょうか? 変数やOffsetの使い方が違うと思うのですが、教えてください。  Dim Wbk As Workbook Dim Fname As String Dim f As Integer For f = 1 To 100 ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path Fname = Cells(f, 1).Value & ".xls" Application.ScreenUpdating = False Workbooks.Open (Fname), UpdateLinks:=0 Set Obj = Worksheets(Cells(f, 2).Value).Cells.Find(Cells(f, 3).Value) Obj.Offset(24, 0).Copy Obj.Offset(36, 0).PasteSpecial (xlPasteValues) Application.CutCopyMode = False Application.DisplayAlerts = False Workbooks(Fname).Close SaveChanges:=True Application.DisplayAlerts = True Application.ScreenUpdating = True Next f

  • Excelマクロで別のブックをVLOOKした際のエラー処理

    Excelマクロで別のブックをVLOOKした際のエラー処理 【やりたいこと】 VLOOKで検索値から別のブックの値を拾い、検索値が見当たらない場合は "該当なし"を入力して、次の検索値に移り作業を再開させたい 【 困っていること 】 1:検索値が無くても適当な値を拾ってしまう(VLOOK関数でTRUEを指定したみたいに) 2:処理終了後に「Base.Close」を指定してるが、閉じないで残ったままになる どこを見直せば良いのか、全く検討が付かず困っています。 どなたかご教授お願いします。 【その他の質問】 教えてgooにはソフトウェアのカテゴリに"MS Office"と"Office系ソフト"がありますが、 今回の質問内容だと、どちらのカテゴリが相応しいのでしょうか? ---------------------------------------------------------------------------------- Sub 検索して値を取得する() Dim Base As Workbook Dim 出力 As Worksheet Dim 範囲 As Range Dim 検索値, i As Long Dim 検索結果 As String Set Base = Workbooks.Open"C:\~\Book1.xlsm", ReadOnly:=True, UpdateLinks:=0) Do Set 範囲 = Base.Worksheets("全体").Range("A2:D20") Set 出力 = Workbooks("検索結果.xlsm").Worksheets("Sheet1") Set 検索値 = Workbooks("検索結果.xlsm").Worksheets("Sheet1").Cells(i + 2, 1) If 検索値.Value = "" Then Exit Do On Error GoTo ErrorHandler 検索結果 = Application.WorksheetFunction.VLookup(検索値, 範囲, 2, False) 出力.Cells(i + 2, 2).Value = 検索結果 i = i + 1 Loop Exit Sub ErrorHandler: 出力.Cells(i + 2, 2).Value = "該当なし" Resume Next Base.Close savechanges:=False End Sub ----------------------------------------------------------------------------------