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

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

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

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

Q&A

解決済

2回答

5194閲覧

vbaのスクレイピング エラーが起きた際に処理を飛ばす。

memomemo

総合スコア26

VBA

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

0グッド

0クリップ

投稿2017/05/22 05:37

只今vbaにてスクレイピング処理をしています。
しかし、途中で処理が止まってしまい困っています。

下記画像のエラーが出た際に次の処理に移れるようなif文を作りたいのですがお力添えをいただけますと幸いです。

イメージ説明

vba

1 2Sub listPost() 3 4 5exlrow = 350 6'ページ情報を取得 7For j = 111 To exlrow 8 Set objIE = CreateObject("Internetexplorer.Application") '新しいIEオブジェクトを作成してセット 9 objIE.Visible = True 'IEを表示 10 objIE.navigate Worksheets("Sheet1").Range("A" & 1 + j).Value 'IEでURLを開く 11 12 Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE '読み込み待ち 13 14 DoEvents 15 16 Loop 17 18 Dim htmlDocCompanies As HTMLDocument 'HTMLドキュメントオブジェクトを準備 19 Set htmlDocCompanies = objIE.document 'objIEで読み込まれているHTMLドキュメントをセット 20 21 Dim CoList As IHTMLElementCollection 22 Set CoList = htmlDocCompanies.getElementsByClassName("main") 23 24 25 Worksheets("Sheet1").Cells(j + 1, 2).Value = htmlDocCompanies.getElementsByClassName("list")(0).getElementsByClassName("attend")(0).getElementsByClassName("attend-td")(0).innerText 26 Worksheets("Sheet1").Cells(j + 1, 3).Value = htmlDocCompanies.getElementsByClassName("attend")(0).getElementsByClassName("attend-td")(1).innerText 27 Worksheets("Sheet1").Cells(j + 1, 4).Value = htmlDocCompanies.getElementsByClassName("attend")(0).getElementsByClassName("attend-td")(2).innerText 28 Worksheets("Sheet1").Cells(j + 1, 5).Value = htmlDocCompanies.getElementsByClassName("attend")(1).getElementsByClassName("attend-td")(0).innerText 29 Worksheets("Sheet1").Cells(j + 1, 6).Value = htmlDocCompanies.getElementsByClassName("attend")(1).getElementsByClassName("attend-td")(1).innerText 30 Worksheets("Sheet1").Cells(j + 1, 7).Value = htmlDocCompanies.getElementsByClassName("attend")(1).getElementsByClassName("attend-td")(2).innerText 31 Worksheets("Sheet1").Cells(j + 1, 8).Value = htmlDocCompanies.getElementsByClassName("attend")(1).getElementsByClassName("attend-td")(3).innerText 32 objIE.Visible = False 33 objIE.Quit 34Next j 35 36End Sub 37 38

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

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

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

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

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

guest

回答2

0

とりあえず、先頭に

On Error Resume Next

を記述しておけば、すべてのエラーが無視されて、次の行の処理へ進みます。

エラーの発生場所、種類などで後の処理を変更したい場合などは、「VBA エラー処理」をキーワードにWEB検索するといろいろ解説ページが見つかりますので、それを参照してください。
例えば、

Office TANAKA - Excel VBA Tips[エラーに負けない]

投稿2017/05/22 06:16

hatena19

総合スコア33715

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

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

memomemo

2017/05/22 06:19

ご回答ありがとうございます! こちらのサイトを参考にさせていただきます!
guest

0

ベストアンサー

エラー処理の観点からはあまり良い方法ではないのですが、VBAにはエラーが何か発生したとしてもとりあえずすべて無視して次の処理に移るという、今回の内容に合致した命令があります。

こちらに記載されているOn Error Resume Nextが該当のものですが、ひとまずこちらで解決しませんでしょうか。

本来、厳密に処理をするのであればエラーの内容を参照して想定されるエラーの場合は無視し、そうでない場合はエラー表示をし・・等適切な処理をすることが望ましいのですが、個人利用やそこまで厳密な管理をしないコードであればひとまず解決に向かうかと思います。

投稿2017/05/22 06:10

編集2017/05/22 06:11
akabee

総合スコア1947

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

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

memomemo

2017/05/22 06:18

ありがとうございます。 こちらで対応出来ました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問