質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Q&A

解決済

3回答

3547閲覧

[vba][for文&if文]初心者です。この文がなぜ実行できないのかの質問です。

tnaka11

総合スコア6

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

0グッド

0クリップ

投稿2015/03/29 14:46

編集2015/03/30 09:29

初心者です。IEは出てくるのですが、MsgBoxが出てきません。
何故出てこないかをわかりやすく教えてください。よろしくお願いします。
最終的な目標はarticleタグ内の住所や会社名などを一つ一つexcelに取得することです。

lang

1Sub ie_test() 2 Dim ie As InternetExplorer 3 Dim doc As HTMLDocument 4 Dim i As Long 5 6 Set ie = CreateObject("InternetExplorer.Application") 7 ie.Visible = True 8 ie.Navigate "http://itp.ne.jp/genre_dir/restaurant/?sr=1&ngr=1&evdc=1&st=4" 9 Do While ie.Busy Or ie.ReadyState < READYSTATE_COMPLETE 10 DoEvents 11 Loop 12 13 Set doc = ie.Document 14 15 16 For i = 0 To doc.all.Length - 1 17 If doc.all(i).tagName = "article" Then 18 If doc.all(i).innerText = "群馬県桐生市相生町" Then 19 MsgBox doc.innerText 20 21 Exit For 22 End If 23 End If 24 Next i 25 26End Sub 27

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

articleタグかどうかを判定する際に、大文字・小文字のどちらかに揃えたうえで比較した方がよさそうです。

lang

1If doc.all(i).tagName = "article" Then

lang

1If LCase(doc.all(i).tagName) = "article" Then

ということで、Forループ部分を下記のように書き換えれば、articleタグ内の文字列が一つ一つ表示されるようになるのではないかと。

lang

1 For i = 0 To doc.all.Length - 1 2 If LCase(doc.all(i).tagName) = "article" Then 3 MsgBox doc.all(i).innerText 4 End If 5 Next i

投稿2015/03/30 10:18

alg

総合スコア2019

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tnaka11

2015/03/30 11:09

有り難うございます。無事に思い通り動きました。 若干感動してしまいました。どうも有難うございます。
guest

0

実行環境が無くて確認できず申し訳ないのですが、以下のコードではMsgBoxには何が現れますか?

lang

1Sub ie_test() 2 Dim ie As InternetExplorer 3 Dim doc As HTMLDocument 4 Dim i As Long 5 6 Set ie = CreateObject("InternetExplorer.Application") 7 ie.Visible = True 8 ie.Navigate "http://itp.ne.jp/genre_dir/restaurant/?sr=1&ngr=1&evdc=1&st=4" 9 Do While ie.Busy Or ie.ReadyState < READYSTATE_COMPLETE 10 DoEvents 11 Loop 12 13 Set doc = ie.Document 14 15 Dim ret As Variant 16 Dim Str As String 17 For i = 0 To doc.all.Length - 1 18 If doc.all(i).tagName = "article" Then 19 Str = doc.all(i).innerText 20 ret = InStr(1, Str, "群馬県桐生市相生町", vbTextCompare) 21 if ret <> 0 Then 22 MsgBox Str 23 24 Exit For 25 End If 26 End If 27 Next i 28End Sub

投稿2015/03/30 10:37

TaroToyotomi

総合スコア1430

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tnaka11

2015/03/30 11:04

IEは出るのですがMsgBoxは出てきませんでした。
guest

0

手元にエクセルが無いので確認は出来ないのですが、

lang

1If doc.all(i).innerText = "群馬県桐生市相生町" Then

で、"群馬県桐生市相生町"と比較していますが実際の文字列は、"群馬県桐生市相生町5丁目613-4"なので一致しないと判定されているのではないかと思います。
よって行はテキストから"群馬県桐生市相生町"という文字列を検索して在るか無いかという判定処理を行う必要があります。
文字列の検索はInStr関数を使えば出来るそうなのでIF文を下記のように書き換えてみてはいかがでしょう?
InStr関数

lang

1Dim ret As Variant 2Dim Str As String 3For i = 0 To doc.all.Length - 1 4Str = doc.all(i).innerText 5ret = InStr(1, Str, "群馬県桐生市相生町", vbTextCompare) 6if ret <> 0 Then 7 MsgBox Str 8 Exit For 9コード

投稿2015/03/29 16:03

TaroToyotomi

総合スコア1430

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tnaka11

2015/03/30 09:06

回答有難うございます。 実行してみたところMsgBoxはでるのですが、お目当てのarticleタグ内の情報が出ません。 MsgBoxに あ 住所 〒376-0011 群馬県桐生市相生町5丁目613-4 TEL 0277-53-3363 と、これらの情報が出るようにしたいのですがうまく行きません。 説明不足で申し訳ありません。何卒よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問