エクセルのバージョンの違いからか?ファイル操作で正常に起動するときとエラーのときが・・・・

このQ&Aのポイント
  • エクセルのバージョンの違いにより、ファイル操作で正常に起動する場合とエラーが発生する場合があります。
  • マクロを実行する際、パソコンの違いによって、「インデックスが有効範囲にありません」というエラーメッセージが表示されることがあります。
  • エラーの原因は、特定のファイル名の指定方法によるものであり、通し番号でマクロを組むことで回避できますが、複数のファイルを操作する場合はファイル名を明記する必要があるため注意が必要です。
回答を見る
  • ベストアンサー

エクセルのバージョンの違いからか?ファイル操作で正常に起動するときとエ

エクセルのバージョンの違いからか?ファイル操作で正常に起動するときとエラーのときが・・・・ お世話になります。マクロ初心者です。 会社の複数のパソコンで、ある自作のマクロをつかっているのですが、 例えば、バックアップというファイルを呼び出し、 Range(Cells(1, 1), Cells(100,100)).Copy Workbooks("バックアップ").Worksheets(2).Cells(1, 1) というプログラムを実行させようとしたとき、パソコンの違いで、普通に実行できるときと、「インデックスが有効範囲にありません」とエラーメッセージがだされるときがあります。 Range(Cells(1, 1), Cells(100,100)).Copy Workbooks(2).Worksheets(2).Cells(1, 1) とすれば、どのパソコンでも普通に実行できます。 これはコピーの操作に限らず、他の複数のファイル操作でも同様に生じるエラーなので、ファイル名の特定の仕方に原因があると思われます。 であるならば、最初から通し番号でマクロを組めば・・・と言われるかもしれませんが、私のプログラムは、複数のファイルを呼び出して操作するものなので、ファイル名を明記して実行できるようにしておかないと、想定していたのとは別のファイルにデータを書き込んでしまったり、結果、もともとそこにあったデータを消去してしまったりと、事故が絶えないのです。 ファイル名を明記するとエラーメッセージが出てしまうパソコンがあるのは、搭載しているエクセルのバージョンの違いが原因なのでしょうか?設定を変えれば、このパソコンでも、ファイル名を特定してプログラムが組めるものなのでしょうか??

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

#3の回答者ですが、 >拡張子が必要なパソコンとそうでないパソコンがあることが、バグがでる、でないの原因に なっているのではないかと思います。 VBAでは、明示的に、拡張子まで入れなくてはいけません。私のマクロは、拡張子は入れないと動かないです。拡張子がないと、ファイルがありません、と出てきます。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

この内容で、バージョンは関係がありません。初歩的ですが、慣れないと出来ません。 文章は、もう少し見やすく書いてくださいね。それは、プログラミングのコーディングと同じことになりますから。 >Range(Cells(1, 1), Cells(100,100)).Copy Workbooks(2).Worksheets(2).Cells(1, 1) RangeとCellsの親オブジェクトは繋がりがありませんから、必ず、一致させてください。それは基本です。 Workbooks(2)の意味というのは、分かりますか?Workbooks(1), Workbooks(2)の中の数字は、「開いた順」ですから、そのようなあやふやなコードは使えません。また、Worksheets(2)ま「2」は、左から数えて、2番目という意味です。ユーザー任意で順番を変えられたら、Index は使えません。 「インデックスが有効範囲にありません」というのは、主に、ファイル名が違っていたり、シート名が違った時に置きます。 基本的な書き方で、進めてみたらどうでしょうか。 以下では、拡張子は関係がありません。 '//標準モジュール Sub OpenAndBackUp()  Dim FileNames As Variant  Dim f As Variant  Dim Tbk1 As Workbook  Set Tbk1 = ThisWorkbook   FileNames = "abc.xls,abb.xls,acb.xls" 'ブック名のリスト  FileNames = Split(FileNames, ",")  On Error GoTo ErrHandler  Application.EnableEvents = False 'イベントは切ったほうが良い  For Each f In FileNames   If Dir(f) <> "" Then    With Workbooks.Open(f)     Tbk1.Worksheets("Sheet1").Range("A1:CV100").Copy .Worksheets("Sheet2").Range("A1")     .Close True    End With   Else    MsgBox f & "のファイルはありません。"   End If 'エラーの時に知らせる(この設定では、エラーファイルは、開いたままになる可能性はある) errJump:  Next  Application.EnableEvents = True  Exit Sub ErrHandler:   MsgBox Err.Number & " :" & Err.Description & vbCrLf & f   GoTo errJump End Sub

andesandes
質問者

補足

現時点で、三方から大変丁寧な回答をいただき、助かっています。 質問がわかりづらくてスミマセン。 回答も、初心者なもので、誤解もあるかもしれませんが、ファイル名の指定の際に 拡張子が必要なパソコンとそうでないパソコンがあることが、バグがでる、でないの原因に なっているのではないかと思います。今日、夜勤でこれから出勤するので、もういちど 拡張子の点で注意してコードを書き直してチャレンジしてみたいと思います。 結果はまた明日。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

質問を長々書いているが判りにくい。 >Range(Cells(1, 1), Cells(100,100)).Copy のRange(●Cells(1, 1), ●Cells(100,100)).Copyの●の部分にシートを特定するシート名かインデックス番号でしてしないと良くエラーを経験する。 この点は経験していますか。 参考 Googleで「アプリケーションの定義またはオブジェクト定義のエラーです range」で照会。 http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200705/07050186.txt の「MRM」さんの項 Sub test01() Dim sh1 Worksheets("Sheet1").Range(Cells(1, 1), Cells(100, 100)).Copy Set sh1 = Worksheets("Sheet1") sh1.Range(sh1.Cells(1, 1), sh1.Cells(100, 100)).Copy Sheets("Sheet2").Activate ActiveSheet.Paste End Sub でも3行目でエラー。 ここをコメント化するとOK

andesandes
質問者

補足

現時点で、三方から大変丁寧な回答をいただき、助かっています。 質問がわかりづらくてスミマセン。 回答も、初心者なもので、誤解もあるかもしれませんが、ファイル名の指定の際に 拡張子が必要なパソコンとそうでないパソコンがあることが、バグがでる、でないの原因に なっているのではないかと思います。今日、夜勤でこれから出勤するので、もういちど 拡張子の点で注意してコードを書き直してチャレンジしてみたいと思います。 結果はまた明日。

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.1

Workbooks("バックアップ").・・・ では無く Workbooks("バックアップ.xls").・・・ と拡張子も含めてみれば 最初から必要なファイルを開いてからマクロを実行するのか マクロからファイルを開いてマクロを実行するのかは分りませんが どちらにしても、変数を使用して開いたファイルからファイル名或いは ファイルインデクスを取得すればよいと思いますが '一例です************************************** dim bakupfail as string dim tmpworkbook as workbook for eact tmpworkbook in workbooks if instr(tmpworkbook.name,"バックアップ")>0 then bakupfail=tmpworkbook.name exit sub endif next Range(Cells(1, 1), Cells(100,100)).Copy Workbooks(bakupfail).Worksheets(2).Cells(1, 1) '************************************************ この様に、現在開いているブックに"バックアップ"が含まれている ブックのブック名を変数bakupfailに代入し、目的のコードのファイル名に 設定すればよいと思いますよ この処理をブックopen時にpublicで宣言した変数へ設定して使用すれば 質問のエラーで悩むことがなくなると思いますよ 参考まで

andesandes
質問者

補足

現時点で、三方から大変丁寧な回答をいただき、助かっています。 質問がわかりづらくてスミマセン。 回答も、初心者なもので、誤解もあるかもしれませんが、ファイル名の指定の際に 拡張子が必要なパソコンとそうでないパソコンがあることが、バグがでる、でないの原因に なっているのではないかと思います。今日、夜勤でこれから出勤するので、もういちど 拡張子の点で注意してコードを書き直してチャレンジしてみたいと思います。 結果はまた明日。

関連するQ&A

  • エクセルVBA ファイル名操作

    エクセルマクロのコードにおきまして 「フォルダの選択」ダイアログから エクセルファイル 123.xlsxを例えば 開くときに それをa.xlsxという名前に変えて 以下のそれに続くVBAコードにおいて a.xlsxを操作したいのですが、 a = Application.GetOpenFilename() Workbooks.Open a これを実行すると求めるダイアログが表示されて 使いたい123.xlsxを開くをクリックしますが これでは123.xlsxがa.xlsxにはなりません このa.xlsxのファイル名で別途ファイル作成する方法を 御教示いただけると助かります よろしくお願いします win10 office365 コードは以下 部分ですが こういう流れで作成したい所存です Sub あいう() a = Application.GetOpenFilename() Workbooks.Open a 'b.xlsxファイルを新規作成 Workbooks.Add ActiveWorkbook.SaveAs Filename:="C:\Users\USER\Desktop\あいう\b.xlsx", FileFormat:=xlXMLSpreadsheet 'a.xlsxファイルの1行目のA1~AG1のセルの値をコピー Workbooks("a.xlsx").Worksheets("Sheet1").Range("A1:AG1").Copy 'b.xlsxファイルのA3~AG3のセルに貼り付け Workbooks("b.xlsx").Worksheets("Sheet1").Range("A3:AG3").PasteSpecial xlPasteValues 以下省略 よろしくお願いします

  • VBA マクロ実行時エラー 1004

    すみません (1)Workbooks(p_addr_Name).Worksheets(sheet_check).Range(Cells(7, 2), Cells(19, 2)).Copy (2)Workbooks(p_SH_weekly).Worksheets("Sheet1").Range(Cells(7, i), Cells(19, i)).PasteSpecial Paste:=xlPasteAll その際(2)で「実行時エラー'1004'」が出ました、教えてください。 *上記引数は全部入りました 宜しくお願いします

  • Excel マクロ 別のファイルの情報をコピーして貼り付ける

    Excel 2007のマクロで、別のファイルの情報をコピーして貼り付ける マクロを作成しています。 別ファイルが1つであれば下記のマクロでできました。 他に別ファイルがもう1つあり、全部で2つのファイルからそれぞれ 必要なシートから情報をコピーしたいと思います。 ※各シート名は異なります。 別ファイルが2つになった場合、マクロをどのように記載すればよろしいでしょうか。 よろしくお願いいたします。 Sub Test1() Dim myCellall As Range Set myCellall = Sheets("すべて").Range("A1") With Workbooks.Open("\") With .Worksheets("すべて") .Range(.Range("A1"), .Cells.SpecialCells(xlCellTypeLastCell)).Copy myCellall End With .Close False End With End Sub

  • VBAについてです。

    VBAについてです。 当方VBA初心者です。初歩的な質問があり投稿しました。 Workbooks("aaaa.xlsx").Worksheets("aaa").Range("A3:A50").Copy _ Workbooks("bbbb.xlsx").Worksheets("bbb").Range("A2") というコピーはできるのに Workbooks("aaaa.xlsx").Worksheets("aaa").Range(cells(3, 1), cells(50, 1)).Copy _ Workbooks("bbbb.xlsx").Worksheets("bbb").Range("A2") というコピーはどうしてできないのでしょうか? また、最下行を判別して Workbooks("aaaa.xlsx").Worksheets("aaa").Range(cells(3, 1), cells(最下行, 1)).Copy _ Workbooks("bbbb.xlsx").Worksheets("bbb").Range("A2") という様に簡単に処理したいのですが、やはり無理なのでしょうか? ブックが違うのですが、これをなんとかこのような処理にしたいと思っています。

  • Excel VBAでのExcelのヴァージョン違いで、デバッグがかかる?

    Excel2000では、デバッグがかからず実行出来るのですが、Excel2002・2003ではデバッグがかかってしまいます。 症状は Excel2002では 「実行時エラー’9’  インデックスが有効範囲にありません」 Sheets("KNS").Copy After:=Workbooks("施工請求SAM").Sheets(Sheets.Count) Excel2003では 「実行時エラー’1004’  RangeクラスのCopyメソッドが失敗しました」 .Range("A3").CurrentRegion.Copy Destination:=WS2.Range("C2") とデバッグがかかってしまいます!! ヴァージョンがアップしているのに・・・??状態です。 何か、不必要コマンドを入力しまっているのでしょうか?

  • EXCEL VBA セルからファイル名を読み込む

    EXCEL VBAについての質問です 同じ処理を名前の違う複数のファイルで行いたいと思っています そこで、セルA2へファイル名の『○○.xls』○○部分だけをそれぞれのファイルに書き込んでおき、マクロは共通にしてファイル名をそれぞれのファイルから読み込んで実行したいと思っています。 良い方法を教えてください。 Workbooks("200809.csv").Activate Sheets("200809").Select Range("C3:C33").Copy Windows("○○.xls").Activate'←ここをファイルにあわせて変更できる形にしたい Sheets("報告書").Select Range("G5:G35").Select ActiveSheet.Paste Windows("200809.csv").Activate Range("K3:K33").Copy Windows("○○.xls").Activate’←ここ Sheets("報告書").Select Range("I5:I35").Select ActiveSheet.Paste Workbooks("200809.csv").Close SaveChanges:=False よろしくお願いします。

  • Excel2007 コピペエラー

    以下を実行すると、「そのコマンドは複数の選択範囲に対して実行できません」エラーがでます。 Workbooks("Test1").Sheets("Sheet1").Range((.Cells(1, 1), .Cells(100, 20)).Copy Workbooks("Test2").Sheets("Sheet2").Activate Workbooks("Test2").Sheets("Sheet2").Cells(1, 1).Select ActiveSheet.Paste どなたか原因を教えて下さい。

  • VBA VLOOKUPとセルのコピーができません

    助けてください マクロでVLOOKUPを使い、データを持ってこようとしてますが上手くいきません やりたいこと:Sheet3(在庫を貼付)にある4列目の数値を、Sheet1のG列で照合し、Sheet1の9列目に持ってきたい Sheet1:cells(6,9)にVLOOKUPの式を入れる 関数で言えば=VLOOKUP($G,Sheet3!C:F,4,FALSE) cells(6,9)をcells(7,9)からcells(2000,9)までコピー これを実行すると 「アプリケーション定義またはオブジェクト定義のエラーです。」 とでて止まってしまいます ActivesheetsやWorkbooks、WorksheetsやSheetsで設定したりしてもエラーは変わりますが 止まってることには変わりありません どうしたら動くようになりますか? Sub vlook() Dim Nname As String macx = "ルーチンワーク20130223.xlsm" 'マクロ用ファイル「ルーチンワーク20130223.xlsm」がある Sheets(1).Select Workbooks(macx).Activate Worksheets(1).Activate ddir = Cells(33, 2) 'cells(33,2)にフォルダ情報がある Nname = Dir(ddir & "在庫推移.xlsx") '在庫推移.xlsxというVLOOKUPしたいファイルがある Workbooks.Open Filename:=ddir & Nname Workbooks(Nname).Activate Sheets(1).Select Worksheets(1).Activate 'VLOOKUPで在庫を持ってくる ActiveCell.FormulaR1C1 = "=VLOOKUP(RC7,'在庫を貼付'!C[-6]:C[-3],4,FALSE)"   '自動記録マクロから持ってきてます Worksheets(1).Activate Sheets(1).Select Range(Cells(6, 9)).Copy Destination:=Sheets(1).Range(Cells(7, 9)) 'この行でエラーが出る

  • 異なるブック間でのセル範囲のコピー/VBA

    異なるブック間でクリップボードを経由せず直接コピーしたいため 下記のマクロを記述していますが、実行エラーが発生します。 どうしてでしょうか。 ThisWorkbook.Worksheets(3).Range(Cells(3, 1), Cells(3 + a, 1)).Value = Workbooks("excel.xls").Worksheets(1).Range(Cells(11, 3), Cells(11 + a, 3)).Value (補足) (1)VBA実行中のThisWorkbook、excel.xlsは別のブック ですが、同じフォルダにあります。 (2)aは数値が入る変数です。

  • エクセルマクロ ファイル名を変更したとき

    マクロ初心者です。 データファイルからシートを複写挿入するマクロです。 コピー先ファイル名を都度変更したいのですが、その場合マクロにコピー先ファイル名が入っているのでエラーになります。名前が変わっても実行できるようにするにはどうしたらよいのでしょう? なお、複写元のデータファイルは複写後に閉じます。 Workbooks.Open Filename:="データファイル.xls" Sheets("Sheet1").Copy Before:=Workbooks("コピー先ファイル名.xls").Sheets(1)

専門家に質問してみよう