質問: objIE.document.images(58).src End Sub ### 試したこと https://qiita.com/Nao3/items/37f84f1777cd8229b915 ↑この情報をもとに書き換えるも、うまく動作せず。 ### 完成イメージ URLを開くところから各情報取得→各セルへのインプットまでをループにして、URL一覧がなくなったら終了という形にしたいです。あとループにした場合、データ抽出部分をどのように書き換えるかもわからず苦戦しております・・ お力をお貸しいただけたらと思います。どうぞ宜しくお願いいたします。 ### 補足情報(EXCEL2016,Windows10,64bit )
回答: セル値からURL取得 まずはセル値からURLを取得する方法について。 例えばC2セルにURL `https://www.111.com/news/22831458/` が入力してあり、このURLをieView関数で開くのであれば、`Call ieView(objIE, Cells(2,"C").Value)`という記述で実現できます。 こうすると、それ以降は今のロジックのままで、C2からURLを取得して同じ行のI/G/H/K列に書きだすような処理になりますよね。 出力側に少し手を加えるとすれば、Range関数は複数セルを指定できる記述ですが、今回は単一セルしか指定していません。 単一セルを扱うのであればCellsの方が扱いやすいです。 たとえば`Range("I2").Value`は`Cells(2,9).Value`または`Cells(2,"I").Value`と記述できます。 行番号が文字列の一部ではなくなるので、変数でループ処理することも簡単になります。 対象となるセルを順次取得する 次に課題となるのは、URLが入力されているセルの値をループ処理で順次取得する方法だと思います。 ループの範囲の決め方は例えば ・2行目~100行目までをループ処理する(固定範囲のループ) ・2行目以降、URLが連続で入力されている範囲をループ処理する ・2行目以降、URLが入力されている最終行までをループ処理する といったようにいくつかあるのですが、ここでは3つ目に紹介した2行目~最終データ行ということで話を進めたいと思います。 C列の最終データ行は`Cells(Rows.Count, "C").End(xlUp).Row`といった記述で実現できます。 解説すると、`Rows.Count`はそのバージョンのエクセルで利用できる最大の行番号を返します。 `.End(XlUp)`というのは、対象セルから「Ctrl」+「↑」を操作したセル位置となります。 つまり、C列の最終行から「Ctrl」+「↑」を操作した位置の行番号を返す、というわけです。 「Ctrl」+「↑」の操作をすると、対象セルから上方向に向かって最初に見つけたデータがあるセルに移動します。 なので、C列最終行から上に向かってデータを探していき、最初に見つけた行の行番号を返す⇒最終データ行の行番号を返すという訳です。 これを使って2行目から最終データ行までのループを行えば目的の動作が実現すると思います。 ``` Dim iRow As Integer For iRow = 2 To Cells(Rows.Count, "C").End(xlUp).Row '本サイトをIE(InternetExplorer)で起動 Call ieView(objIE, Cells(iRow, "C").Value) 'Aデータを抽出しI2へ Cells(iRow, "I").Value = objIE.document.getElementById("tabmenu_inqcnt").innerText '(--以下略--) Next ``` 参考になれば幸いです。 がんばってみてください。