エクセル2000です
各部署の棚卸を纏める為のVBAを作成しているのですが、実行時にエラーになってしまいます
エラーメッセージは
「実行時エラー 91
オブジェクト変数またはWithブロック変数が設定されていません」
です
ご教授お願いいたします
Sub 棚卸()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheets("在庫集計票")
Set sh2 = Worksheets("棚卸表")
x = sh2.Range("A65536").End(xlUp).Row
Z = sh1.Range("d2").Value ’部署番号
sh1.Range(Cells(5, Z), Cells(3000, Z)).ClearContents
For i = 2 To x
y = sh1.Range("A2:A" & Range("A2").End(xlDown).Row). _
Find(sh2.Cells(i, "a")).Row ’ここでエラーが発生します
sh1.Cells(y, Z) = sh2.Cells(i, "c")
Next i
End Sub
No.5ベストアンサー
- 回答日時:
こんにちは。
まず、できるだけ、エラー番号は、その内容を書いてください。
91: オブジェクト変数または With ブロック変数が設定されていません。
それから、VBAやVBでは、大文字・小文字の違いはないのですが、なるべく、変数の小文字・大文字の区分けをしたほうが見やすいのではないかと思います。
なお、この内容は、本当に、以下のようなVBAが必要あるのか、ちょっと良くわかりません。関数で、かなり代用できる部分があれば、それを置き換えてしまってもよいと思います。
Sub 棚卸r()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim rng As Range
Dim x As Long, y As Long, i As Long, z As Integer
Dim rFind As Range
Set sh1 =Worksheets("在庫集計票")
Set sh2 =Worksheets("棚卸表")
x = sh2.Range("A65536").End(xlUp).Row
z = sh1.Range("D2").Value '部署番号
Application.ScreenUpdating = False
With sh1
.Range(.Cells(5, z), .Cells(3000, z)).ClearContents
Set rng = .Range("A2", .Range("A2").End(xlDown))
If rng(rng.Count).Row = Rows.Count Then MsgBox "対象列は空です": Exit Sub
End With
For i = 2 To x
Set rFind = rng.Find(sh2.Cells(i, "A"))
If Not rFind Is Nothing Then
y = rFind.Row
sh1.Cells(y, z) = sh2.Cells(i, "C")
End If
Next i
Application.ScreenUpdating = True
End Sub
ありがとうございます
エラーメッセージは、本文の最初のほうに書かせていただきましたが、タイトル部につけたほうが分かりやすかったですよね
今後、気をつけます
エラーは出ませんでしたが、思うような動作をしてくれません
私の根本的な考え方にミスがあるのかと思います
もう一度,組立を考えるところから始めたいと思います
No.4
- 回答日時:
以下の方法では、どおですか?
With sh1.Range("A2:A" & Range("A2").End(xlDown).Row)
For i = 2 To x
Set y = .Find(sh2.Cells(i, "a").Row)
If y Is Nothing Then
'エラー処理
Else
.Cells(y, Z) = sh2.Cells(i, "c")
End If
Next
End With
ありがとうございます
エラーは出ませんでしたが、思うような動作をしてくれません
私の根本的な考え方にミスがあるのかと思います
もう一度,組立を考えるところから始めたいと思います
No.3
- 回答日時:
改行のせいではないですか?
Findの前に空白があるからでは?
y = sh1.Range("A2:A" _
& sh1.Range("A2").End(xlDown).Row).Find(sh2.Cells(i, "a")).Row
として見ればどおですか?
No.2
- 回答日時:
#01です。
1行抜けていました。With sh1
Set rng = .Range("A2:A" & .Range("A2").End(xlDown).Row). _
Find(sh2.Cells(i, "a"))
If rng Is Nothing Then
'エラー処理
Else
y = rng.Row
.Cells(y, Z) = sh2.Cells(i, "c")
End If
End With
No.1
- 回答日時:
sh2がアクティブな状態で実行するとエラーになります。
sh1がアクティブなら動くでしょう。y = sh1.Range("A2:A" & sh1.Range("A2").End(xlDown).Row). _
Find(sh2.Cells(i, "a")).Row
でエラーは消えると思います。
でもFindメソッドが失敗(Not Found)だったらまたエラーになりますよ。いきなり
sh1.Cells(y, Z) = sh2.Cells(i, "c")
するまえにエラー判定処理を組み込むことをお勧めします
With sh1
Set rng = .Range("A2:A" & .Range("A2").End(xlDown).Row). _
Find(sh2.Cells(i, "a"))
If rng Is Nothing Then
'エラー処理
Else
sh1.Cells(y, Z) = sh2.Cells(i, "c")
End If
End With
この回答への補足
ありがとうございます
教えていただいたように変更し、更にsh1をアクティブな状態で実行しました
ですが、まだ、同じ箇所で同じエラーが出ます
何が原因なのでしょうか
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 2つ目のコンボボックスが動作しません。 3 2023/03/25 12:29
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) 【VBA】ボタンに登録したマクロがエラーになる 4 2022/07/25 17:47
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Excel(エクセル) R列の1111/11/11以外、且つQ列の×の条件で該当行のAからAE列までオレンジに塗りつぶす 2 2022/07/02 10:18
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBA 別シートの複数の...
-
シャープのアクオス sh-m25 を...
-
excel:色付き文字の抽出と変換法
-
重複データの集計マクロについて
-
VBA 貼付先範囲(行)がいっぱ...
-
VBA別シートの最終行の下行へ貼...
-
[EXCEL]全てのチェックボックス...
-
Excel VBA元データから別シー...
-
Excel VBA インデックスの境...
-
WorkbooksとWorksheetsを簡単に...
-
エクセルVBAで 2種のリストを...
-
スマホ機種変更で旧機種のGoogl...
-
LAVIE Direct DT PC-GD298ZZAL...
-
外付けHDDをフローリングに落と...
-
ドコモの電話帳バックアップに...
-
拡張子「.HUF(.huf)」のファ...
-
au(MEDIASKIN)からiPhoneへの...
-
Docomo携帯メールをコピーした...
-
パソコンから携帯でフルうたを
-
自作した3pgかmp4ファイルを着...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel で行を指定回数だけコピ...
-
エクセルVBA 別シートの複数の...
-
シャープのアクオス sh-m25 を...
-
excelの差込印刷で可視セルだけ...
-
Excel VBA インデックスの境...
-
VBA:同じ文字列データの比...
-
エクセルVBAで 2種のリストを...
-
エクセル:VBAで月変わりで、自...
-
歯抜けの時間を埋めて行の挿入
-
エクセルVBAで SendKeys "{TAB}"
-
VBAで条件が一致する行のデータ...
-
VBA別シートの最終行の下行へ貼...
-
EXCELマクロで全シート対...
-
Excel VBAでシート内全体に非表...
-
VBA 貼付先範囲(行)がいっぱ...
-
VBAで複数シート選択
-
【VBA】UserForm1の中で使うワ...
-
【WORD差し込み印刷】複数レコ...
-
VBAで複雑な構成の転記
-
エクセルVBAでの日付順のデ...
おすすめ情報