エクセル内のA列にURLがあるのですが、B列にそのURLのHPのタイトルだけを抽出する方法はありますか?
色々調べて
------------------------------------------
Public Sub ReadTitle()
Dim IE
Dim url As Range
Dim i As Integer
Set url = Range("A2")
Set IE = CreateObject("InternetExplorer.Application")
i = 0
Do While (url.Offset(i, 0).Value <> "")
IE.Navigate (url.Offset(i, 0).Value)
While IE.busy: Wend
While IE.Document.readyState <> "complete": Wend
url.Offset(i, 1).Value = IE.Document.Title
url.Offset(i, 3).Value = url.Offset(i, 2).Value '前回日付
url.Offset(i, 2).Value = IE.Document.LastModified
i = i + 1
Loop
End Sub
このようなマクロで抽出は出来たのですが、URLは1万件以上あり、PCのスペックの低さのせいか、何時間もかかってしまいます。
もっと早く、タイトルだけを抽出する方法は無いでしょうか?
よろしくお願いします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
>自分はとんでもなく無謀な事をしているような気になってきました。
まだ、初めの0.1歩くらいしか踏み出していませんよ。
VBEにはヘルプというものがありますので、Instrって何?と思ったら、検索してみてください。「使用例」の方をみてみると、およその様子が分かります。
下記にコードを載せます。'msgbox bufのところのシングルクォーテーションを外すと、何が起こっているか分かると思います。
Public Sub ReadTitle()
Dim url As Range
Dim Http, buf As String
Set Http = CreateObject("MSXML2.XMLHTTP")
Set url = Range("A3")
Do While (url.Value <> "")
Http.Open "GET", url.Value, False
Http.Send
buf = StrConv(Http.ResponseBody, vbUnicode)
'msgbox buf
url.Offset(0, 1).Value = getTitle(buf)
Set url = url.Offset(1, 0)
Loop
Set Http = Nothing
End Sub
Private Function getTitle(buf As String) As String
Dim pos1 As Long, pos2 As Long
pos1 = InStr(1, buf, "<title>")
If pos1 = 0 Then
pos1 = InStr(1, buf, "<TITLE>")
If pos1 = 0 Then
getTitle = ""
Exit Function
Else
pos2 = InStr(pos1 + 7, buf, "</TITLE>")
End If
Else
pos2 = InStr(pos1 + 7, buf, "</title>")
End If
getTitle = Mid(buf, pos1 + 7, pos2 - pos1 - 7)
End Function
htmlがシフトJISか、UNICODEかで分岐しないといけないと記してある記事もありますので、URLによって変なエラーが出る場合は参考URLをご覧下さい。
参考URL:http://www.f3.dion.ne.jp/~element/msaccess/AcTip …
No.3
- 回答日時:
>Sample = ........の部分に赤字でエラーが出るのですが、ここには何を入れるのでしょうか?
ここは自分で書いてねという事なので、エラーが出て当たり前です。
文字列変数bufに、htmlが丸ごと入ります。Instr関数で、<title>??????</title>の、<title>と、</title>それぞれの位置を求め、Mid関数で、??????の部分を取得してはいかがですか、という意味です。今日はもう寝ます。
自分はとんでもなく無謀な事をしているような気になってきました。
何度もすみません、先ほども言った様にまるで知識がないのですが、Sample=の後にhtmlを入れると構文エラーと出て
Private Function Sample(url As String) As String
の部分が黄色くなります。
文字列変数bufやInstr関数というのも、どこを指すのか解からないのです。
ちなみに、htmlを入れる場所には、タイトルを抽出したいURLが1万件あれば、1万件入力すると言う事でしょうか?
お時間があるときで結構ですのでよろしくお願いします。
No.2
- 回答日時:
>これだと1件1件の手作業になってしまいます。
質問文のコードを書ける方のコメントとも思えませんが、下記の様にやれば良いのではないでしょうか。ソース中の<title>?????</title>の部分を見つけるのは、正規表現を持ち出すまでもなく、Instr関数で十分だと思います。便宜上、関数を呼び出す度に、CreateObject("MSXML2.XMLHTTP")~解放を行っていますが、ループの最初だけで行い、最後に解放する様にした方が速度上有利だと思います。
Public Sub ReadTitle()
Dim url As Range
Dim i As Integer
Set url = Range("A2")
i = 0
Do While (url.Offset(i, 0).Value <> "")
url.Offset(i, 1).Value = Sample(url.Offset(i, 0).Value)
i = i + 1
Loop
End Sub
Private Function Sample(url As String) As String
Dim Http, buf As String
Set Http = CreateObject("MSXML2.XMLHTTP")
Http.Open "GET", url, False
Http.Send
buf = StrConv(Http.ResponseBody, vbUnicode)
'ここで、buf中の<title>??????</title>を見つけ、戻り値として返す
Sample = ........
Set Http = Nothing
End Function
説明不足でした。。。
質問のマクロは方法を探していたときにたまたま発見したもので、私自信は全く知識はありません。
mitarashi様が記載して頂いたマクロも貼り付けてみたのですが、エラーがでてしまい、どこがどうなのかイマイチ理解はしておりません。
Sample = ........
の部分に赤字でエラーが出るのですが、ここには何を入れるのでしょうか?
No.1
- 回答日時:
回答ありがとうございます。
参考URLを参考にし、やってみたのですがいまいちうまく行きません。
ソースをとるマクロのようですが、これだと1件1件の手作業になってしまいます。
なるべく早い時間で、タイトルだけを抜き出したいのです。
難しいのかもしれませんが、引き続きよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセル VBA メール本文に指定セルに記載されているURLをリンクとして記載する方法 8 2022/08/08 07:50
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Excel(エクセル) 並べ替え、ソートの構文がわからない。 お世話になります。VBA超初心者です。 エクセルでワークシート 2 2023/06/28 21:00
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Excel(エクセル) マクロで行を追加、削除すると行位置がずれますが、解決方法はありませんか?。 5 2022/05/28 16:03
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
- Visual Basic(VBA) 配列の勉強をしています。使用する変数の意味、検索条件の書き方が難しいです。 2 2022/09/15 14:06
- Excel(エクセル) 【VBA】A列にある連続したデータの1番下に文字列を入力したい 1 2023/01/28 04:40
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
BLOB型のPDF出力の方法
-
Webページ上のチェックボックス...
-
エクセル内のURLからHPのタイト...
-
Excel 2019 のピボットテーブル...
-
Oracle 2つのDate型の値の差を...
-
Accessでテーブル名やクエリ名...
-
エクセルVBAで5行目からオート...
-
Accessでテーブルの値をテキス...
-
Accessクエリでの、LIKE条件
-
「直需」の意味を教えてください
-
VBAで複数の数式セルを最終行ま...
-
エクセルグラフの凡例スペース
-
Accessでコードを入れると名前...
-
変数が選択リストにありません
-
Access 昇順・降順で並び替え...
-
エクセルからアクセスのテーブ...
-
列が存在しないと言われる
-
アクセス エラーを数値「0」に...
-
作番ってどういう意味でしょうか?
-
FROM の中で CASE を使えるでし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
BLOB型のPDF出力の方法
-
エクセル内のURLからHPのタイト...
-
TortoiseSVNのリポジトリブラウ...
-
リバースプロクシを使って接続...
-
autorun がうまく動作しない
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
エクセルVBAで5行目からオート...
-
Accessでテーブル名やクエリ名...
-
Accessでテーブルの値をテキス...
-
Oracle 2つのDate型の値の差を...
-
セルの右クリックで出る項目を...
-
Access テキスト型に対する指定...
-
作番ってどういう意味でしょうか?
-
Accessでコードを入れると名前...
-
Accessのフィールド数が255しか...
-
Accessのリンクテーブルのパス...
-
テーブルの存在チェックについて
-
ACCESSのクエリで集計で、先頭...
-
ACCESSで400以上のフィールドが...
おすすめ情報