検索値が複数ある場合にはFINDの関数を使いました。loopとFINDNEXTを利用する時に、2回目検索すると、検索結果がNOTHINGとなってるので、エラーメッセージは「オブジェクト変数またWITHブロック変数が設定されてません」でした。原因わからないですので、助けてください。
With Range(Cells(明細配管のクラスNO行数, 2), Cells(prow, 2))
Dim 品名KeyWord As Range
Dim firstAddress As String
Set 品名KeyWord = .Find(what:="フランジ", LookIn:=xlValues)
If Not 品名KeyWord Is Nothing Then
' Nrow = Application.WorksheetFunction.Match(品名KeyWord, Worksheets("明細_配管材料").Range(Cells(明細配管のクラスNO行数, 2), Cells(prow, 2)), 0)
firstAddress = 品名KeyWord.Address
Do
Nrow = Application.WorksheetFunction.Match(品名KeyWord, Worksheets("明細_配管材料").Range(Cells(明細配管のクラスNO行数, 2), Cells(prow, 2)), 0)
'品名
Cells(prow, 2) = "ボルト・ナット"
'材質
For i = 1 To 4
SheetName = "IN-" & i
Set 材質KeyWord = Sheets(SheetName).Range("AQ27:AQ46").Find(what:=NOValue, LookIn:=xlValues)
If Not 材質KeyWord Is Nothing Then
Zrow = Application.WorksheetFunction.Match(材質KeyWord, Sheets(SheetName).Columns("AQ:AQ"), 0)
Cells(prow, 3) = Sheets(SheetName).Cells(Zrow, 29)
Exit For
End If
Next
'数量&口径の該当行列数
kValue = Cells(Nrow + 明細配管のクラスNO行数 - 1, 5) '口径サイズ
If kValue <> "" Then
Set 材質KeyWord = Sheets("ボルトナット形状").Columns("A:A").Find(what:=kValue, LookIn:=xlValues, lookat:=xlPart)
If Not 材質KeyWord Is Nothing Then
Krow = Application.WorksheetFunction.Match(材質KeyWord, Sheets("ボルトナット形状").Columns("A:A"), 0)
End If
End If
RValue = Cells(Nrow + 明細配管のクラスNO行数 - 1, 6) 'レーティング,Sch
If RValue <> "" Then
Set レーティンクKeyWord = Sheets("ボルトナット形状").Rows("1:1").Find(what:=RValue, LookIn:=xlValues)
If Not レーティンクKeyWord Is Nothing Then
Rcol = Application.WorksheetFunction.Match(レーティンクKeyWord, Sheets("ボルトナット形状").Rows("1:1"), 0)
End If
End If
'数量
Cells(prow, 9) = Sheets("ボルトナット形状").Cells(Krow, Rcol + 1)
'単位
If Cells(prow, 9) <> "" Then
Cells(prow, 10) = "本"
End If
'口径
Cells(prow, 5) = Sheets("ボルトナット形状").Cells(Krow, Rcol)
'仕様
If RValue = "JPI#150" Or RValue = "JPI#300" Then
Cells(prow, 4) = "ユニファイネジ 六角ボルト"
Else
Cells(prow, 4) = "メートルネジ 六角ボルト"
End If
prow = prow + 1
Set 品名KeyWord = Range(Cells(明細配管のクラスNO行数, 2), Cells(prow, 2)).FindNext(品名KeyWord)
Loop While Not 品名KeyWord Is Nothing And 品名KeyWord.Address <> firstAddress
End If
End With
Set 品名KeyWord = Range(Cells(明細配管のクラスNO行数, 2), Cells(prow, 2)).FindNext(品名KeyWord)
この文で品名KeyWord がNOTHINGになって、 Loop While Not 品名KeyWord Is Nothing And 品名KeyWord.Address <> firstAddressへいくと、「オブジェクト変数またWITHブロック変数が設定されてません」が出てきました。
実は同じデータ4つあるのに。。。。。
with....endwith の間にRangeのオブジェトをchangeすると、WITHブロック変数を破壊することをわかりました。
勝手にソースを掲示板に載せるのは失礼しました。しかし、原因を探す向きがわからない初心者にとっては、どうすればいいのか。
> 勝手にソースを掲示板に載せるのは失礼しました。
> しかし、原因を探す向きがわからない初心者にとっては、どうすればいいのか。
それは相談に乗る側にとっても、いつも悩みどころだったりします。
質問者自身が依存心からではなく、「それしか問題点を明確にする方法がない」と判断して
提示していることが文面から理解できる場合には、私はそれを否定しません。
しかし、「長いソースの提示即ち依存心の表れ」と判断しそれを好まない、
という方もいらっしゃいます。
どんな方にどう言われていくかは、ある意味運でしかないのかもしれません。
見知らぬ同士の文章によるコミュニケーションである以上、
やはりお互いに完全に理解できることは非常に難しく、
ある程度誤解や的外れな非難なども往々にしてあり得ます。
本当は、質問や相談を投げかける掲示板を絞り込み、
繰り返し会話していくことで自分自身をも理解してもらい、
交友関係を育てていくのがベストです。
「あの人のスキルならソース提示しか手がないよなー」
「あの人が質問してるんなら何とかしてあげたいなー」
と思ってもらえるようになればいいんですけどね。
質問に不慣れな方は、こういぅ掲示板を
「質問すれば誰かが回答をつけてくれる便利どころ」と認識しがちですが、
実は「自分よりもスキルの高い人間とコミュニケーションのチャンスが持てるところ」
だったりもします。
そのへんも頭の片隅に留めながら文章を書いていくと、
単なるQ&Aを超えていろいろ楽しくなったりするかもしれません。
さるべーじ 様
ありがとうございました。質問者の気持ちを理解頂いて深謝です。
これから、問題点を明確できるまで、もっともっと質問します。
> 勝手にソースを掲示板に載せるのは失礼しました。
> しかし、原因を探す向きがわからない初心者にとっては、どうすればいいのか。
>
ソースの提示は原因解明の有効手段だと思います。(但し、変わりにデバッグして
くれは勘弁^^;)
今回の場合、一行が長すぎる&コメントがない(前提条件でもどのようなものを作
成してるのかという説明がない)などで感情移入できないです。
他人のソースを読むときに感情移入できないとなんか書いてあるレベルになります
のでソースを提示して戴いてもそれで終わってしまいます。(単純なもの(数行)な
らそれでもいいのでしょうが・・・)
私も始めの方は見たのですが途中で諦めました。
あと質問自体も良く分からなかったです。(T.T)
Range、Cellsとか使ってるとこを見るとExcel?
If A And B then
↑はA、B共に式を必ず実行します。なので「品名KeyWord=Nothing」 でも
「品名KeyWord.Address」は実行されるので実行時エラーが出ます。
という回答を希望していたのではないですよね。(解決時のコメントを見ると)
>「あの人のスキルならソース提示しか手がないよなー」
>「あの人が質問してるんなら何とかしてあげたいなー」
> と思ってもらえるようになればいいんですけどね。
>
確かにそういうのはある時はありますね。^^
逆にあの人の質問はスルーしようとか。
ツイート | ![]() |