交通費計算を自動でするための
VBAを作ったのですが
往復と記入したら×2にするIF文を書いたところ
上手くいきません。
初心者なので詳しい方がいらっしゃいましたらご教授お願い致します。
【作ったものの具体的な内容】
ワークシートA欄・B欄に出発駅、到着駅を記入し
のD欄に片道か往復か記入すると
IEで検索されE欄に料金が出されるもの
【症状】
エラーコード91「オブジェクト変数またはwithブロックが設定されていない」と表示される。
出てくるまでは処理が行われ、
処理の20個ほど先まで実行されてからエラーが出ることもあれば
最初の1個目でエラーが出ることもある。
エラーが出るまでの処理は現状確実にできています。
Sub IE()
Dim IE As InternetExplorer
Set IE = CreateObject("internetexplorer.application")
IE.Visible = True
IE.Navigate "transit.yahoo.co.jp"
End Sub
Sub 処理()
Dim IE As InternetExplorer
Set IE = CreateObject("internetexplorer.application")
IE.Visible = True
Dim i As Long
For i = 2 To Range("a" & Rows.Count).End(xlUp).Row
IE.Navigate "transit.yahoo.co.jp"
Do While IE.Busy Or IE.ReadyState < 4
DoEvents
Loop
IE.Document.getElementById("sfrom").Value = Range("b" & i).Value
IE.Document.getElementById("sto").Value = Range("c" & i).Value
IE.Document.forms("search").submit
Do While IE.Busy Or IE.ReadyState < 4
DoEvents
Loop
If Range("d" & i).Value = ("往復”) Then
Range("e" & i).Value = Replace(IE.Document.getElementsByclassName("fare")(0).innerText, "円", "") * 2
Else
Range("e" & i).Value = Replace(IE.Document.getElementsByclassName("fare")(0).innerText, "円", "")
End If
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
やっと問題の正体が見えたので、後はウォッチ ウィンドウ等を使って
IE.Document.getElementsByclassName("fare")
に代わる片道料金を表す「○○円」と言う文字列を返すプロパティーを探す必要があります。
HTMLの内容を確認できるのであれば手がかりが得られるのですが、難しいですね。
確実にエラーが起きる条件、起きない条件を示して別質問にしてください。
往復料金(2倍)を計算するための手法は解決済みですよね?
HTMLの内容、「要素の検査」で見られました。
<li class="fare"><span class="mark">251円</span></li>という風になってました。
("fare")の中身をmarkに変えてみたところ
エラーが出ることなく到着時間が表示されました。
ちょっとお手上げな状態なのですが何かご存じでしょうか・・・?
No.4
- 回答日時:
HTMLの内容が想定通りであった場合には、
IE.Document.getElementsByclassName("fare")(0).innerText
に○○円と表示され、そこからReplace関数で"円"を除去
計算に使用するためには数値化(Val関数)
という流れになっているはずです。
ですが、エラーの起きるところでは、想定通りになっていないのでしょう。
ですが、これは往復という問題以前に起こっているはずです。
本当に
>往復と記入したら×2にするIF文を書いたところ
>上手くいきません。
という変更で発生したエラーなのでしょうか?
つまり、往復という条件を使用しなければすべての片道料金が正常に表示されるのでしょうか?
ご返信いただき誠にありがとうございます。
片道料金のみ(
Range("e" & i).Value = Replace(IE.Document.getElementsByclassName("fare")(0).innerText, "?~", "")
のみ記述でIf文なし)で実行してみたところ
同じ91エラーが表示され止まりました。
最初から間違っていたようです、申し訳ありません・・・。
こういった場合、どう直したらよいのでしょうか?
No.3
- 回答日時:
確認のやり方はそれで良いと思います。
得られる値は文字列のはずなのですが・・
>object HTMLLIElementと表示されました
エラーが起きない場合でも同じですか?
度たびありがとうございます。
いま改めて確認しましたところ
Watch : : IE.Document.getElementsByclassName("fare")(0).innerText : <オブジェクト変数または With ブロック変数が設定されていません。> : Variant/Integer : Sheet1.中身
と表示されました
このinnerText とは、検索結果から「円」を除くためのものだと思ったのですが違ったのでしょうか?
No.2
- 回答日時:
No.1です。
すべての行を F8(ステップイン)で試す必要はないと思います。
>エラーコード91「オブジェクト変数またはwithブロックが設定されていない」と表示される。
一般的には、ウォッチ ウィンドウをつかって変数の内容を確認すればよいのですが、このエラーでは使えない可能性があります。その前に設定されている変数に不備があるパターンもあるのです。
とりあえずStopを利用して、
IE.Document.getElementsByclassName("fare")(0).innerText
の内容を確認することをお勧めします。
また、前回の回答に明らかな不備が有りましたので修正しておきます。
誤
Val(Range("e" & i).Value = Replace(IE.Document.getElementsByclassName("fare")(0).innerText, "円", "") ) * 2
正
Range("e" & i).Value = Val(Replace(IE.Document.getElementsByclassName("fare")(0).innerText, "円", "") ) * 2
ではいかがでしょうか?
詳しくありがとうございます。
新たにお教えいただいたコードに直したところ
最初と同じくエラーが出るまでは動くようになりました!
ありがとうございます。
エラーは変わらず同じ91です。
>Stopを利用して、
IE.Document.getElementsByclassName("fare")(0).innerText
の内容を確認する
につきまして、私の理解力が足らず申し訳ないのですが、
どのように行うとできるのでしょうか・・・
詳しくお教えいただいたにもかかわらず、聞き返してしまいごめんなさい。
No.1
- 回答日時:
動作確認はしていませんが、IE.Document内の情報は基本的に文字列です。
×2のような計算をするためには、「文字列」→「数値」の変換が必要であると思われます。
例
Val(Range("e" & i).Value = Replace(IE.Document.getElementsByclassName("fare")(0).innerText, "円", "") ) * 2
詳しくは、
VBA Val 関数
https://www.tipsfound.com/vba/05val
等を参考にしてください。
また、【症状】に示されているようなエラーはIE.Documentの内容に依存しているものと思われますので、エラー発生時にDebugで確認することをお勧めします。
VBA デバッグの仕方
https://www.tipsfound.com/vba/01010
長文にもかかわらず、丁寧な回答ありがとうございます。
試してみましたところ、
Val関数では動いてくれず(例に挙げていただきましたコードで動かなかったため)
教えていただいたデバッグでの確認で、F8押しっぱなしで、最後まで片道、往復ともに正確に入力してくれるようになりました。
ご教示ありがとうございます。
実行(F5)では動作に波があるのは、IEの動作によるものなのでしょうか・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【エクセルマクロ】既に開いているIEの、サイズや表示位置を変更するには 4 2022/12/01 22:57
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
交通系icカードとクレカの磁気...
-
「空吸引」を英語でなんと訳す...
-
パソコンに着いての質問です。 ...
-
firefox3でDjvuPlug-inは動きま...
-
0x80070141 のエラー
-
みつも郎liteのファイルがエラ...
-
以前作ったエクセルファイルを...
-
富士通SystemwalkerOperationMa...
-
右クリックで画像コピー やば...
-
教えてください。 パソコンの用...
-
VPNは有効か
-
マウスポインタが点滅する
-
2chのスレを見てた際にとあるリ...
-
縮小専用でResizedした写真の在...
-
勝手にダウンロードされた Web...
-
アンインストールしたプログラ...
-
隣人にスマホをハッキングされ...
-
IPアドレスだけでハッキングは...
-
Illustratorで大きな用紙サイズ...
-
スマホがハッキングされたりす...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
交通系icカードとクレカの磁気...
-
リクエストの有効期限が切れま...
-
「このURLはコンテンツブロッカ...
-
パソコンに着いての質問です。 ...
-
OpenClipboardに失敗しました(...
-
ソフトウエアー エラー???
-
富士通SystemwalkerOperationMa...
-
インターナルエラー:GEDIT 3 ...
-
トランザクションとはなんでし...
-
ANSYS_ED エラーについて
-
chromeブラウザに勝手に別のサ...
-
みつも郎liteのファイルがエラ...
-
GOM-playerでスクリプトエラー...
-
Message from maxima's stderr ...
-
以前作ったエクセルファイルを...
-
PDFファイルで「0xc000000d」エ...
-
[AutoCAD 2007] CUIを変更しよ...
-
InDesignのJavaScriptエラー
-
blogger で次の様なエラーが発...
-
ラスタライズのエラー
おすすめ情報
よくわかっていなくてごめんなさい、
ブレークポイントを使って実行してみて
ウィッチウィンドウで確認する、ということであってますでしょうか。
IE.Document.getElementsByclassName("fare")(0).innerText
の値は
object HTMLLIElementと表示されました
全然見当違いでしたらすみません。