- 締切済み
マクロの設定について
マクロでファイル1のシート1のデータをクリア一部クリアしたあと ファイル2のシート1,2の一部データもクリアをしようとマクロの新規記憶をさせ実行したところ、何度トライしても「エラー9、インデックスが範囲にありません」となります。 同じファイル内でシート1,2,3とマクロの処理は実行できますが、ファイル間では無理なのでしょうか?教えて下さい
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- xls88
- ベストアンサー率56% (669/1189)
>デバックは(田辺)の行でラインが発生してます。 ”「エラー9、インデックスが範囲にありません」”というエラーは 言い換えれば、田辺.xlsブックが見つからない、ということです。 田辺.xlsというブック名の記述が間違っていませんか? あるいは、田辺.xlsというブックが開かれていないのではないでしょうか。 ≪1≫ >Range("B23:F27").Select >Selection.ClearContents 記録マクロでは、Select、Selectionが多数出現します。 多くの場合、Selectする必要がありません。 上記2行ですが Selectionは、直前でSelectしたRange("B23:F27")のことですから Range("B23:F27").ClearContents と、1行に纏めることができます。 ≪2≫ >ActiveWindow.SmallScroll Down:=-15 スクロール操作も記録されますが、ほとんど必要ありません。 削除しても大丈夫ですが、 ' ActiveWindow.SmallScroll Down:=-15 というように、行先頭に、'(アポストロフィ)を付ければコメントアウトされます。 マクロ実行時に、この行はパスされて実行されなくなります。 必要のないことが充分確認できてから、おもむろに削除してください。 ≪3≫ >Range("D9:D19").Select >Selection.ClearContents >ActiveWindow.SmallScroll Down:=9 >Range("B23:F27").Select >Selection.ClearContents 同一シート内で、複数の離れたセル範囲は 例えば A1を選択 Shiftキーを押した状態で、A5をクリック Ctrlキーを押した状態で、C1をクリック Shiftキーを押した状態で、C5をクリック と、いった操作を「マクロの記録」すれば Range("A1:A5,C1:C5").Select と記録されます。 つまり、≪1≫≪2≫を踏まえて Range("D9:D19,B23:F27").ClearContents とすることができます。 ≪4≫ >Range("D9:D19").Select >Selection.ClearContents 記録マクロでは、マクロ記録時に明確な操作をしない限り、ブック名とかシート名が省略されます。 上記2行では、Range("D9:D19")の上位オブジェクトである、シート、その上である、ブックが省略されています。 その場合、マクロ実行時に、選択されているシートが操作対象になります。 充分、気をつけなければなりません。 例をあげれば Sheets("Sheet1").Range("D9:D19").ClearContents あるいは WorkBooks("ABC.xls").Sheets("Sheet1").Range("D9:D19").ClearContents などと、Range("D9:D19")の上位オブジェクトを明記します。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 記録マクロと、実際のコーディングとは違います。 ある程度の経験者なら、直接オブジェクトを指定して操作します。 しかし、分からなければ、 Workbooks("ブック名.xls").Activate '←拡張子も含みます。 Worksheets("Sheet1").Select Range("A1:C10").ClearContents でクリアするコードを入れます。以下の場合の、ClearContents メソッドは、値だけで、書式などは残ります。全部削除するなら、Clear メソッドを使います。 インデックスが違うというのは、それぞれのオブジェクトの正しい名称が指定されていないからだと思います。 私なら、このように書きます。 例: '標準モジュール Sub Test() Workbooks("Book1.xls").Worksheets("Sheet1").Range("A1:B10").ClearContents With Workbooks("Book2.xls") .Worksheets("Sheet1").Range("A1:B10").ClearContents .Worksheets("Sheet2").Range("A1:B10").ClearContents End With End Sub
- Alpha-j
- ベストアンサー率66% (18/27)
マクロ上ではどのワークブックのどのシートに命令を実行するのかを明示する必要があります。 したがって最低でもシート1のデータをクリア一部クリアする前と、ファイル2のシート1,2の一部データをクリアする前にそれぞれ、以下のような構文を挿入してください。(ワークブック名はそれぞれ Book1,Book2 と仮定します) Windows("Book1").Activate Worksheets("Sheet1").Select シート1のデータをクリア一部クリアするマクロ Windows("Book2").Activate Worksheets("Sheet1").Select シート1のデータをクリア一部クリアするマクロ Worksheets("Sheet2").Select シート2のデータをクリア一部クリアするマクロ 尚、マクロの編集は ツール>マクロ>VisualBasicEditor で開けます
お礼
ご返答ありがとうございます。 参考までにオブジェクト貼り付けました アドバイスいただけたら幸いです
- xls88
- ベストアンサー率56% (669/1189)
>同じファイル内でシート1,2,3とマクロの処理は実行できますが、 >ファイル間では無理なのでしょうか? できます、無理ということはありません。 提示されたエラー内容ですが、例えば、シート名があっていないとかいう場合に置きます。 記録マクロでは、ブック名とかも省略されていることが多く、そうしたことも要因のひとつかも知れません。 マクロを実行して、エラーが出た時、メッセージボックスの「デバッグ」ボタンを押してください。 VBEのコードウインドウが開き、エラー行が黄色く反転表示されます。 マクロコードを掲載して、どの行で発生するかを教えてください。
補足
すいません、もし分かれば教えてください デバックは(田辺)の行でラインが発生してます。 Range("D9:D19").Select Selection.ClearContents ActiveWindow.SmallScroll Down:=9 Range("B23:F27").Select Selection.ClearContents Sheets("入金詳細").Select ActiveWindow.SmallScroll Down:=18 Range("B35").Select Selection.ClearContents ActiveWindow.SmallScroll Down:=-24 Range("E3:E34").Select Selection.ClearContents Windows("田辺.xls").Activate Range("B35:G39").Select Selection.ClearContents ActiveWindow.SmallScroll Down:=-15 Range("J9").Select ActiveCell.FormulaR1C1 = "0" Range("J10").Select
お礼
ご返答ありがとうございます。 参考までにオブジェクト貼り付けました。 アドバイスいただければ幸いです。