• ベストアンサー

.xlsにワイルドカードを使うには?

あい20060925.xls  を下記のように記述してはいけないようですが、 ワイルドカードをどのように使用すればよろしいでしょうか? 以上 よろしくお願い致します。 -------------------- Sub tes1() '任意のブックの全シートを1つのブックにまとめる Workbooks("あい*.xls").Activate ActiveWorkbook.Worksheets. _ Copy after:=Workbooks("集計.xls").Sheets(Workbooks("集計.xls").Sheets.Count) End Sub --------------------

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんにちは。 次の例は、既に開いているブックの内、「あい*.xls」の名前を持つブック だけコピーします。(*はワイルドカード) For Each wb In Workbooks   If wb.Name Like "あい*.xls" Then     With Workbooks("集計.xls")       wb.Worksheets _       .Copy After:=.Sheets(.Sheets.Count)     End With   End If Next

oshietecho-dai
質問者

お礼

いや~ 「条件判断」と「比較演算子」なんですね! 更に、ダイエットもできちゃいました。 どうも有難うございました。

その他の回答 (3)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

蛇足ですが.... FileSearch なら LookIn プロパティーでルートフォルダの パスが指定できますよ(^^)

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.3

No.2です。 デスクトップを指すフォルダはWSH(Windows Scripting Hosts)のオブジェクトから取得できます。 そのように指定してみました。 (ついでにちょっとNo.1さんの真似をして書き換えてみました) Sub test1()   '任意のブックの全シートを1つのブックにまとめる   Dim i As Integer   Dim DeskTop As String   Dim WSH As Object   Dim TotalBook As Workbook   Set WSH = CreateObject("WScript.Shell")   DeskTop = WSH.SpecialFolders("Desktop") & "\"   Set TotalBook = Workbooks("集計.xls")      With Application.FileSearch     .Filename = DeskTop & "あい*.xls"     If .Execute() > 0 Then       For i = 1 To .FoundFiles.Count         Workbooks.Open Filename:=.FoundFiles(i), ReadOnly:=True         Workbooks(Workbooks.Count).Activate         With TotalBook           ActiveWorkbook.Worksheets.Copy after:=.Sheets(.Sheets.Count)         End With         Workbooks(Workbooks.Count).Close SaveChanges:=False       Next i     End If   End With End Sub

oshietecho-dai
質問者

お礼

ご詳細、誠に有難うございます。 度々と、恐れいります。

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

FileSearchオブジェクトを使えばワイルドカードを使用できます。 以下のような感じでしょうか。 Sub test1()   '任意のブックの全シートを1つのブックにまとめる   Dim i As Integer   With Application.FileSearch   .FileName = "あい*.xls"     If .Execute() > 0 Then       For i = 1 To .FoundFiles.Count         Workbooks.Open FileName:=.FoundFiles(i), ReadOnly:=True         Workbooks(Workbooks.Count).Activate         ActiveWorkbook.Worksheets. _         Copy after:=Workbooks("集計.xls").Sheets(Workbooks("集計.xls").Sheets.Count)         Workbooks(Workbooks.Count).Close SaveChanges:=False       Next i     End If   End With End Sub

oshietecho-dai
質問者

補足

ご回答どうも有難うございます。 このような応用、誠に有難うございます。奥深いですね! いや~ 私にとっては、非常~に難問でしたが、なんとかできることとなりました。 もしよろしかったらで結構ですが、一つお願い申し上げます。  フォルダがデスクトップにある場合は、どのように記述するのでしょか?

関連するQ&A

  • 「 VBA の 宣言 」 がない場合の問題点は ?

    下記例で、 「 宣言 」 なしでも、現在のところ、問題は発生してませんが、 今後、「 宣言 」 がなかった場合の 「 問題点の例 」 を教えて下さいませ。 ------------------------------- Sub ブックA*の全シートをコピー() Dim Wb As Workbook '宣言 For Each Wb In Workbooks If Wb.Name Like "ブックA*.xls" Then With Workbooks("ブックB.xls") Wb.Worksheets _ .Copy after:=.Sheets(.Sheets.Count) End With End If Next Worksheets(Worksheets.Count).Activate MsgBox ActiveSheet.Index Worksheets("Sheet1").Select End Sub

  • ほんの少し変更しただけで、マクロが正常動作しないのは?

    「てすと1」はきちんと、結果が反映されるが、 「てすと2」は、動作はするが、肝心のデータがコピーされません。 Range("B5", Range("B5").End(xlDown)) と、変更しただけです。 ただ、「てすと2」は、手動で Worksheets(i)をアクティヴにしておくと、きちんと結果が反映されます。 なぜなんでしょうか? 何卒、ご教授お願い致します。 Sub てすと1() Dim i As Integer   Windows("TEST.xls").Activate   Sheets.Add after:=Worksheets(Worksheets.Count), Count:=1 On Error Resume Next For i = 1 To Worksheets.Count - 1   Worksheets(i).Range("C:C").Copy _   Destination:=Worksheets(Worksheets.Count).Range("IV4").End(xlToLeft).Offset(0, 1).EntireColumn  Next i End Sub Sub てすと2() Dim i As Integer   Windows("TEST.xls").Activate   Sheets.Add after:=Worksheets(Worksheets.Count), Count:=1 On Error Resume Next For i = 1 To Worksheets.Count - 1   'Worksheets(i).Activate  '左記を追記すると、きちんと結果が反映される   Worksheets(i).Range("B5", Range("B5").End(xlDown)).Copy _   Destination:=Worksheets(Worksheets.Count).Range("IV4").End(xlToLeft).Offset(0, 1)  Next i End Sub

  • Book間の移動

    Excel VBA でBook2にシートを移動した後、元のBook1に自動で戻る VBAを教えたください。 Sub シートを移動する() Windows("Book1.xls").Activate Sheets(エリカ).Select Sheets(エリカ).Move After:=Workbooks("Book2").Sheets(1) このあとBook1に戻りたい! End Sub

  • このコードの修正を、何卒よろしくお願い致します。

    EXEL 2002 です。 下記コードの修正を、何卒よろしくお願い致します。 ------ Sub コピー() Dim i As Integer For i = 1 To 2 Workbooks("コピー元.xls").Activate Worksheets(i).Range("A1", Range("C65536").End(xlUp).Offset(0, 168)).Copy _ Destination:=Workbooks("コピー先.xls").Worksheets(Workbooks("コピー先.xls").Sheets(1).Range("A1")) Next i End Sub

  • VBAの構文過ち箇所指摘お願いします。

    まだまだVBA初心者です。 あるブックに2番目に開いたブックの一部を選択し、図のコピーで貼り付けるというものですが、最初の Workbooks(2).workshees(Sheets.Count).Activate でエラーが出ます。 2番目に開いたブックの一番右のシートの中の一部のセルを選択したいのですが、ご指摘おねがいします!! 以下その構文です。 Sub 2番目に開いたブックの貼り付け() On Error GoTo HandleErr Workbooks(2).workshees(Sheets.Count).Activate ActiveWindow.DisplayGridlines = False Range("A1:B2").Select Selection.CopyPicture Appearance:=xlScreen,Format:=xlPicture Workbooks(1).Activate Workbooks(1).Worksheets(Sheets.Count - 1).Range"B41").Select     ・     ・     ・     間省略 Exit Sub HandleErr: MsgBox "2番目のブックが開かれておりません!!" End Sub

  • エクセルのシートのコピーについて

    シートのコピーをVBAで行いたいのですが、エラーになってしまいます。 間違っている箇所が分からないのでご教授お願いします。 貼り付けというブックにマクロが組まれています。 ”データ”のブックにあるシート名が”貼り付けのブックのリスト”のシートに記載されています。 リストのシートに記載されているシートを貼り付けのブックにコピーしたいです。 よろしくお願いします。 Sub シートコピー() 行数 = 2 Do Until IsEmpty(Cells(行数, 3).Value) コピー元 = Workbooks("貼り付け.xls").Worksheet("リスト").Cells(行数, 3) Workbooks("データ.xls").Worksheet(コピー元).Copy After:=Workbooks("貼り付け.xls").Sheets(Workbooks("貼り付け.xls").Sheets.Count) 行数 = 行数 + 1 Loop End Sub

  • 保護されたブックのコピーについて

    現在、ボタンを押すと新規ブックが作成され、最初のブックのシートをコピーするというマクロを組みました。 しかし、元になるブックにはブックの保護とシートの保護を両方かけていて、途中でエラーになるはずなのですが、何故かそうならずに普通に新規ブックにコピーがされます。 上手くいったのですがエラーが出ると予想していたので気持ちが悪く、また個人だけで使うわけじゃないので原因を知っておきたいです。 どなたかよろしくお願いします。 Private Sub makeBookButton_Click() Dim myWorkBook As String Dim newWorkBook As String Dim mySheet As Worksheet Application.ScreenUpdating = False On Error GoTo ErrTrap Application.DisplayAlerts = False myWorkBook = ThisWorkbook.Name Workbooks.Add ActiveWorkbook.SaveAs Filename:=NEWBOOK newWorkBook = ActiveWorkbook.Name Workbooks(myWorkBook).Activate For Each mySheet In ThisWorkbook.Worksheets Workbooks(myWorkBook).Sheets(mySheet.Name).copy after:=Workbooks(newWorkBook).Sheets(Workbooks(newWorkBook).Sheets.Count) Next Workbooks(NEWBOOK).Sheets("Sheet1").Delete Workbooks(NEWBOOK).Sheets("Sheet2").Delete Workbooks(NEWBOOK).Sheets("Sheet3").Delete Application.DisplayAlerts = True Application.ScreenUpdating = True Exit Sub ErrTrap: Call MsgBox("ブック作成時にエラーが発生しました。", vbCritical) End Sub

  • WorkbookのCopyについて

    Workbookのコピーについて教えてください。 下記のマクロにセル内の数式もコピーしたいのですが、出来ないで困ってます。 値と数式をコピーする、マクロを入れると指定した範囲にコピーされません。 Sub CopyWorkbookToWorkbook() Windows("sheet2.xls").Activate Workbooks.Open Filename:="D:\book1.xls" Workbooks("book1.xls").Worksheets("sheet1").Range("A6:k1000").Copy Workbooks("book2.xls").Worksheets("sheet1").Range("A6").PasteSpecial    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks :=False,Transpose:=False          Workbooks("book1.xls").Close End Sub よろしくお願いします。

  • マクロを教えてください

    同じフォルダ内にあるXlsブックのあるSheetのデータを他のBookにコピーして貼り付けて貼り付けた側のBookで加工したいのですがうまくマクロが組めません。 Bookを共有で使っているので困っています。 Sub ワードアート1_Click ' ActiveWindow.ScrollWorkbookTabs sition:=xlLast Workbooks.Open ("販売管理表み.xls") Sheets("在庫一覧").Select Cells.Select Range("A1").Activate Selection.Copy Windows("完成在庫.xls").Activate Sheets("完成在庫一覧").Select Range("A1").Select ActiveSheet.Paste End Sub って書いてみましたが、Workbooks…のところでエラーになってしまいました。(TOT)初心者ですみません。教えてください。

  • VBA 別ブックにワークシートをコピーする

    Sub 別ブックのシートコピー() Dim SA_MV1 As String Dim MV2 As String Worksheets("SA_MV1").Copy After:=Workbooks("Schedule.xls").Sheets(MV2) End Sub 上記を実行すると、実行時エラー'9' インデックスが有効範囲にありません。 というエラーが出ます。 何がいけないのでしょうか。どなたかアドバイスいただけますと助かります。 よろしくお願いします。

専門家に質問してみよう