
エクセル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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBA :2回目以降実行で貼...
-
VBA:同じ文字列データの比...
-
エクセルVBAで SendKeys "{TAB}"
-
Excel VBA インデックスの境...
-
VBA 最終行取得からの繰り返し貼付
-
excelの差込印刷で可視セルだけ...
-
Excel VBA 複数条件にマッチし...
-
エクセルVBAで 2種のリストを...
-
VBAの指示の内容 昨日こちらで...
-
【WORD差し込み印刷】複数レコ...
-
歯抜けの時間を埋めて行の挿入
-
代替機にキズ
-
FOMAカード(UIM)異常
-
携帯修理出して戻ってきたら、L...
-
スマホ機種変更で旧機種のGoogl...
-
ケータイの電源がいきなり落ち...
-
携帯の機種変更について
-
Ver.2.0のVideoPadが欲しい!!...
-
USBメモリからデータが読み取れ...
-
ストレージが減りません。 スト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelマクロで空白セルを詰めて...
-
Excel で行を指定回数だけコピ...
-
エクセル:VBAで月変わりで、自...
-
Excel VBA インデックスの境...
-
excelの差込印刷で可視セルだけ...
-
エクセルVBAで 2種のリストを...
-
エクセルVBAで SendKeys "{TAB}"
-
歯抜けの時間を埋めて行の挿入
-
VBA:同じ文字列データの比...
-
VBA別シートの最終行の下行へ貼...
-
VBA 最終行取得からの繰り返し貼付
-
VBA 貼付先範囲(行)がいっぱ...
-
エクセル2007で、マクロで、結...
-
エクセルVBA 別シートの複数の...
-
Excel VBAでシート内全体に非表...
-
Excelマクロ データが上書きさ...
-
EXCELマクロで全シート対...
-
excel:色付き文字の抽出と変換法
-
VBAで条件が一致する行のデータ...
-
データ入力シートから別シート...
おすすめ情報