No.1ベストアンサー
- 回答日時:
基本的には、ページ数を何らかの方法で取得して、URLを
固定部分+変数で指定してループさうるだけです。
↓はYahoo電話帳をウェブクエリで取得するサンプルです。
ただ、ちょいと不安定です。
>.Refresh BackgroundQuery:=False
でエラーになる可能性があります。
WEBクエリを使わずにWEBソースから内容を取得する方法も
ありますが、全てのHPで使えるわけではありません。
Option Explicit
Public myie As Object
Public kai1 As Integer
Public kai2 As Integer
Sub denwatyou()
Dim s As String
Dim kai As Integer
Dim i As Long
Dim j As Integer
Dim k As Integer
Dim cnt As Long
Dim myrng As Range
Dim myurl As String
Dim motourl As String
motourl = "http://phonebook.yahoo.co.jp/list?a2=46201&g3=44 …
Set myie = CreateObject("InternetExplorer.Application")
With myie
.navigate motourl
.Visible = True
While .Busy Or .readyState <> 4
Wend
Call numget
kai = kai2 \ kai1 + 1
For k = 1 To kai
Set myrng = Worksheets(1).Cells(65536, 1).End(xlUp).Offset(1)
'myurl = motourl & motourl & "&b=" & k & "&h=s"
'-----
If Right(motourl, 1) = "/" Then
myURL = motourl & "?b=" & k & "&h=s"
Else
myURL = motourl & "&b=" & k & "&h=s"
End If
'------
myie.navigate myurl
While myie.Busy Or myie.readyState <> 4
Wend
With ActiveSheet.QueryTables.Add(Connection:="URL;" & myurl, Destination:=myrng)
.Name = Split(motourl, "/")(3)
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = "11"
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
Next k
End With
End Sub
Sub numget()
Dim Mybody As String
Dim s As Variant
Dim linestr As String
Dim i As Long
Dim cnt As Long
Dim MyDoc As Object 'MSHTML.HTMLDocument
Set MyDoc = myie.document
Mybody = MyDoc.body.innerHTML
s = Split(Mybody, vbCrLf)
cnt = UBound(s)
For i = 0 To cnt
linestr = s(i)
If linestr Like "*</B>件中<B>*" Then
kai2 = Split(Split(linestr, "<B>")(1), "</B>")(0)
kai1 = Split(Split(Split(linestr, "<B>")(2), "</B>")(0), "~")(1)
Exit For
End If
Next i
'myie.Quit
End Sub
回答ありがとうございます。
ただ、http://phonebook.yahoo.co.jp/list?a2=46201&g3=44 …
にアクセスしたら
「指定されたURLは見つかりませんでした。」が出てきて、せっかくの回答内容を検証できません。
No.3
- 回答日時:
URLの不具合については、ちょうど別サイトでも話題になってました。
あえてURLはリンクしませんが、
「WEBからコピー時の特殊文字(?)の削除」
で検索したら見つかると思います。
まだ進行中の話題です。
URLをWEBからコピペするのでしたら参考になると思います。
また、IEで現在表示しているページのURLを取得するなら
こんなかんじいけます。
タイトルの取得も入れてあります。
Dim MyShell As Object, MyWindow As Object
Dim myurl As String
Dim mytitle As String
Set MyShell = CreateObject("Shell.Application")
For Each MyWindow In MyShell.Windows
If UCase(Right(MyWindow.FullName, 12)) = "IEXPLORE.EXE" Then
myurl = MyWindow.Locationurl
mytitle = MyWindow.document.Title
MsgBox myurl & vbCrLf & mytitle
End If
Next
Set MyShell = Nothing
No.2
- 回答日時:
WebからコピーしてそのままVBEに貼り付けてませんか?
そうするとURLの部分がおかしくなります。
テキストエディタにコードを貼り付けてみると、URLの部分
の前後に長さ0の文字列が挿入されているようです。
URLの部分を修正して実行してみてください。
※私のコードをVBEに貼り付けると、URLの部分が赤くなっているはずです。
この状態のときはおかしいと思ってください。
この回答への補足
たびたび申し訳ありません。
For i = 0 To cnt
linestr = s(i)
If linestr Like "*</B>件中<B>*" Then
kai2 = Split(Split(linestr, "<B>")(1), "</B>")(0)
kai1 = Split(Split(Split(linestr, "<B>")(2), "</B>")(0), "~")(1)
Exit For
End If
Next i
が全く理解できません。いくら検索しても、似たようなものにヒットしないため、さっぱりわかりません。"*</B>件中<B>*は一体何なのでしょうか?
ありがとうございます。
上手く動きますね。
大変助かりました。
出力された表を見映えよく整えるくらいは自分でVBできますので、これからやります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 医学 二次医療圏の人口分布 1 2023/05/10 11:37
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
- PHP PHP MySql ページング 2 2022/09/20 06:38
- その他(プログラミング・Web制作) 入力フォームへ、データを自動的に入力するプログラム。どうやって作る? 4 2023/01/16 10:24
- Excel(エクセル) VBA : スクレイピングできない 4 2023/05/12 22:26
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- Web・クリエイティブ EXCELでweb内の表を取込む方法を教えてください 2 2023/04/01 11:28
- Excel(エクセル) Excel Powerクエリーの質問、行数指定は可能でしょうか? 2 2022/08/22 12:54
- Excel(エクセル) Excelで、別シートの表のステータスに伴った動的な自動転記をしたいです。 2 2023/06/14 15:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
count(*)で取得した値をJAVAの...
-
VB.NETで DataRow()を利用して...
-
VBA:小数点以下の数字を取得で...
-
ListView 項目の選択/選択解除...
-
サーバ時刻の取得
-
データ数をカウントしたいのですが
-
利用者側のMACアドレスを取得し...
-
VBAでActiveDirectoryのユーザ...
-
like演算子内に変数って使えな...
-
URIでのページの移動について
-
Flexgridで選択行の列の値を取...
-
Spreadの選択行の取得について
-
C#でのコンピュータ名変更につ...
-
PostgresSQL JDBC で Select結...
-
JAVA 入れ子MAPの取得時の書き...
-
gethostbyaddrでのホスト名取得...
-
getParameter と getAttribut...
-
HKEY_USERS下のキーを取得したい
-
JavaScriptにおいてコンピュー...
-
VBA Shapesの座標からセル位置...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETで DataRow()を利用して...
-
count(*)で取得した値をJAVAの...
-
ListView 項目の選択/選択解除...
-
データ数をカウントしたいのですが
-
VBA:小数点以下の数字を取得で...
-
VBAでActiveDirectoryのユーザ...
-
Flexgridで選択行の列の値を取...
-
like演算子内に変数って使えな...
-
ListViewで複数選択された項目...
-
getParameter と getAttribut...
-
JSP+Servletでのページングの常識
-
JavaScriptでWindowsログオンID...
-
利用者側のMACアドレスを取得し...
-
Spreadの選択行の取得について
-
Excel VBA でログインしてい...
-
コンボボックス表示文字列を取...
-
C言語におけるコンピュータ名・...
-
「Excel VBA」 Webクエリ マク...
-
VBScriptで数値にコンマを付け...
-
エクセルVBAで複数選択できるよ...
おすすめ情報