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の範囲取得と同じことをしているつもりなのですが、うまくいきません。
どうぞよろしくお願い致します。
A 回答 (3件)
- 最新から表示
- 回答順に表示
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なシートの範囲を指定しないとだめだたように思います。
以上参考になれば。
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 にも、シートオブジェクトの下に入り、整合性が取れるようになります。
No.1
- 回答日時:
>Sheets("シートA").Range("A3"), Sheets("シートB").Range("A3")
二つのシートを跨いで範囲設定しているせいでは?
Sheets("シートA").Range("A3"), Sheets("シートA").Range("A3")
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) Sheet1のA列にコードB列にメアド、Sheet2のB列にコード一覧とD列にメアド一覧があり、Sh 3 2022/10/19 11:57
- Visual Basic(VBA) 形式を選択して貼り付け 以下のコードで「元」シートと「先」シートのA列に同じ値があったら指定範囲をコ 5 2022/11/11 07:30
- Excel(エクセル) VBAのoffsetの動き方について教えてください 3 2022/11/25 23:36
- Excel(エクセル) シート名を簡単に書く方法があれば教えてください。 4 2023/08/24 12:40
- Excel(エクセル) 別のシートの最終行の値を参照するには 5 2022/12/15 13:18
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Excel(エクセル) マクロで行を追加、削除すると行位置がずれますが、解決方法はありませんか?。 5 2022/05/28 16:03
- Visual Basic(VBA) 他のシートからコピーする下記マクロで貼付け位置をWorksheets(1).Range("A3")の 8 2023/01/30 18:48
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルでブック内の倍率がバ...
-
特定のシートのみ再計算させな...
-
ハイパーリンクでジャンプした...
-
エクセルで複数のシートに画像...
-
ワークシートそのものの色を変...
-
エクセル、特定のシートにパス...
-
【ExcelVBA】マクロの入ったシ...
-
エクセルのシー名を二段表示に...
-
アクセスからエクセルのシート...
-
EXCELの図形(テキストボックス)...
-
エクセル2003で、複数のシート...
-
エクセルの2つのシートを並び...
-
エクセルで、シートの名前を変...
-
エクセルの複数シートでのリン...
-
エクセルのシートが消えた
-
エクセルを開くとメニューバー...
-
Accessのテーブルを既存のExcel...
-
指定したシート名以外を非表示...
-
accessへエクセルの複数のシー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルで複数のシートに画像...
-
特定のシートのみ再計算させな...
-
エクセルでブック内の倍率がバ...
-
ワークシートそのものの色を変...
-
【ExcelVBA】マクロの入ったシ...
-
エクセルの2つのシートを並び...
-
EXCELの図形(テキストボックス)...
-
ハイパーリンクでジャンプした...
-
エクセルのシート連番の振り直し
-
特定の複数のシートに同じ処理...
-
エクセルのシー名を二段表示に...
-
Wordで差し込み印刷時に表示す...
-
エクセルで、シートの名前を変...
-
エクセルでリンク貼り付けした...
-
エクセル、特定のシートにパス...
-
accessへエクセルの複数のシー...
-
Accessのテーブルを既存のExcel...
-
【Excel VBA】データ貼り付け先...
-
EXCELの「シートの見出し」のフ...
おすすめ情報