• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:シート名と同じブックを開くVBA)

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

このQ&Aのポイント
  • VBAを使用して、特定のフォルダ内にあるシート名と同じ名前を持つブックを開く方法について質問です。
  • 現在、「新しいフォルダ」というフォルダ内の「りんご」という名前のブックを開くことに成功しています。しかし、さらに応用して、アクティブワークブックのシート名と同じ名前を持つブックも開きたいです。
  • シート名は「りんご」だけでなく、「みかん」やその他いくつかの名前もあります。VBA初心者なので、なるべくコードを変更せずに実装する方法を教えてください。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1625/2467)
回答No.4

> 上記のようなパターンになる可能性は低いような気もしますが。 と思ったのですが、意外とありえそうなので 現在開いているかどうかを調べて開いていれば再度Dirで探す場合の一例です。 Dim flg As Boolean With ActiveWorkbook flg = False For i = 1 To .Sheets.Count 三色団子 = Dir(お茶 & "*" & .Sheets(i).Name & "*.xlsx") Do While 三色団子 <> "" For j = 1 To Workbooks.Count If Workbooks(j).Name = 三色団子 Then flg = True Exit For End If Next j If flg = True Then 三色団子 = Dir() Else Workbooks.Open Filename:=お茶 & 三色団子 Exit Do End If flg = False Loop Next i End With 開いてるファイルを調べずにDictionaryを使って開いたファイルの重複しない一覧を作って調べるという方法もあります。 Dictionaryの使い方は以下のサイトを参考にしてください。 【エクセルVBA】リスト処理に便利!Dictionaryオブジェクトをコードで使うための準備 https://tonari-it.com/excel-vba-dictionary-object/

levitooicompass
質問者

お礼

複数のパターンをご提示いただいてありがとうございます!こちら見たことがないコードもあり難解ですが、頑張って調べてみようと思います!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • kkkkkm
  • ベストアンサー率65% (1625/2467)
回答No.3

VBAを開始した時のアクティブワークブック ではなくて With ActiveWorkbook が実行されるときのアクティブワークブックでした。 また、ファイル名が一部重複する場合、あるパターンで同じファイルが選ばれます。 シート名が以下の順で並んでいて ab a ファイルが以下のようにあった場合 ab.xlsx abc.xlsx ab.xlsxしか開かないので、現在開いているかどうかを調べて開いていれば再度Dirで探す必要があります。上記のようなパターンになる可能性は低いような気もしますが。

levitooicompass
質問者

お礼

Dir関数で拡張子が3桁までしか見れないというのは聞いたことがありますが、ファイル名まで重複していると同じものとみなされるとは知らなかったです!ご教示いただいてありがとうございます!

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1625/2467)
回答No.2

> SheetはActivesheetだけではなく、色々な名前のSheetがあるため、ActiveWorkbookの中のすべてのシート VBAを開始した時のアクティブワークブックのシート名を含むブックがあれば開く(シート数分)場合です。 SheetsとSheets(i)の前にドットがあります。 With ActiveWorkbook For i = 1 To .Sheets.Count 三色団子 = Dir(お茶 & "*" & .Sheets(i).Name & "*.xlsx") If 三色団子 <> "" Then Workbooks.Open Filename:=お茶 & 三色団子 End If Next End With

levitooicompass
質問者

お礼

丁寧にご回答いただいてありがとうございます!ご教示いただいた方法で入力したところ、うまくいきました!(^_^)また、当初うまくいかなかった原因がワイルドカードが漏れていたことによることもわかりました・・・!本当にありがとうございます!

全文を見る
すると、全ての回答が全文表示されます。
  • kkkkkm
  • ベストアンサー率65% (1625/2467)
回答No.1

アクティブワークブックのシート名は ActiveSheet.Name で取得できます。 同じ名前を含むは Like "*" & ActiveSheet.Name & "*" の結果で判断できます。

levitooicompass
質問者

補足

早速ご回答いただきありがとうございます!SheetはActivesheetだけではなく、色々な名前のSheetがあるため、ActiveWorkbookの中のすべてのシートにおいて、名前の一致するブックがあるかを調べたいと思っています!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ブックを開いて閉じるVBA

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

  • VBAでブック名の拡張子を除去してシートにコピー

    VBA初心者でコード作成で困っております。 下記の通りコードを組みましたが、シート名をブック名に変更して 保存したいのですが、このコードですと拡張子までついてしまいます。 拡張子を除去するためにはどうすればよいでしょうか? アドバイス宜しくお願い致します。 Sub test() 'シート名の変更 Dim MyPath As String Dim MyFile As String Dim Wb As Workbook MyPath = "C:\TEST\" MyFile = Dir(MyPath & "*.xlsx") Do While MyFile <> "" Set Wb = Workbooks.Open(MyPath & MyFile) ActiveSheet.Name = ActiveWorkbook.Name Application.DisplayAlerts = False Wb.Save Application.DisplayAlerts = True Wb.Close (False) MyFile = Dir() Loop End Sub

  • VBAで複数シートをまとめたい

    VBAを作るのは今回が初めてで行き詰ってしまいました。 フォルダ内の「.xlsx」4つのファイルのSheet1(4つともSheet1です) を統合.xLsmの1月シートのb2~値でコーピー貼り付けを行いたいのですが、 下記のものでやっていけば出来のかなと思ってますが、ご教授お願い致します。 Private Sub CommandButton1_Click() Dim sFile As String Dim sWB As Workbook, dWB As Workbook Dim dSheetCount As Long Dim i As Long Dim c As Long Dim ws As Worksheet Debug.Print (ws.Index) Const SOURCE_DIR As String = "C:\Users\KWEUSER\Desktop\data\" Application.ScreenUpdating = False '指定したフォルダ内にあるブックのファイル名を取得 For c = 1 To 4 sFile = Dir(SOURCE_DIR & "*.xlsx") 'フォルダ内にブックがなければ終了 If sFile = "" Then Exit Sub '集約用ブックを作成 Set dWB = Workbooks.Add '集約用ブック作成時のシート数を取得 dSheetCount = dWB.Worksheets.Count Do 'コピー元のブックを開く Set sWB = Workbooks.Open(Filename:=SOURCE_DIR & sFile) 'コピー元の c (1,2,3,4,5)シートを集約用ブックにコピー sWB.Worksheets(c).Copy After:=dWB.Worksheets(dSheetCount) 'シート名をファイル名に ActiveSheet.Name = sFile 'コピー元ファイルを閉じる sWB.Close '次のブックのファイル名を取得 sFile = Dir() Loop While sFile <> "" '集約用ブック作成時にあったシートを削除 Application.DisplayAlerts = False For i = dSheetCount To 1 Step -1 dWB.Worksheets(i).Delete Next i Application.DisplayAlerts = True '集約用ブックを保存して閉じる dWB.SaveAs Filename:="C:\Users\KWEUSER\Desktop\data\" & c & ".xlsx" dWB.Close Next Application.ScreenUpdating = False End Sub

  • ブックCloseでVBAが続かない

    エクセル2002を使用しています ブック(A)をコピーして名前(B)をつけて別ブックで保存しました ブック(A)を呼び出し後、ブック(B)を閉じてブック(A)のVBAを継続したいのですが 継続しません 作成したモジュールは以下です   Application.DisplayAlerts = False   '【不要なシートを削除する】 Sheets(Array("注文書入手差異表", "入手予定履歴", "main", "営C")).Select ActiveWindow.SelectedSheets.Delete   '【ThisWorkbook.Pathの『注文書確認フォルダ』の中に、名前をつけて別ブックで保存する   '   …ユーザーフォームを使用するのでマクロごと保存】 Dim myFolder As String Dim Filename As String myFolder = ThisWorkbook.Path & "\注文書確認フォルダ" Filename = Format(Date, "yyyymmdd") & "注文書入手予定表" If Dir$(myFolder, vbDirectory) = "" Then MkDir myFolder End If ActiveWorkbook.SaveAs Filename:= _ myFolder & "\" & Filename Application.DisplayAlerts = True '【保存した別ブック名を再取得】 Dim myName0 As String myName0 = ThisWorkbook.Name   '【コピー元のファイルを開く】 Dim myPath As String myPath = Application.Substitute(ThisWorkbook.Path, "\注文書確認フォルダ", "") Workbooks.Open (myPath & "\" & "注文書入手予定表")   MsgBox "【注文書確認フォルダ】の中に別ブックが作成されました"     '【保存した別ブックを閉じる】 Workbooks(myName0).Activate Windows(myName0).Activate ActiveWorkbook.Close '******下のマクロが続かない***************** '====================== Call Macro6 '======================   VBA ステップインで原因を探ろうとしたのでですが   「中断モードでは入力できません」のメッセージがでて   デバッグができません   八方ふさがりの状態です。助けていただけませんか。

  • vba ブック間でシート名のコピーをするには

    始めまして、よろしくお願いします。 excel vba 初心者のものです。 2つのブックがあり同時に開いている状態です。1つのブックはデータがあります。 もう1つは空のブックです。 データのあるブックのシートには、 シート1のシート名は「8月1日」 シート2のシート名は「8月2日」 シート3のシート名は「8月4日」 シート4のシート名は「8月5日」 シート5のシート名は「Sheet1」 やりたいこと データ、シート名があるブックから、 空ブックのシートにシート名をコピーしてきてセルに貼り付けたいです。 シートに名前を付けてるシート数は不規則なので「Sheet1」まで来たら終了したいです。 どうぞご教授の程よろしくお願い申し上げます。

  • Excel 複数ブックを1つのシートにまとめる

    フォルダ内のワークブック約2,000個のデータを1つのシートにまとめたいのですが、VBAの勉強を始めたものの時間ばかりかかってなかなかうまくいかないので、ご指導をお願いいたします。 コピー対象の各ブック内のデータは以下の通りです ・シートは一番左端のもの1つ ・データの行数はバラバラで終端行の検出基準は「J列」 ・データの列は12列で固定 上記のようなデータをまとめ用の新規ブックを作って、1つのシートに全ブックのデータを加算してコピーをしたいです。 コピー対象の各ブックのシート名などは要りません。 ご教示よろしくお願いします。

  • 別ブックへシートコピーでシート名が違う名

    別ブックへシートコピーでシート名が違う名前でコピーされてしまします。 環境 : エクセル2010 windows7 home (1)WEBページからコピーしてきたねたを、貼り付けCSVにして保存したいのです。 (2)ユーザーフォームからフォルダに名前を付けてデスクトップにフォルダを新規作成します。 (3)で、CSVにしたファイルを上記新規フォルダ内に保存したいのです。 問題点: 新規ブックをAddしているのですが、シート名も元のブックからコピーできているはずが、指定している保存先の名前になってしまいます。(変換後CSVファイル)になってしまう。 本当は(変換)となるはずなんですが・・・その時、Beforeでシート1の左にくるはずが、なぜか上記間違った名前のシートのみになってしまいます。 あと、これをパスを替えてほかのXPのPCで走らせると、(1)でコピペしたねたが消えてしまいます。 (保存はできますがねたがないと・・・) 上記問題点を解決したいのでどなたかどうぞご教授ください。 構文 Private Sub CommandButton1_Click() Dim a As Object Dim b As String Set a = CreateObject("Scripting.FileSystemObject") b = "C:\Users\Owner\Desktop\" & Me.TextBox1.Value 'フォルダ作成 If MsgBox("入力内容に間違いはありませんか?", vbYesNo) = vbYes Then a.Createfolder b Else Me.TextBox1.SetFocus Exit Sub End If 'フォルダ作成 その中に CSV保存 Dim ws As String Dim oWbk As Workbook Set oWbk = Workbooks.Add ws = "変換" Workbooks("suzuki csv 変換.xlsm").Worksheets(ws).Copy Before:=oWbk.Worksheets("Sheet1") oWbk.SaveAs Filename:="C:\Users\Owner\Desktop\" & Me.TextBox1.Value & "\変換後CSVファイル.csv", FileFormat:=xlCSV, CreateBackup:=False oWbk.Close SaveChanges:=True Unload Me Workbooks("suzuki csv 変換.xlsm").Activate Columns("A:H").Select Selection.ClearContents Rows("1:3").Select Selection.Delete Shift:=xlUp Range("A1").Select Dim w As Workbook '全ての Book を保存する For Each w In Workbooks w.Save Next 'Excel を終了する Application.Quit 'Book を閉じる ThisWorkbook.Close False End Sub 作業途中で構文が荒れていますが、ご容赦ください。

  • ブック間のシート移動

    EXCEL VBA初心者です。 ブックAのシートAをブックBのシートの一番左側に移動させようと思います。 以下を実行するとエラーが出ますがなぜでしょうか? エラーの原因と対策方法を教えて下さい。 Sub シート移動() Worksheets("シートA").Move _ Before:=Workbooks("ブックB.xls").Sheets(1) End Sub ブックAはブック名が毎回変わります。 ブックAはメール添付を開いたブックです。 ブックAはシートがシートAしかありません。 シートAは名前が変わりません。 マクロコードはブックBあるいは個人用マクロブックに置きます。 よろしくお願いします。

  • Excel VBA 非表示の別ブックへシートコピー

    Excel2010のVBAで、別のExcelブックを非表示で開いて、 シートをコピーすると、 「実行時エラー'1004':WorksheetクラスのCopyメソッドが失敗しました。」 というエラーが出て、正しくシートをコピーすることができません。 (1)のように自分のブックへはシートをコピーすることはできるのですが、 (2)のように別のExcelブック上でシートをコピーする場合と (3)のように別のExcelブック上にシートをコピーする場合の いずれも同様のエラーになります。 どのように記述すれば(2)と(3)でもコピーすることができるのでしょうか。 ------------------------------------------------------------- Sub test()  Dim newEx As Excel.Workbook  Dim newFile As String  newFile = ThisWorkbook.Path & "\New_Book.xlsx"  Set newEx = Workbooks.Open(newFile, UpdateLinks:=0)  Application.Windows("New_Book.xlsx").Visible = False  '(1)New_BookのSheet3を自分のブックにコピーする (正常)  newEx.Worksheets("Sheet3").Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)  '(2)New_BookのSheet3をNew_Bookにコピーする (エラー)  newEx.Worksheets("Sheet3").Copy after:=newEx.Sheets(newEx.Sheets.Count)  '(3)自分のブックのSheet3をNew_Bookにコピーする (エラー)  ThisWorkbook.Worksheets("Sheet3").Copy after:=newEx.Sheets(newEx.Sheets.Count)  Application.Windows("New_Book.xlsx").Visible = True  Application.DisplayAlerts = False  newEx.Save  newEx.Close  Application.DisplayAlerts = True  Set newEx = Nothing End Sub -------------------------------------------------------------

  • 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)で指定できないので困っています。

専門家に質問してみよう