[[20190713212547]] 『エラー オブジェクトが必要です』(すいか) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『エラー オブジェクトが必要です』(すいか)

VBA初心者です。
色々調べましたが、なぜエラーが起きるのかわかりません。
どなたかご教授お願い致します。

エラー424 オブジェクトが必要ですと表示されます

********************************

Sub test()

Dim sht As Worksheet
Dim Row As Long

Row = Cells(Rows.Count, 1).End(xlUp).Row

For Each sht In Worksheets

    Select Case sht.Name
        Case "操作", "集計"
        Case Else
            sht.Range("A1").CurrentRegion.Offset(1, 0).Copy _   ※ここでエラー
            Sheets("集計").Cells(Row, 1).End(xlUp).Row.Offset(1, 0)
    End Select
Next

End Sub

*************************************************

< 使用 Excel:Excel2016、使用 OS:Windows10 >


Row.Offset(1,0)
の部分だと思います。
Rowは数値であり、オブジェクトではないので、offsetは使えません。

Rowをはずしてみては?

(渡辺ひかる) 2019/07/13(土) 21:46


ありがとうございます

修正してエラーは出なくなりましたが、結果が求めるものとは違っていました。
完了イメージとして、各シートにある値を、シート集計に貼り付けることですが、
結果は、最終シートの結果のみの貼り付けとなっております。

もう一アドバイスお願い致します。
(すいか) 2019/07/13(土) 22:01


Row = Cells(Rows.Count, 1).End(xlUp).Row
が固定だから
同じセルに上書きされてしまうのだと思います。

これで分かりますか?

(渡辺ひかる) 2019/07/13(土) 22:07


アドバイスありがとうございます
Caseの中に入れたら上手くまく行きました。

ただ、Caseの中に入れない時は別のやり方はありますか?

修正後

******************************************

Sub test()
Dim sht As Worksheet
Dim Row As Long

For Each sht In Worksheets

    Select Case sht.Name
        Case "操作", "集計"
        Case Else
            Row = Cells(Rows.Count, 1).End(xlUp).Row
            sht.Range("A1").CurrentRegion.Offset(1, 0).Copy _
            Sheets("集計").Cells(Row, 1).Offset(1, 0)
    End Select
Next

End Sub
(すいか) 2019/07/13(土) 22:11


横からですが、たぶんこうしたかったのでは?

   Sub test_改()
      Dim sht As Worksheet
      Dim Row As Long
      Row = Cells(Rows.Count, 1).End(xlUp).Row
      For Each sht In Worksheets
          Select Case sht.Name
              Case "操作", "集計"
              Case Else
                  sht.Range("A1").CurrentRegion.Offset(1, 0).Copy _
                  Sheets("集計").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
          End Select
      Next
   End Sub

(もこな2) 2019/07/13(土) 22:18


失礼。Rowという変数要らないと思うのでこうですね。

   Sub test_改()
      Dim sht As Worksheet

      For Each sht In Worksheets
          Select Case sht.Name
              Case "操作", "集計"
              Case Else
                  sht.Range("A1").CurrentRegion.Offset(1, 0).Copy _
                  Sheets("集計").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
          End Select
      Next
   End Sub

(もこな2) 2019/07/13(土) 22:24


ありがとうございます。
その通りです。

本来なら別スレを立てるべきでしょうが、都度都度エラーが出るのでアドバイスお願い致します。
エラー: メソッド・データメンバがみつかりません。
やりたいこと: 各シートのA列をB-F列にコピーしたい

Sub test2()

Dim sht As Worksheet
Dim Rng As Range

Set Rng = Range("A")

For Each sht In Worksheets

    Select Case sht.Name
        Case "操作", "集計"
        Case Else
            sht.Rng.Copy sht.Range("B:F") ←ここでエラーがでます
    End Select
Next
End Sub
(すいか) 2019/07/13(土) 22:33

やりたいことを自動記録してみて、コードを眺めてみては?
(渡辺ひかる) 2019/07/13(土) 22:58

ありがとうございます。
arrayを使用すると望む結果にはなりました。

シートが20ある場合だと20も代入するのでeachを使用して処理したいのです。
(すいか) 2019/07/14(日) 10:09



>本来なら別スレを立てるべきでしょうが、
私見ですが、関連がある話なのでこちらで続けた方がよいとおもいます。


>メソッド・データメンバがみつかりません。
たぶん、【sht】というシートオブジェクトに対して【Rng.Copy】というメソッドを実行しなさい。
っていう意味と理解され、シートオブジェクトのメンバーに、そのようなメソッドは無い。って怒られているんだとおもいます。


質問された箇所以前に、

 Set Rng = Range("A") 

アクティブシートの「A」という名前を付けたセル範囲 という意味になっていると思われますので直した方がよいとおもいます。


 〜.Copy  sht.Range("B:F") 

今回は、1列をずらしながらコピーして並べたいのですよね?
これだと、意味が違っちゃいますよ


想像で補完して、修正してみました。
コンパイルエラーにならないことくらいしかチェックしてませんが、興味があればステップ実行して研究してみてください。

   Sub test2()
      Dim dstRNG As Range
      Dim sht As Worksheet

      Set dstRNG = Worksheets("集計").Range("A2")

      Stop '←ブレークポイントの代わり

      For Each sht In Worksheets
         If sht.Name <> "操作" And sht.Name <> "集計" Then
            dstRNG.Offset(-1).Value = sht.Name
            sht.Range("A1", sht.Cells(Rows.Count, "A").End(xlUp)).Copy dstRNG

            Set dstRNG = dstRNG.Offset(, 1)
         End If
      Next sht

   End Sub

(もこな2) 2019/07/14(日) 10:47


もこな2さん詳しい説明ありがとうございます。

解決しました
(すいか) 2019/07/14(日) 12:44


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.