• 締切済み

VBAエラー '1004' について

VBA初心者です。 下のプログラムの★部分で 「実行時エラー'1004' アプリケーション定義またはオブジェクト定義のエラーです。」 というエラーが発生します。 どなたか原因を教えていただけないでしょうか?? Dim aRange As Range Dim bRange As Range Set aRange = Range(Sheets("シートA").Range("A3"), Sheets("シートB").Range("A3").End(xlDown)) ★ Set bRange = Range(Sheets("シートB").Range("A3"), Sheets("シートB").Range("A3").End(xlDown)) 下のシートBの範囲取得と同じことをしているつもりなのですが、うまくいきません。 どうぞよろしくお願い致します。

みんなの回答

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

>Set aRange = Range(Sheets("シートA").Range("A3"), Sheets("シートB").Range("A3").End(xlDown 範囲を定義しているのはわかりますが、Rangeのカッコ内の Sheets("シートA").Range("A3") Sheets("シートB").Range("A3").End(xlDown)) は、指定セルに、どんな内容が入っていますか。 ーー 私が試してみると、B1にA1、B2にA3が入っているとき Sub test01() ' Range("A1:A3").Select Range(Range(Range("B1")), Range(Range("B2"))).Select End Sub の上と下が同じになりますが、下の型とも違う。 Range(A1, A3).Selectはエラーになります(1004エラー) Range(Range("A1"), Range("A5")).SelectはOK。 ーー RangeはRange("A1")とか Range(Cells(i,j),Cells(K,l)) とかの型で使いますが、質問のコードは、どちらの型にも当てはまらないようなのだが。 それと Sheets("シートA")やSheets("シートB")のように複数シートの参照が出てきたとき、 Set aRange = Range()のRangeの前にも、明示的にシート名を入れるべき経験をしたように思います。 しかしsh2.Range(sh1.Cells(1, 2) & ":" & sh1.Cells(2, 2)).Select はダメでした。 それで Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") sh2.Activate Range(sh1.Cells(1, 2) & ":" & sh1.Cells(2, 2)).Select End Sub でSheet1のB1にA1、B2にA5の場合Sheet2のA1:A5を範囲選択に成功しました。 SelectはActiveなシートの範囲を指定しないとだめだたように思います。 以上参考になれば。

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

こんばんは。 「実行時エラー'1004'アプリケーション定義またはオブジェクト定義のエラーです。」 そのエラーは、オブジェクト・エラーのようですね。 一度、F2 を押して、オブジェクトブラウザを見ていただけるとよいのですが、Range オブジェクトの親オブジェクトにあたるものは、一般では、Worksheet とApplication オブジェクトです。 今、そのコードが置かれている場所は、[シートモジュール]だと思います。 そうすると、親オブジェクトは、そのままの状態では、その書かれたモジュールのワークシート・オブジェクトだと、VBAでは理解してしまいます。そうすると、Range の親オブジェクトと中で指し示すシート・オブジェクトが違ってしまい、オブジェクト・エラーが出てしまいます。 まず、Excel VBAでは、特別なことがない限りは、「標準モジュール」を使ってください。 記録マクロで、書き込まれる場所です。 With Worksheets("シートA")  Set aRange = .Range(.Range("A3"), .Range("A3").End(xlDown)) End With With Worksheets("シートB")  Set bRange = .Range(.Range("A3"), .Range("A3").End(xlDown)) End With このようにして、囲みます。Rangeの手前に、点(.)がつけてあります。そうすると、入力の手間が減り、ミスも少なくなります。 = の後の Range にも、シートオブジェクトの下に入り、整合性が取れるようになります。

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>Sheets("シートA").Range("A3"), Sheets("シートB").Range("A3") 二つのシートを跨いで範囲設定しているせいでは? Sheets("シートA").Range("A3"), Sheets("シートA").Range("A3")

関連するQ&A