Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2016)
インデックスが有効範囲にありません
投稿日時: 19/05/31 13:16:37
投稿者: vaioyuki

助けてください。
 
Sheet2に一覧表があります。
1行目は大項目でセルが結合されています。
2行目でオートフィルをしたいです。
オートフィルの結果をSheet4にコピーしたいです。
 
Sub macro1()
 
    With Range("A2")
        .AutoFilter 30, ">6000"
        Worksheets("Sheet2").Range(Range("A3"), Cells(Rows.Count, 36).End(xlUp)).Copy Worksheets("Sheet4").Range("a3")
        .AutoFilter
    End With
 
End Sub
 
この時に「インデックスが有効範囲にありません」とエラーが出ます。
Sheet4も存在しています。
Sheet4の1行目2行目にはSheet2の1行目2行目と同じものにしています。
 
Sub macro1()
 
    With Range("A2")
        .AutoFilter 30, ">6000"
        Range(Range("A3"), Cells(Rows.Count, 36).End(xlUp)).Copy Sheets("Sheet4").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
        .AutoFilter
    End With
 
End Sub
 
上記でも同じエラーになりました。
何が考えられるでしょうか?
よろしくお願いします。

回答
投稿日時: 19/05/31 13:49:03
投稿者: simple

そのエラーは普通はシート名が違うときに出ることが多いものです。
念のため、シート名の前後にスペースが入っていないか、など確認して下さい。
 
なお、下記の件は、エラーメッセージが異なるので、直接の原因ではないと思いますが、
重要な点なので併せて指摘しておきます。
 

Worksheets("Sheet2").Range(Range("A3"), Cells(Rows.Count, 36).End(xlUp))
と書いたとき、中にある
・Range("A3")
・Cells(Rows.Count, 36).End(xlUp)
にもワークシートの指定が必要です。

例えばSheet1がアクティブなとき、その2つはアクティブシートのセルと解釈されます。
それは、最初にあるWorksheets("Sheet2")と不整合になるので、NGとなります。
 
あなたのコードは、アクティブシートが何であるかに依存してしまっています。
特に、複数のシートを使うコードでは、アクティブシートに依存しないコードに
すべきです。
一度、すべてのRangeオブジェクトについて、シートを指定するように変更することをお薦めします。

投稿日時: 19/05/31 14:04:57
投稿者: vaioyuki

ありがとうございます!!
出来ました。
 
シート名は記載されているものではなくSheetsを使うものだとばかり思っていました。
実際のシート名を記載すると動きました。
 
最初に
Worksheets("Sheet2").Range(Range("A3"), Cells(Rows.Count, 36).End(xlUp))
こちらで動かしていて Sheet2を実際のシート名にしてもエラーだったので違うものだとばかり思っていました。
 
本当にありがとうございました。