Excel VBAのlike演算子を利用したファイル名の切り替えについて

このQ&Aのポイント
  • Excel VBAを使用して、ファイル名が流動的な状況でアクティブブックの切り替えを行いたい場合、like演算子を使用することができます。
  • しかし、like演算子を使用してファイルの切り替えを行う際に、「実行時エラー'9': インデックスが有効範囲にありません。」というエラーメッセージが表示されることがあります。
  • このエラーを解決するためには、VBAコード内のファイル名の指定方法を見直す必要があります。
回答を見る
  • ベストアンサー

excelVBAインデックスが有効範囲にありません

excel2000を利用しています。 like演算子についてアドバイスお願いいたします。 「vw201109241638[1].xls」というファイルがあります。 こういったexcelのファイル名が、ころころと名前を変えて現れるのですが、ファイル名が流動的なために、VBAでファイル名を指定してアクティブブックの切り替え等が出来ません。 そこで、下記のように、like演算子を用いてファイルの切り替え等を行おうとした場合、 「実行時エラー'9': インデックスが有効範囲にありません。」と怒られてしまいます。 どういった修正をすればいいでしょうか? Sub keiryou_select() Workbooks("vW20*.xls").Sheets(1).Activate End Sub

  • puyopa
  • お礼率87% (459/525)

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

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

Like演算子を使ってみると,こんな具合になります。 sub macro1()  dim w as workbook  for each w in workbooks  if strconv(w.name,vblowercase) like "vw20*.xls" then   w.worksheets(1).activate   exit sub  end if  next  msgbox "not found" end sub #補足 like演算子はアルファベットの大文字と小文字を区別するので,念のためstrconvを使います。

puyopa
質問者

お礼

回答ありがとうございます。 私の説明不足な依頼内容に対して +α して回答いただけてとても助かります。 ありがとうございました。

その他の回答 (2)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

既にブックが開いているなら、こういう事だと思います。 条件を二つ満足するモノがある事は無いのか等、当方には詳細は分かりませんのでアレンジなさってください。 ご参考まで。 Sub test() Dim wbk As Workbook For Each wbk In Workbooks If wbk.Name Like "vw20*" Then wbk.Activate End If Next wbk End Sub

puyopa
質問者

お礼

回答ありがとうございます。 まさしく注文どおりの正確な回答でした。

  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.1

>Workbooks("vW20*.xls").Sheets(1).Activate Like演算子とか使われてませんけど。Like演算子を使わなくても、どこでも "*" が機能すると思ったら大間違いです。"vW20*.xls" という名前のファイルがないので、そのSheetsのサイズも0で、それを(1)で参照しているから、「インデックスが有効範囲にありません。」ですね。 そういうことをしたいのなら、こんな感じで。 Dim FSO As Object, File As Variant Set FSO = CreateObject("Scripting.FileSystemObject") For Each File In FSO.GetFolder(".").Files If <File.Nameが条件を満たす> Then <処理> End If Next

puyopa
質問者

お礼

回答ありがとうございます。 FSOを使ってみたいのですが、まだ使いこなせていません。 勉強して、お教えいただいたコードを是非活用させていただきたいと思います。

関連するQ&A

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

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

  • インデックスが有効範囲にありませんと出てしまう

    VBAで"実行時エラー9 インデックスが有効範囲にありません"と出てしまいます、解決方法を教えていただけないでしょうか? 以下のVBAで上記のエラーが出てしまいます。ちなみに私はVBA初心者です。 VBAの内容としてはとあるブックのシートを丸ごと、そのシートを必要とするブックのシートに貼り付けるというものです。 Sub コピー() Dim ファイル名, 基本ファイル名 Dim i, j As String i = ActiveWorkbook.Name j = ActiveSheet.Name Application.DisplayAlerts = False 基本ファイル名 = Sheets("データリスト").Range("B14").Value →ここでエラー発生 Workbooks.Open 基本ファイル名 If Err.Number > 0 Then MsgBox "『○○』を開けませんでした" & vbCrLf & _ "ファイル名が間違っているか、存在しないか、拡張子が違います" & vbCrLf & vbCrLf & _フォルダ & " に " & vbCrLf & _ 基本ファイル名 & "ファイルがありません" Exit Sub End If Worksheets("リスト").Range("A1:N400").Copy Workbooks(i).Worksheets("リスト").Range("A1:N400").PasteSpecial Workbooks(基本ファイル名).Close SaveChanges:=False →ここでもエラーが出てしまうことがある Sheets(j).Select Application.DisplayAlerts = True MsgBox ("リストを取り込みました") End Sub

  • Excel VBA インデックスが有効範囲にない

      よろしくお願いします。 Excel VBA 初心のものです。 プログラムを作ってみたのですが、 「インデックスが有効範囲にありません」となってその先に進めません。 ソースですが ------------------------------------------------------ Private Sub CommandButton1_Click() Dim buf As String, cnt As Long Dim TMP As Variant Const Path As String = "D:\Excel\sample\" buf = Dir(Path & "*.xls*") Set TMP = Workbooks(buf).Sheets("testdata").Range("A1").Value Do While buf <> "" cnt = cnt + 1 Cells(cnt, 1) = buf Cells(cnt, 2) = FileDateTime(Path & buf) Cells(cnt, 3) = TMP buf = Dir() Loop End Sub ------------------------------------------------------ エラーになる箇所は Set TMP = Workbooks(buf).Sheets("testdata").Range("A1").Value のところです。 このプログラムで何をしたいかと言いますと DドライブのExcel>sample というフォルダの中にある ・すべてのエクセルブック名(ファイル数は3個)と、 ・そのブックの作成日時と、 ・testdataというシート(各ブックに必ずあるシートです)のセルA1に入っている値 を実行ファイルのSheet1に書き出す、 というものです。 プログラムの実行ファイルはExcelフォルダ直下にあります。 どこが問題でエラーになっているのか分かりません。 ご指南よろしくお願いします。   

  • エクセルVBA インデックスが有効範囲にありません

    エクセルVBA初心者です。 共有サーバーに置いたエクセルファイルを開いたときに、同フォルダにある、別のデータ保存用エクセルファイルのデータをコピーしてくるようにしました。 しかし、「インデックスが有効範囲にありません」のエラーになります。 ChDir "\\共有サーバー\Aフォルダ\" Workbooks.Open Filename:= _ "\\共有サーバー\Aフォルダ\データ保存.xls" Windows("データ保存.xls").Activate Sheets("データ貼り付け").Select ここでエラーになります→ Windows("データ保存.xls").Activate エラー時、データ保存.xlsは開いた状態(Activate)になっており、開いた後に見つからない状態?になっているのでしょうか。 ちなみに Windows("データ保存.xls").Activate をスルーさせると、次のSheets("データ貼り付け").Select で同様のエラーになります(当たり前かな)。 試しに、記録マクロで動作を記録してコードを確認しましたが、 Windows("データ保存.xls").Activate となっており、違いがありません。 原因を教えていただければありがたいです。 よろしくお願いします。

  • EXCEL VBA のブック操作

    完全に自己流でEXCEL2000のVBAを作成しています。 とても単純な操作なのですが、思い通り動きません。 どうかご教授ください。 よろしくお願いします。 Main ファイルとSubファイルがあります。【パス名とファイル名は指定済み】 ブック内のシートの構成は全く同じになっています。 (MainファイルのVBAを実行後Subファイルが作成されます ファイル名は作成日を入れて保存していっています。) それで以前作成したデータを利用するために、 MainファイルのVBAを実行中にSubファイルを開き参照したいシートを Mainファイルにコピーし、Subファイルを閉じたいのですが フォーカスがうまくいかず、Mainファイルが閉じてしまいます。 何がおかしいのでしょうか? Workbooks.Open Filename:=SubFile Sheets("Sheet1").Select Worksheets("Sheet1").Name = "ASheet" Sheets("ASheet").Copy After:=Workbooks(MainFile).Sheets(TotalSheet) Workbooks(SubFile).Activate ActiveWorkbook.Close Workbooks(MainFile).Activate Sheets(TsumSheet).Select オープンしてコピーまではできているのですが・・・

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

    同じフォルダ内にある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)初心者ですみません。教えてください。

  • Book間の移動

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

  • シートを別のブックに移動させたいのですが、

    シートを別のブックに移動させたいのですが、 マクロで作成するとこうなりました。 Workbooks.Open Filename:= _ "C:\Documents and Settings\YUUKORON\My Documents\YYYY.xls" Windows("GGGG.xls").Activate Sheets("2010.4YY").Select Sheets("2010.4YY").Move Before:=Workbooks("YYYY.xls").Sheets(1) が、移動先のブック名が移動させたいシートのセルF1に入力されているので、ブック名YYYYをどのようにすればよいのか教えてください。  Workbooks.Open Filename:= _   "C:\Documents and Settings\YUMIKO\My Documents\" & Range("F1").Value & ".xls" Windows("GGGG.xls").Activate Sheets("2010.4YY").Select  Sheets("2010.4YY").Move Before:=Workbooks("YYYY.xls").Sheets(1) 試してみた方法 Sheets("2010.4YY").Move Before:=Workbooks("("2010.4YY").Range("F1").Value.xls").Sheets(1)  Sheets("2010.4YY").Move Before:=Workbooks _ ("C:\Documents and Settings\YUMIKO\My Documents\" & Range("F1").Value & ".xls").Sheets(1) どれもダメでした。 あと、今は、Sheet(1)の前となっていますが、常にブックの先頭に移動させることはできるのでしょうか? シート名は、2010.5YY、2010.6YY というふうに毎月増えていく予定です。 初心者です。よろしくお願いします。

  • エクセルVBAの変数利用

    シートのC1セルに入力したブック名をアクティブにするための 変数なのですが、アクティブになりません。 下のようにしていますが、とのようにすればよいでしょうか? Sub test() Dim FileName As Range FileName = ThisWorkbook.Path & "\" & Sheets("sheet1").Range("C1") & ".xls" Workbooks.FileName.Activate End Sub

  • エクセル bookの名称

    Sub 登録() Workbooks.Open Filename:= _ "\\buckup1\センタ\データ\連絡をください\シート.xls" Windows("入力.xls").Activate Sheets("管理").Select Sheets("管理").Copy Before:=Workbooks("シート.xls").Sheets(1) End Sub 上記はマクロの自動記録で行ったものですが、このマクロが入ってるbookを名前を変えて保存して(例えば"顧客管理"など)上記を実行すると、上記3行目のbookの名前でないのでエラーが出てきます。上記のbookを名前を変えて保存すると3行目の部分もそれに合わせて自動で変わるように(入力→顧客管理)出来ますでしょうか。

専門家に質問してみよう