[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『オブジェクト変数またはwithブロック変数が設定されていません。について』(ももい)
いつもお世話になっています。
タイトルにもある通りのエラーがでてしまいます。
原因を教えていただければと思います。
別ブック参照のwithブロックの中で処理しているからエラーがでているのかなと思ったり。。。
一応、"zz"にほしい行の値とかは入っているんですよね。エラーで実行できないだけで。
わかる方いましたらお願いします。
Dim retsu As Long
retsu = kokyaku.Column
Dim keyWord As Variant Dim lastcon As Long Dim myobj As Range Dim i As Long Dim z Dim zz As Long Dim lastrow As Long Dim mycell As Long
lastcon = Cells(Rows.Count, 2).End(xlUp).Row
With Workbooks("AAA.xls").Worksheets("BBB")
lastrow = .Cells(.Rows.Count, 7).End(xlUp).Row
For i = 5 To lastrow Step 2
Set myrange = Range(Cells(2, 3), Cells(lastcon, 3)) keyWord = .Cells(i, 7) Set myobj = myrange.Find(keyWord, lookat:=xlWhole)
zz = myobj.Row ←←←ココでエラー
z = Cells(zz, retsu).Value Cells(i + 1, 11) = z
Next i
End With
End If End If End sub
< 使用 Excel:Excel2013、使用 OS:Windows10 >
Dim test()
Dim retsu As Long retsu = kokyaku.Column Dim keyWord As Variant Dim lastcon As Long Dim myobj As Range Dim i As Long Dim z Dim zz As Long Dim lastrow As Long Dim mycell As Long lastcon = Cells(Rows.Count, 2).End(xlUp).Row With Workbooks("AAA.xls").Worksheets("BBB") lastrow = .Cells(.Rows.Count, 7).End(xlUp).Row For i = 5 To lastrow Step 2 Set myrange = Range(Cells(2, 3), Cells(lastcon, 3)) keyWord = .Cells(i, 7) Set myobj = myrange.Find(keyWord, lookat:=xlWhole)
'--------------追加 If myobj Is Nothing Then MsgBox "Findメソッドを実行した結果見つかりませんでした" Exit Sub End If '--------------追加おわり
zz = myobj.Row '←←←ココでエラー z = Cells(zz, retsu).Value Cells(i + 1, 11) = z Next i End With End If End If End Sub
(もこな2) 2018/06/28(木) 12:13
そのほか、インデントがついてなかったり、無駄に変数を経由させてたりして見づらかったので書き直しました。
テストはしてないですけど、コンパイルエラーにはならないのでたぶん大丈夫・・・・(だといいなぁ・・)
Sub test() Const retsu As Long = 3 '←ホントは何が入って欲しいのかわからないのでC列として
Dim i As Long Dim keyWord As Variant Dim MyOBJ As Range
With Workbooks("AAA.xls").Worksheets("BBB") For i = 5 To .Cells(.Rows.Count, "G").End(xlUp).Row Step 2
keyWord = .Cells(i, 7).Value
With .Range(.Range("C2"), .Cells(.Cells(.Rows.Count, "B").End(xlUp).Row, "C")) Set MyOBJ = .Find(keyWord, lookat:=xlWhole)
If MyOBJ Is Nothing Then MsgBox .Address(0, 0) & "の範囲を「" & keyWord & "」で完全一致検索しましたが見つかりませんでした" Else .Parent.Cells(i + 1, 11) = .Parent.Cells(MyOBJ.Row, retsu).Value End If End With Next i End With End Sub
(もこな2) 2018/06/28(木) 12:57
myobjがNothingのままなので、
myobj.Row と行番号を取る命令をしても、
myobjに何も代入されてないので、
「オブジェクト変数が設定されていません。」
と、叱られます。
セル範囲が指定されてこその行番号なので、
何もなければ行番号は返せませんよね?
Findメソッドは何も見つからなかったら、
Nothingを返しますので、
もこな2さんのサンプルのようにNothingの時は
myobj.Rowの行を実行しないように条件分岐をします。
(まっつわん) 2018/06/28(木) 13:15
まっつわんさん nothingの分岐は絶対なんですね。
勉強になりました。
もなこ2さん 考えてくださり非常にありがたいのですがうまくいきませんでした。
やりたいことが、仮に
ブック2の単語の列があってそれを順番にブック1のC列の中から完全一致で抽出して列番号を求めて、ブック2に転記したいということでして。複雑で申し訳ないです・・言葉だと説明がすごい難しい
ちょっと直せばできそうなのでがんばってみます。
(ももい) 2018/06/28(木) 21:01
>うまくいきませんでした。
どのようにうまくいかなかったのか、説明されると回答が付くかもですね。
>やりたいことが、仮にブック2の単語の列があってそれを順番にブック1の
>C列の中から完全一致で抽出して列番号を求めて、ブック2に転記したいということでして
それならちゃんとそう伝えないと回答者もExcel君もどうすればいいのかわかりません。
もっと言えば、どのブック、どのシート、どのセル(あるいは列や行)って伝えないとわかりません。
【おまけ1】
[[20180405152857]]←で部分一致している行を探す方法について書いたものです。
完全一致でも考え方はだいたい一緒だとおもいますので、実験用コードを提供します。
いろんなアプローチがあるとおもいますが、新しいブック(シート)を用意して、以下のコードを標準モジュールに張り付けたうえでステップ実行してみてください。
Sub 一致するデータを探す() 'テスト用データ生成 Range("B1:D1").Value = Array("あ", "い", "う") Range("B2:D2").Value = Array("え", "お", "か") Range("B3:D3").Value = Array("き", "く", "け") Range("B4:D4").Value = Array("こ", "さ", "し") Range("B5:D5").Value = Array("す", "せ", "そ")
With Range("A1") .Formula = "=B1&C1&D1" .AutoFill Destination:=.Resize(5) End With
Stop
Dim MyRNG As Range, MyRow As Variant
'FINDメソッドでアプローチ With Range("A1:A5") Set MyRNG = .Cells.Find _ (What:="く", LookIn:=xlValues, LookAt:=xlPart) If Not MyRNG Is Nothing Then MsgBox MyRNG.Row & "行目でみつかりました" End If End With
'MATCH関数でアプローチ MyRow = Application.Match("*く*", Range("A1:A5"), 0) If Not IsError(MyRow) Then MsgBox MyRow & "行目でみつかりました" End If
'For〜NEXTによるループでアプローチ For MyRow = 1 To 5 Step 1 If Cells(MyRow, "A").Value Like "*く*" Then MsgBox MyRow & "行目でみつかりました" Exit For End If Next MyRow End Sub
【おまけ2】
Findメソッド使うなら読んでおいた方がいいとおもいます。
検索に失敗するとき(Findメソッドの引数省略時に起きる失敗)
https://www.moug.net/tech/exvba/0150111.html
(もこな2) 2018/06/29(金) 00:04
もこなさん
返信大変遅れましてすみません!
無事アドバイス通り行ったらできました。
rangeをもっと上手に使っていきたいのでさらに勉強したいと思います。
ありがとうございました(__)
(ももい) 2018/06/29(金) 17:19
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.