• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAでFor each文)

エクセルVBAでFor each文でオブジェクトが必要なエラーが発生する問題の代替案はあるか

このQ&Aのポイント
  • エクセルVBAでFor each文を使用する際に、「オブジェクトが必要です」というエラーが発生してしまう場合、代替案があります。具体的なエラーの原因は不明ですが、以下のような方法で対処することができます。
  • まず、特定のシートのみで処理を行いたい場合は、処理したいワークシートのオブジェクトを明示的に指定する必要があります。つまり、For each文の前に特定のワークシートのオブジェクトを宣言し、それを使用して処理を行います。
  • 具体的なコードは以下のようになります。 dim ws as worksheet set ws = ThisWorkbook.Worksheets("シート名") 'ここに処理を書く このようにすることで特定のシートのみで処理を行うことができます。エラーが発生しないようになるはずです。エクセルのバージョンによって細かな書き方は異なる場合がありますので、ご注意ください。

質問者が選んだベストアンサー

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

ArrayはVariant型であり、オブジェクトでは無いとされるからではないでしょうか。 素直に配列としてアクセスするか、 Sub test() Dim ws As Worksheet Dim buf As Variant Dim i As Long With ThisWorkbook buf = Array(.Worksheets(1), .Worksheets(2), .Worksheets(3)) For i = LBound(buf) To UBound(buf) With buf(i) Debug.Print .Name End With Next i End With End Sub どうしてもEachが使いたければ、Collectionに収納すれば良いかも。 下記shはObject型でなければダメかと思いましたが、Worksheet型でも大丈夫でした。インテリセンスが効くメリットはありそうですね。 Sub test2() Dim wsCollection As Collection Dim sh As Worksheet Set wsCollection = New Collection With ThisWorkbook wsCollection.Add .Worksheets(1) wsCollection.Add .Worksheets(2) wsCollection.Add .Worksheets(3) End With For Each sh In wsCollection Debug.Print sh.Name Next sh End Sub

lelion1000
質問者

お礼

前者はNo.4と大体同じですね。今回はこの方法でやることにしました。 後者はAddが1つずつしかできないのがデメリットですね。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.4

#2です。 追加ですが、下記はエラーにならず動作します。あまり使いたく無いですが... Sub test() Dim ws As Variant '<- ここをVariant型で宣言 With ThisWorkbook For Each ws In Array(.Worksheets(1), .Worksheets(2), .Worksheets(3)) With ws Debug.Print ws.Name End With Next ws End With End Sub

lelion1000
質問者

お礼

なるほど。Variant型でいけるのですね。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • DreamyCat
  • ベストアンサー率56% (295/524)
回答No.3

sheetsでもworksheetsでもどちらで書いてもいいですが、 名前で指定すると、シートの順番も変えて処理できます。 For Each ws In .Sheets(Array(.Sheets(1).Name, .Sheets(4).Name, Sheets(2).Name))

lelion1000
質問者

お礼

質問の意図が伝わらなかったみたいです。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> 「オブジェクトが必要です」というエラーが どの行で出ます? withを書いたのだから、項目の前に.(ドット)が必要なのでは?

lelion1000
質問者

お礼

ドットはあると思います。 回答ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A