
実行時エラー1004
Rangeメソッドは失敗しました:_Worksheetオブジェクト
というエラーメッセージが With ws の次の行で出ます。
何が間違っているのか分からないのですが、どう直せばいいのかご教示いただけますでしょうか?
Sub Macro1()
Dim ws As Worksheet
Dim i As Integer
Dim r As Integer
Set ws = ActiveSheet
For i = 4 To 704
With ws
If .Range(.Cells(i, 2)).Value = "前年" Then
.Range(.Cells(i, 3), .Cells(i, 14)).Value = _
.Range(.Cells(i, 3).Offset(1, 0), .Cells(i, 14)).Offset(1, 0).Value
If .Range(.Cells(i, 2)).Value = "今年" Then
.Range(.Cells(i, 3), .Cells(i, 14)).Value = ""
End If
End If
やりたい事は、B列に前年と今年が交互に複数行入っていて、間に空白行が2行入り、また前年と今年が複数行入り、全支店分が続きます。
列はC列~N列まで12か月分のデータが入り、O列に横の合計が入ります。
これを、B列上の前年が見つかれば一つ下の今年のデータを前年にコピペして、(一つ下に)今年が見つかればその行のC~N列のデータを空白行にしたいです。
No.5ベストアンサー
- 回答日時:
以下のようにしてください。
Sub Macro1()
Dim ws As Worksheet
Dim i As Integer
Dim r As Integer
Set ws = ActiveSheet
For i = 4 To 704
With ws
If .Cells(i, 2).Value = "前年" Then
.Range(.Cells(i, 3), .Cells(i, 14)).Value = _
.Range(.Cells(i + 1, 3), .Cells(i + 1, 14)).Value
If .Cells(i + 1, 2).Value = "今年" Then
.Range(.Cells(i + 1, 3), .Cells(i + 1, 14)).Value = ""
End If
End If
End With
Next
End Sub
No.6
- 回答日時:
こんにちは
すでに回答にあるように、「Rangeメソッドは失敗しました」はセル範囲の指定がうまくできていないという意味になります。
補足の図がよく見えないのではっきりとはわからないのですが、想像するところ、こんなことをなさりたいのではないかと・・
If .Cells(i, 2).Value = "前年" Then
.Cells(i, 3).Resize(, 12).Value = .Cells(i + 1, 3).Resize(, 12).Value
ElseIf .Cells(i, 2).Value = "今年" Then
.Cells(i, 3).Resize(, 12).ClearContents
End If
ありがとうございました。
具体的にコードを記述していただき勉強になりました。
ただ、それより先に具体的にコードを記述していただいた方にベストアンサーとさせていただきました。
No.4
- 回答日時:
> B列の変数i行に前年がみつかれば~は具体的にどのような記述になりますか?
> 教えていただけますか?
すでにNo.3さんが回答されてますが、
If .Cells(i, 2).Value = "前年" Then
でOKです。(Rangeは不要。)
気になるところは、ブレークポイント設定してから実行すればそこで一度止まってくれますので、「デバック」-「クイックウォッチ」とか使って、自分が意図した通りの内容を持ってきているか?をチェックしてみると良いですよ。
ありがとうございます。まだ全然勉強中なので、デバックして見てもまだ理解できませんでした。そちらの勉強もこれからいていきたいです。
大変勉強になりましたが、今の私は時間が無かったので具体的にコードを記述していただいた方から選ばせていただきました。
No.3
- 回答日時:
.Range でセルを決めなくても、1つのセルなら .Cells(i,2).Value でも良いですよ。
範囲にしたい時は必要ですけど。
あと
.Range(.Cells(i, 3), .Cells(i, 14))
と
.Range(.Cells(i, 3).Offset(1, 0), .Cells(i, 14)).Offset(1, 0)
これですとセルの個数違いませんか?
上記は変数:i の1行に対し、下記は変数:i + 1 ~ i と2行になってます。
列数は同じですが行数の違いで入りきらないかも。
行をずらしたければ簡単なのは共に行を i + 1 にする事かな?
No.2
- 回答日時:
>B列に前年と今年が交互に複数行入っていて、間に空白行が2行入り、また前年と今年が複数行入り、全支店分が続きます。
レイアウトは添付の画像のようになっていると理解しました。
そうすると、B列に前年が見つかった場合、3つ下に今年が見つかるのではないでしょうか。1つ下は、空白になると思いますが、いかがでしょうか。

No.1
- 回答日時:
> If .Range(.Cells(i, 2)).Value = "前年" Then
ここでエラーが出るってことですよね?
このIF文を読む限り、「.Cells(i, 2)」に「A1」とか「C5」とか、セルの位置を指定する文字列が入っている、と読めますが、それが間違ってませんか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 今日の日付が過ぎたらその行を削除したい 1 2023/04/01 20:06
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
このQ&Aを見た人はこんなQ&Aも見ています
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。
-
許せない心理テスト
皆さんがこれまで受けた中で許せない心理テストがあれば教えていただきたいです。
-
人生で一番思い出に残ってる靴
皆さんの人生で一番思い入れのある靴の話を伺ってみたいです。
-
一番好きなみそ汁の具材は?
みんなで大好きなみそ汁の具材について語り合おうよっ!
-
準・究極の選択
「年収1000万円で一生カレーライス」か「年収180万円で毎日何でも食べ放題」
-
Rangeメソッドは失敗しました。globalオブジェクトについて
Excel(エクセル)
-
Worksheets メソッドは失敗しました。のエラー処理のやり方
Visual Basic(VBA)
-
'Range'メソッドは失敗しました
Excel(エクセル)
-
-
4
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
5
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
6
Access VBAで行ラベルが定義されていないというエラーが出ます
Access(アクセス)
-
7
VBAマクロ 実行時エラーが出たり出なかったり
Excel(エクセル)
-
8
マクロの「SaveAs」でエラーが出るのを解消したいです(再)
Visual Basic(VBA)
-
9
マクロの「Rangeメソッドは失敗しました’Globalオブジェクト」エラーの解決方法について
Excel(エクセル)
-
10
なぜこんな初歩的なVBAのIf文でエラーか発生して使えないのか、全く理解出来ません。誰か助けてくださ
Visual Basic(VBA)
-
11
VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
vba 2つの条件が一致したら...
-
IIF関数の使い方
-
Excelで、あるセルの値に応じて...
-
【VBA】2つのシートの値を比較...
-
文字列の結合を空白行まで実行
-
URLのリンク切れをマクロを使っ...
-
VBAのFind関数で結合セルを検索...
-
B列の最終行までA列をオート...
-
rowsとcolsの意味
-
VBAで指定範囲内の空白セルを左...
-
DataGridViewに空白がある場合...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
【Excel VBA】 B列に特定の文字...
-
Worksheets メソッドは失敗しま...
-
Cellsのかっこの中はどっちが行...
-
空白セルをとばして転記
-
C# dataGridViewの値だけクリア
-
エクセルでメタタグを抽出する...
-
複数の列の値を結合して別の列...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
B列の最終行までA列をオート...
-
Excelで、あるセルの値に応じて...
-
Cellsのかっこの中はどっちが行...
-
Worksheets メソッドは失敗しま...
-
vba 2つの条件が一致したら...
-
VBAのFind関数で結合セルを検索...
-
IIF関数の使い方
-
VBA 何かしら文字が入っていたら
-
URLのリンク切れをマクロを使っ...
-
【VBA】2つのシートの値を比較...
-
Changeイベントでの複数セルの...
-
VBAで指定範囲内の空白セルを左...
-
【Excel VBA】 B列に特定の文字...
-
データグリッドビューの一番最...
-
VBAで、特定の文字より後を削除...
-
文字列の結合を空白行まで実行
-
VBAを使って検索したセルをコピ...
-
二つのリストを比べて部分一致...
-
マクロについて。S列の途中から...
-
マクロ 最終列をコピーして最終...
おすすめ情報
tatsumaru77様
分かりずらく申し訳ありません
画像の様になっております
rabbit_9999様
B列の変数i行に前年がみつかれば~は具体的にどのような記述になりますか?
教えていただけますか?
ご回答ありがとうございます
i+1で前年の数字が今年に入りました。ありがとうございます。
また、Rangeを抜くことでエラーが回避されました。ありがとございます。
ただ、二つ目のifで今年行C~Nを空欄にしたかったのですが、数字が残ったままです。
何がおかしいのでしょうか?
tatsumaru77様
具体的なコードの記述ありがとうございます。
ただ、2つ目のifで空欄になりません。
何がおかしいのでしょうか?