
エクセルVBA初心者です。
下記の2つの構文があったとして、同じ動きをするわけですが、"Sheet1" となっているところを "Sheet3" に書き換えた時に、下の構文は動くのに、上の構文はエラー(実行時エラー '1004') となるのはなぜでしょうか? "Sheet1" であれば、どちらの構文も問題なく動きます。.Cells としてもダメでした。Sheet名を変えただけで、なぜ上の構文だけ動かなくなるのか原因がわからずすっきりしないので、どなたか教えていただけると助かります。
Sub SetColumns()
Worksheets("Sheet1").Activate
Worksheets("Sheet1").Range(Cells(2,2),Cells(5, 5)) _
.EntireColumn.Value="XXX"
End Sub
Sub SetColumns()
Worksheets("Sheet1").Activate
Worksheets("Sheet1").Range("B2:E5") _
.EntireColumn.Value="XXX"
End Sub
No.1ベストアンサー
- 回答日時:
上のコードは、どこのコードウィンドウに書いたかによってエラーになる場合とならない場合があります。
Sheet1のコードウィンドウに書いた場合は、Cells(2,2)、Cells(5,5)はSheet1のセルを指します。
Worksheets("Sheet1").Rangeの"Sheet1"を"Sheet3"に書き換えてもCellsが指すセルはSheet1のままなので、
Worksheets("Sheet3").Range(Worksheets("Sheet1").Cells(2,2),Worksheets("Sheet1").Cells(5, 5)).EntireColumn.Value="XXX"
と同じ意味になり、Sheet3の中にSheet1のセルはありえないのでエラーになります。
エラーにさせないためには、
Worksheets("Sheet3").Range(Worksheets("Sheet3").Cells(2,2),Worksheets("Sheet3").Cells(5, 5)).EntireColumn.Value="XXX"
と、Cellsの前にWorksheets("Sheet3").を付加する必要があります。
ThisWorkbookのコードウィンドウに書いた場合は、Cellsが指すセルはActiveSheetになるのでエラーにはなりません。
(ただし、Worksheets("Sheet3").Activateがなければエラーになります)
Range("B2:E5")とした場合は、Worksheets("xxxxxx")で指定したシートのセルを指すのでシート名を変えてもエラーにはなりません。
No.3
- 回答日時:
Worksheets("Sheet1").Range(Cells(2,2),Cells(5, 5))
2つの Cells がどこブックのどのシートのセルを指し示そうとしているのかが明確じゃない。
「Worksheets("Sheet1") 」 は絶対的に "Sheet1" というワークシートを指し示している。
「Worksheets("Sheet1").Range」 は 「Sheet1 の中の Range」 と明確である。
Cells も同様に明確に場所を示してあげる必要がある。
No.2
- 回答日時:
こんにちは。
#1さんがご説明になっておられますが、少し違う言い方をさせていただきます。
理屈は後で追いかけてくるものです。
基本的なことですが、MS-Office の中で、ほぼ、Excelだけが、[標準モジュール]を使うことが多いのです。
オブジェクトモジュール(Sheetモジュール,ThisWorkbookモジュール)の使い方は違います。だから、入門レベルでは、深く考えずに、[標準モジュール]を利用したほうがよいです。
オブジェクトモジュールは、Sheet1 なら、Sheet1 のオブジェクトの中での使い方になります。
オブジェクトモジュールでは、主にイベントと言って、Wokrsheet_Change など、特殊なマクロを置くことになります。
Worksheets("Sheet1").Range(Cells(2,2),Cells(5, 5))
としても、Sheet1以外のオジェクト・モジュールは、Rangeオブジェクトは、Sheet1 の親とつながっていますが、Cellsの親オブジェクトは、Sheet2とか、Sheet3 とか別のモジュールに書くと、別の親を呼んでいますから、エラーが発生します。
もし正しく書くなら、このようになります。(標準モジュールでも可)
Sub SetColumns()
With Worksheets("Sheet1")
.Activate
.Range(.Cells(2,2),.Cells(5, 5)) _
.EntireColumn.Value="XXX"
End With
End Sub
ただ、なぜ、こんな問題があるかというと、たぶん、VBA/VBの設計者と実際に作った人とが仲が悪かったとか、意思疎通ができていなくて、このようなことが発生したのだと思っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- Visual Basic(VBA) EXCELのVBAについて 2 2023/07/05 17:17
- Visual Basic(VBA) vbaのvlookup関数エラー原因を教えていただけないでしょうか。 3 2022/04/25 16:16
- Visual Basic(VBA) worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応 3 2022/12/27 22:27
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Excel(エクセル) VBAのエラーが直せません 4 2023/06/12 22:10
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) 初めてマクロを入力しますが、テキストとおりに入力したのに構文エラーです。修正を教えてください。 3 2022/10/28 11:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
UserForm1.Showでエラーになり...
-
【Access】Excelインポート時に...
-
お助けください!VBAのファイル...
-
【VBA】ワークブックを開く時に...
-
String""から型'Double'への変...
-
VBAでfunctionを利用しようとし...
-
【VBAエラー】Nextに対するFor...
-
マクロの「SaveAs」でエラーが...
-
Nullの使い方が不正ですのエラ...
-
Filter関数を用いた結果、何も...
-
VBA エクセル で FIND でのエラ...
-
CDatabase::ExecuteSQL()について
-
エクセルVBAで今まで使えていた...
-
マクロで"#N/A"のエラー行を削...
-
ACCESSで値を代入できないとは?
-
VBAのリストボックスで、横スク...
-
ACCESS VBAのSplit()関数の使用...
-
フランスの生年月日(jj/mm/aaaa)
-
Scilabのstacksizeの増やし方が...
-
VBでSQL文のUPDATE構文を使った...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロOn Error GoTo ErrLabel...
-
UserForm1.Showでエラーになり...
-
お助けください!VBAのファイル...
-
VBAでfunctionを利用しようとし...
-
【VBA】ワークブックを開く時に...
-
String""から型'Double'への変...
-
文字列内で括弧を使うには
-
マクロで"#N/A"のエラー行を削...
-
Excel vbaについての質問
-
VBA データ(特定値)のある最...
-
On ErrorでエラーNoが0
-
インポート時のエラー「データ...
-
【VBAエラー】Nextに対するFor...
-
ACCESSで値を代入できないとは?
-
【Access】Excelインポート時に...
-
VBでSQL文のUPDATE構文を使った...
-
【VB.NET】 パワポ操作を非表示で
-
「実行時エラー '3167' レコー...
-
実行時エラー 438 の解決策をお...
-
実行時エラー'-2147467259(8000...
おすすめ情報