• ベストアンサー

マクロ 別のブックを指定。

エクセルマクロで特定の文字を含んだファイルを指定したいのですが、 ファイル名がその都度、book1,book2,book3,のように変わります。 Range("a1").Select Windows("Book10").Activate Range("a10").Select End Sub このような記述だと、book10にしか指定できず、bookを含むファイルを指定したいのですが どのようにしたらよろしいのでしょうか。 開いているbookを含むファイルは1ファイルのみです。                宜しくお願いいたします。

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

>開いているbookを含むファイルは1ファイルのみです。 という条件なのでしたら、 Sub QNo9106515_マクロ_別のブックを指定() Dim wb As Workbook For Each wb In Workbooks If wb.Name Like "Book*" Then wb.Activate Exit For End If Next wb Range("A10").Select End Sub 或いは、 Sub QNo9106515_マクロ_別のブックを指定2() Dim wb As Workbook, myBookName As String For Each wb In Workbooks myBookName = wb.Name If myBookName Like "Book*" Then Exit For Next wb Windows(myBookName).Activate Range("A10").Select End Sub

fukuzawakamon
質問者

お礼

kagakusuki様 ご回答ありがとうございます。 思うとおりにできました。 たいへん助かりました。

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

単純に調べて条件に合致するブックを対象にするのでは。 sub macro1()  dim w as workbook  for each w in workbooks   if w.name like "*Book*.*" then    w.windows(1).activate    w.range("A10").select   end if  next end sub #幾つか突っ込みどころ  マクロを使ってファイルとか操作するときは,「必ず」拡張子まで含めます。  「開いてるブックやファイル」はアドインとか個人用マクロブックとか,1つ+1つとは限りません。 >特定の文字を含んだファイルを指定したい  マクロの書きぶりによってはbook1とBook1は別物です。

fukuzawakamon
質問者

お礼

keithin様 ご回答ありがとうございます。

  • Prome_Lin
  • ベストアンサー率42% (201/470)
回答No.2

私、普段は「VBScript」でプログラムを書いていますので、その発想からの回答になりますが、「VBA」で動作を確認しております。 Sub Test() Dim o, p, s As Object Dim n Set s = CreateObject("Scripting.FileSystemObject") Set p = s.GetFolder(".") For Each n In p.Files If LCase(s.GetExtensionName(n.Name)) = "xlsx" And InStr(n.Name, "Book") > 0 Then Set o = Workbooks.Open(p & "\" & n.Name) MsgBox ("Yes") o.Close End If Next End Sub Set s = CreateObject("Scripting.FileSystemObject") は、フォルダなどを扱えるようにしています。 VBAでは、p = ActibeWorkbook.Pathで、 自分自身がいるフォルダを文字列として「p」に格納できますが、 「For Each n In p.Files」の「p」には使えません。 この「p」は文字列ではなく、オブジェクトです。 「For Each n In p.Files」は、「p」フォルダ内のファイルを順番に調べてゆきます。 「LCase()」は文字をすべて小文字にし、「GetExtensionName」は拡張子を調べています。 「InStr」で順番に調べているファイル名「n.Name」の中に「Book」が含まれていれば、値が「1」以上になります。 拡張子が「xlsx」で、ファイル名に「Book」が含まれていれば、そのファイルを開いています。

fukuzawakamon
質問者

お礼

Prome_Lin様 ご回答ありがとうございます。 私には、ちよっと難しく感じましたが時間をかけて理解できるよう勉強します。

関連するQ&A

  • 【マクロ】指定したファイルを開いてマクロを実行

    マクロ初心者です。よろしくお願いします。 <質問> コマンドボタンをクリックしたら、任意のエクセルファイルを指定して開き、その開いたファイル(白紙状態のファイル)にマクロを実行させる方法を探してます。 <作成マクロ> Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub <マクロ説明> --コマンドボタンをクリックして指定したエクセルファイルを開く-- Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate --開いたエクセルファイル(白紙状態)のセルA1に「テスト」を入力した後、コピーしセルB2に貼り付ける--   ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub コマンドボタンをクリック ↓ 任意のエクセルファイルを指定して開く ↓ 開いたファイル(白紙状態のファイル)のセルA1に「テスト」と書き込み セルA1の「テスト」をコピーしセルB1に貼り付ける このマクロを実行させるにはどこを改善すれば良いでしょうか? ご助言いただけると助かります。 よろしくお願い致します。

  • 【マクロ】指定したファイルを開いてマクロを実行

    マクロ初心者です。よろしくお願いします。 <質問> コマンドボタンをクリックしたら、任意のエクセルファイルを指定して開き、その開いたファイル(白紙状態のファイル)にマクロを実行させる方法を探してます。 <作成マクロ> Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub <マクロ説明> --コマンドボタンをクリックして指定したエクセルファイルを開く-- Private Sub CommandButton1_Click() Dim OpenFileName As String OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls") If OpenFileName <> "False" Then Workbooks.Open OpenFileName End If Workbooks(Dir(OpenFileName)).Activate --開いたエクセルファイル(白紙状態)のセルA1に「テスト」を入力した後、コピーしセルB2に貼り付ける--   ActiveCell.FormulaR1C1 = "テスト" Range("A1").Select Selection.Copy Range("B1").Select ActiveSheet.Paste End Sub コマンドボタンをクリック ↓ 任意のエクセルファイルを指定して開く ↓ 開いたファイル(白紙状態のファイル)のセルA1に「テスト」と書き込み セルA1の「テスト」をコピーしセルB1に貼り付ける このマクロを実行させるにはどこを改善すれば良いでしょうか? ご助言いただけると助かります。 よろしくお願い致します。

  • excel2003マクロの2007での使い方

    OS:windowsXP excel2003で作成したマクロがexcel2007で動かなく困っております。 マクロでやりたいことは 1つ目のブック(以降A)の内容を、2つ目(以降B)のブックに行列を反転しコピー です。Aのブックの列数は不変ですが行数、ファイル名は毎回変化します。 excel2003では動いていたのですが2007ではコピー元がBのブックになってしまいます。 実際のマクロは Workbooks(1).Activate Range("A1").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.Copy Windows("B.xls").Activate Sheets("sheet2").Select Range("B1").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True です。 よろしくお願いいたします。

  • エクセル マクロ データがある範囲を判定

    エクセル2010を使っています。 以下の様なマクロでコピーペーストを行っています。 Sub ボタン5_Click() Range("DM1:DO78952").Select Selection.Copy Windows("book2.xlsm").Activate Range("A1").Select ActiveSheet.Paste Windows("book1.xlsm").Activate End Sub このマクロでは範囲が指定されていますが、実際のデータは行単位で増減しますので、これを DM~DO列のデータがある行を判定し、全て選択しコピーするにはどうすれば良いでしょうか? (増減は必ず行単位、DM列にデータがあれば、必ずDO列まで有ります。) 詳しい方、よろしくお願い致します。

  • 指定した時間に実行するマクロ

    Sub データー削除() Sheets("Sheet2").Select Rows("3:17").Select Selection.ClearContents Range("A1").Select ActiveWorkbook.Save ActiveWorkbook.Close End Sub データーAというエクセルBOOKに 上記の単純なマクロが組み込まれています このBOOKは普段は常に閉じている状態です このBOOKがAM0:00に自動で開いて上記のマクロの実行できるように するにはどの様にしたらいいでしょうか? on timeとかいう方法を使うらしいでんすが使い方がよくわかりません

  • マクロで別のブックに転記するやり方

    エクセルのマクロで勤務表というブックのA5からA10までの"出勤"という文字を"○"に置き換えて 別の集計表というブックのA6からA36に転記する場合どのような書き方になりますか? 例えば置き換えは Sub test() With Range("A5:A10") .Replace what:="出勤", replacement:="○", lookat:=xlPart End With End Sub このような感じになると思いますが、他にやり方があればよろしくお願い致します。

  • Bookの更新マクロ

    現在、D:¥たかし\撤回18年.xlsで10シ-トほどがひとつになったBook(撤回18年)でデ-タの入力作業をしているのですが、年度が変わるために初期画面上に更新マクロボタンを作り、デ-タが入力されたシ-ト(入力シ-ト)内容をクリアして、同じフォルダ(たかし)内に別のBook名(撤回19年)が出来るマクロを考えているのですが、うまくいきません。 Sub 更新() ' ' デ-タ入力内容を消去 Sheets("入力シ-ト").Select  Range("B3:T65536").Select Selection.ClearContents   Worksheets("初期画面").Activate  Range("A1").Select ’更新後の新しいブック(ファイル)の作成  Workbooks.Add    ActiveWorkbook.SaveAs Filename:="D:\たかし\撤回19年.xls",    FileFormat:= _ xlNormal, Password:="", WriteResPassword:="",         ReadOnlyRecommended:=False _ , CreateBackup:=False End Sub

  • マクロで5個のBOOKのデータをBOOK1に転記

    エクセルマクロで対話型でBOOK2~6の5個のデータを BOOK1のシート1に順番で転記したいです。 BOOK2~BOOK6は作業者にファイルを選択させたいです。 BOOK2~BOOK6は作業の都度行数がBOOKごとに変わります。 (500~5,000行でばらつきます) 流れとしては、 1.BOOK1を開いてマクロを軌道 2.エクセルのファイルを開くウィンドーが出る 3.ファイルを選択させる(例:マイネットワーク内のBOOK2を選択) 4.ウィンドーの開くをクリックする 5.転記1回目   指定したファイルが開いてデータが   BOOK1のシート1に転記される   この1回目は1行目からデータがある最終行まで。   その後BOOK2は閉じられる 6.メッセージボックスで「転記完了」と表示 7.メッセージボックスの「OK」をクリックすると   エクセルのファイルを開くウィンドーが出る 8.ファイルを選択させる(例:マイネットワーク内のBOOK3を選択) 9.ウィンドーの開くをクリックする 10.転記2回目   指定したファイルが開いてデータの中の2行目~最終行までを   BOOK1のシート1の最終行の次の行から転記を行う。   (NO.5のBOOK2が1,000行の場合1,001行目から    BOOK3のデータ2行目以降が転記される)   その後BOOK3は閉じられる 11.この作業を計5回行う   (転記3~5回目も転記するデータは2行目~最終行) 13.メッセージボックスで「5個のBOOKの転記が終了」と表示 14.メッセージボックスの「OK」をクリックすると   Call 編集   でSub 編集 というプロシージャーが起動する Sub 編集は出来上がってます。 (BOOK1のシート1を編集します。) NO.1~NO.14のマクロ記述を教えてください。 自分で作成した記述では全然駄目でした。 よろしくお願いします。

  • 新しいBookの作成マクロ

    現在使用しているBOOKの一部をクリアして、同じフォルダ内にBOOKの名前だけ変えて年度が変わっても使えるように更新マクロを作成したのですが下のエラ-がでます。 実行時エラ-’70’書き込みできません BOOKを保護している訳でもありませんし、読み込み専用にもなっていません。ご教授ください。 Sub 更新() ' 入力内容を消去 Sheets("シ-ト").Select Range("B3:T65536").Select Selection.ClearContents  ’・・・・・・・・・・・・・・・・   FFF:フォルダF11が保存されているフォルダ名   F11:ブックBBBが保存されているフォルダ名   BBB:現在使用しているブック 名   B22:新しく使う(変更後の)ブック名  ’・・・・・・・・・・・・・・・・・・・・・  ’BOOK1(ブック名BBB)を複写してBOOK2(ブック名B22)をつくる   FileCopy "D:\FFF\F11\BBB.xls", "D:¥FFF\F11\B22.xls"  ’BOOK1の名前をBOOK2へ変更    Name "D:\FFF\F11\BBB.xls" As "D:FFF\F11\B22.xls" 'メニュー画面を表示    Worksheets("初期画面").Activate    Range("A1").Select End Sub 

  • エクセルで置換リストを別ブックにおいたマクロを作りたい

    以下は同一ブック内の「置換」のワークシートに A列に検索文字 B列に置換文字 を書き、置換するマクロなのですが、これですと同一ブック内でしか作業できません。 このリストを別ファイル(例えば"Book2.xls"の"sheet1")に書き、別のファイル(例えば"Book1.xls")で実行するにはどうしたらよいでしょうか。 Sub 置換() For i = 1 To Worksheets("置換").Range("A65536").End(xlUp).Row Cells.Replace What:=Worksheets("置換").Range("A" & i).Value, _ Replacement:=Worksheets("置換").Range("B" & i).Value, _ LookAt:=xlPart, SearchOrder:=xlByColumns Next End Sub

専門家に質問してみよう