
エクセル内の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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
隣の枝がはみ出してきたら切ってもいい?最もやってはいけないことは?
「隣の木が越境してきて困るが、勝手に切ってはいけないと聞くし…」そう思っている方も多いだろう。実は、2023年4月1日に民法が改正され、この「越境枝」のルールが大きく変わった。 教えて!gooでも「境界から出て...
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
BLOB型のPDF出力の方法
-
【Access】フォームで自動計算...
-
【続続】Access2002で連番のつ...
-
カウントが出来ません
-
accsessで顧客コードで氏名を呼...
-
再計算って出来ますか?
-
Access2000 更新のタイミング?
-
Countと受付状態の表示に...
-
下記の事を行うSQLがわかりませ...
-
Access クロス集計クエリについて
-
「直需」の意味を教えてください
-
Accessでテーブル名やクエリ名...
-
Excel 2019 のピボットテーブル...
-
アクセスで困ってます(初心者)
-
ACCESS検索★ある文字を複数のフ...
-
エクセルVBAで5行目からオート...
-
Accessでテーブルからテーブル...
-
データベースで変更の多いテー...
-
SQLServer2005のSQL文での別名...
-
「失注」の意味を教えてくださ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHP+MySQLで複数配列の挿入(IN...
-
BLOB型のPDF出力の方法
-
TortoiseSVNのリポジトリブラウ...
-
エクセル内のURLからHPのタイト...
-
かねやんMySQLAdmin1.43
-
JConnectorがうまくつないでく...
-
urlに表示されるxxxx.doの...
-
DBの<a>タグを[url]タグへ変更...
-
id,urlというテーブルにおいて...
-
Webページ上のチェックボックス...
-
text型とuniqueについて
-
ラジオ番組のホームページのメ...
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
エクセルVBAで5行目からオート...
-
Accessでテーブル名やクエリ名...
-
エクセルグラフの凡例スペース
-
Oracle 2つのDate型の値の差を...
-
変数が選択リストにありません
-
INSERT INTO ステートメントに...
おすすめ情報