• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAにて、セルの内容と一致しない場合の処理)

VBAでセルの内容と一致しない場合の処理

このQ&Aのポイント
  • VBAを独学で学んでいる者が、セルの内容と一致しない場合の処理について質問しています。
  • VBAでIEを操作し、セルの内容を自動入力するプログラムを作成していますが、一致しない場合にエラーメッセージを表示する方法がわかりません。
  • 条件分岐を使用して一致しない場合にエラーメッセージを表示することができると思っていますが、現在の記述ではうまく機能しません。どのように記述すれば良いのか、教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.4

またまた登場です。 少々の理解力はあるつもりなんですが、今回はどうもいまいちやりたいことがわかりかねます。。(^^;;; ようするに次のようなことですか?  Cells(lineIndex, 1)の内容が、Linksオブジェクトの中になければ、エラーメッセージを表示して、プロシージャを終了する。   '-------------------------------------------------  For n = 0 To objIE.document.Links.Length - 1    If objIE.document.Links(n).innertext = ActiveSheet.Cells(lineIndex, 1).Value Then     ●有った時の処理●     Exit Sub    End If  Next 'ここへ抜けたということは、該当のものがなかったということなので    MsgBox "NG!!", vbExclamation End Sub '-------------------------------------- Forで、Linksコレクションの中を全部探して、Forを抜けたら、該当データはなかったことになる コードを小出しにされてるのでアドバイスできるのはこの程度です。 こういった類の質問は、   実際のデータを提示   実際のコードを全て提示   そして、やりたいことを箇条書きにする これらのことを提示されると解決が早いと思われます。 また他の方からもよりよい回答が寄せられると思います。 やりたいことの全貌は見えませんが、何かしら面白そうなことをやっていそうなので、ちょと興味あり。 で、30分ごとに覗いて見ませう。。  

metal3100c
質問者

お礼

onlyromさん、当方のような者にお付き合いいただき、ありがとうございます。 稚拙な表現により、困惑させてしまいましたこと、お許しください( ー_ー) しかし、onlyromさんのご回答がヒントとなり、当方が行いたいことを実現できると思います!! 当方の記述は For n = 0 To objIE.document.Links.Length - 1    If ~~~ Then    End If    Exit For Next ●以下よりその後の記述● ・・・というような物だったんですが、 Nextの後に、その後の操作を入れていたことが原因と思われます。 このような記述ではなく、End Ifの後にその後の操作を入れ、 Nextで閉じる必要があったようです。。。 お騒がせいたしました。 この件が落ち着きましたら、基礎からじっくり勉強していきたいと思っています。 何ぶん、初めてのVBA作成でして・・・(汗 やりたいことを表現するのも難しいものですね・・・。 わからない箇所を具体的に説明する能力も必要と感じました。 当方、セルに入力した内容を元に、サイト作成を半自動で行いたかったのです。 Cells(lineIndex, 1)の位置にタイトルを設定していましたので、これが間違っていたり、かぶってしまうと判断できなければ、同じタイトルに対し同じ処理をしてしまう(同じサイトを作ってしまう)ので、これを予防したかったのです。 また質問させていただくかもしれませんが、今後とも宜しくお願い致します。

その他の回答 (3)

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.3

>Elseを入れてしまうと、最初のLinks「0のあああ」に対してElseが効いてしまうため、 >Cells(1,1)「ううう」まで行き着かずElseの処理をしてしまう、ということでしょうか? そのとおりです。 で、実際の並びはどうなっているのでしょうか。 実際では、Cells(1,1)の内容は linksコレクションの1番目にあるのでしょうか? 何れにしろ、提示のFor文に値をひとつずつ当てはめてみればお分かりになると思いますが。  

metal3100c
質問者

補足

実際の並びなんですが・・・ まずVBAにてCells(1,1)(あああとします)の内容をHTMLに反映し、その「あああ」をVBA次回起動時に再度HTML内に探しに行く、ということを自動で行うものなんです。 つまりそのHTMLは常に変化するため、 実際の構文はCells(1,1)ではなく、 Do While Cells(lineIndex, OK).Text = "OK" lineIndex = lineIndex + 1 Loop Cells(lineIndex, 1) ・・・といったものを使っているため、特定の語句「あああ」を探しに行くものではなく、常に変化するCells(lineIndex, 1)を探したいため、nの番号は毎回変わります。 ですので、 For n = 0 To objIE.document.Links.Length - 1 'リンク数分まわす Debug.Print objIE.document.Links(n).innertext 'デバックで表示する 'リンク先(.text)をチェックする(文字列比較する) If objIE.document.Links(n).innertext <> ActiveSheet.Cells(lineIndex, 1).Text Then MsgBox "NG!!", vbExclamation Exit Sub End If Next ・・・という、=を<>に変えた構文を最初に持ってきてあげたりしたのですが、これですと、リンクのinnertext情報を拾ってくれませんでした。 とりあえず、Cells(lineIndex, 1)と一致した場合は望むような作業をしてくれるのですが、一致しない場合に処理を停止するような構文を記述したいのです。 初心者ゆえ、説明もままなっていないかと思いますが、引き続き宜しくお願い致します。

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.2

  質問の文言にちょと理解しかねるところがありますが。。。(^^;; >Elseを入れると、Cells(1, 1)の内容と一致しているにも関わらず Cells(1,1)の内容と同じものがLinksコレクションの中にあるにはあるが、 それは、コレクションの【1番目】にあるのではなくて、2番目以降にあるのではありませんか 言いたいことは、次のようなことです。 Cells(1,1) の内容   「ううう」 Linksコレクションの順番と内容   0 あああ   1 いいい   2 ううう   3 えええ このように、Cells(1,1)の内容が、Linksコレクションの一番最初になければ、 提示のコードでは、質問のようになるのは当然ですよね。   勘違いでしたらご容赦願います(^^;;;  

metal3100c
質問者

補足

ご回答ありがとうございます。 質問の文言がわかり辛いもので申し訳ありません。 onlyromさんがおっしゃられていることは、つまり、 Cells(1,1)の内容と同じものがLinksコレクションの中にあるにはあるが、 Elseを入れてしまうと、最初のLinks「0のあああ」に対してElseが効いてしまうため、 Cells(1,1)「ううう」まで行き着かずElseの処理をしてしまう、ということでしょうか?

  • E-HR33
  • ベストアンサー率25% (20/78)
回答No.1

見た限りあってると思いますが・・・ 一致しない場合ELSEに飛ぶんですよね?

metal3100c
質問者

補足

>一致しない場合ELSEに飛ぶんですよね? はい、一致しない場合にElseに飛ばすように記述したいのですが・・・。 「If objIE.document.Links(n).innertext = ActiveSheet.Cells(1, 1).Text Then」内の「=」を「<>」に変え、Elseの前にNGメッセージを入れても同じ結果になってしまいます。 以下のような sitehtml = objIE.document.body.innertext If InStr(sitehtml, ActiveSheet.Cells(1, 1).Text) <> ActiveSheet.Cells(1, 1).Text Then MsgBox "一致しません" Exit Sub End If ・・・という構文なども使用してみましたが同じ現象でした。

関連するQ&A

専門家に質問してみよう