あるサイトの記事をエクセルに落とそうと思い、下記の様なプログラムを組んでみましたが、様々なエラーが出て、かつそのエラーがなぜ起きているのか分からない状態になってしまいました。どのように修正すればよいのか、ご存じの方がいらしたら、ぜひご教授下さい。
もしくは、もっと別のやり方で記事をエクセルに落とせる方法をご存じの方がいらしたら、ぜひご教授下さい。
大雑把な質問になってしまい、「もっと自分で考えてから質問しろ」とお叱りの言葉を頂くかと思います。私自身、なるべく色々と調べてやってきましたが一か月格闘しても遅々として進まずデッドラインが近づいてきておりまして・・・また周りにVBAを知っている人が皆無という状況に耐え切れなくなり、このような質問をしてしまいました。平にご容赦下さい。
また何か補足情報が必要でしたらご遠慮なくコメントいただければと思います。よろしくお願いいたします。
Sub Macro4()
Dim URL As String 'ファイルパス
Dim IE As Object 'オブジェクト
Dim Myhtml As Variant 'HTMLタグデータ
Dim PART As String '収録されているPART
Dim TITLE As String '何話目か
Set IE = CreateObject("InternetExplorer.Application")
PART = 1
Do While PART < 2
TITLE = 0
Do While TITLE < 10
With IE
.Navigate "http://syarecowa.moo.jp/" + PART + "/" + TITLE + ".htm"
.Visible = Falese
Do While .Busy = True
DoEvents
Loop
Myhtml = IE.Document.Body.innerText
Myhtml = Replace(Myhtml, "<BR>", "")
Cells(TITLE, PART) = Myhtml
.Quit
End With
Set IE = Nothing
Loop
Loop
No.1ベストアンサー
- 回答日時:
の続きでしょうか。
ご提示のコードでは、
>TITLE = 0
ですから、
>Cells(TITLE, PART) = Myhtml
ここで
Cells(0, 1)...で、0行目を指定してしまってエラーになります。
だからといって、TITLE = 1 から始めればいいかというと、
"http://syarecowa.moo.jp/1/1.htm"
このURLのページは存在しませんから、目的のページを取得できません。
それに、Do Loopステートメントの中で変数 TITLE と PART を増分させてないので無限Loopです。
Excelの基本機能に[外部データの取り込み]、Webクエリというものがあります。
これを使うとWebページの取り込みができますから、操作をマクロ記録して参考にしてみてください。
実際には、前回のQAで取り込むページのリンク先URLが取得できたわけですから、
その続きで、取得したURLだけをLoop処理すれば良いです。
Sub try2()
Const url = "http://syarecowa.moo.jp/"
Dim x As Object
Dim y() As String
Dim i As Long
With CreateObject("InternetExplorer.Application")
.Navigate url & "menu001.htm"
.Visible = True 'False
Do While .Busy Or (.ReadyState <> 4)
DoEvents
Loop
'リンク先を配列に記憶
ReDim y(1 To .Document.Links.Length)
For Each x In .Document.Links
If x.href <> url & "menu.html" Then
i = i + 1
y(i) = x.href
End If
Next
.Quit
End With
'配列を有効データの個数にリサイズ
ReDim Preserve y(1 To i)
Application.ScreenUpdating = False
With Sheets.Add
For i = 1 To UBound(y)
.Cells(1, i).Value = y(i)
'Webクエリの繰り返し。次URLは列方向に書き出す。
With .QueryTables.Add(Connection:="URL;" & y(i), _
Destination:=.Cells(2, i))
.FillAdjacentFormulas = False
.PreserveFormatting = False
.RefreshStyle = xlOverwriteCells
.AdjustColumnWidth = False
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = False
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = True
.Refresh BackgroundQuery:=False
.Parent.Names(.Name).Delete
.Delete
End With
Next
End With
End Sub
end-u様
前回に引き続き、本当にありがとうございます。今思っている感謝は、どう言っても言葉にしつくせません。見ず知らずの私にこんなによくして下さる方がいらっしゃるとは、夢にも思いませんでした。
end-u様のマクロを実行してみて、自分の思い描いた以上の処理がババっとできた画面を見て、涙で画面がにじみました。このデータが取れなかった場合は、大幅に研究テーマを修正するしかないという瀬戸際だったものでして…
>Excelの基本機能に[外部データの取り込み]、Webクエリというものがあります。
>これを使うとWebページの取り込みができますから、操作をマクロ記録して参考にしてみてください。
ありがとうございます。Webクエリの存在自体は知りマクロなども参考にしてみたのですが、どう応用させればいいのか分からずに結局放置していました…取得したURLをWebクエリで処理すればよかったんですね。
また、ReDimの使い方も大変勉強になりました。入門編等では再定義できることのありがたみが理解できなかったので。
今回end-u様に組んでいただいたコードを勉強して、しっかりと次に活かせるように致します。また、end-u様のBLOGの方も大変参考になるものが多いので、勉強させて頂きます。
なにより、今回のend-u様のご厚意を無駄にせぬよう、精一杯研究に活かして参ります。
重ね重ね、厚く御礼申し上げます。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) VBA初心者です。 2 2022/10/10 11:52
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
C#でbyte配列から画像を表示さ...
-
vba フィルター 複数条件 3つ以...
-
大量の変数を定義するにはどう...
-
構造体配列の特定のメンバーをF...
-
COBOLの基本的な事なので...
-
Excel2010のinputboxで複数デー...
-
VB.NETの配列にExcelから読み込...
-
Dir関数で読み取り順を操作でき...
-
2次元配列の初期値
-
配列をランダムに並び替えても...
-
テキストボックの文字を一行ず...
-
エクセルでXY座標に並べられた...
-
CheckBoxの配列化
-
Excelのメモリ(配列)の上限は2G...
-
コンボボックスのインデックス...
-
VB6のメモリ解放に関して
-
エクセル(VBA)の空白配列の削除...
-
countif/sumifのようなVBA関数
-
エクセルVBAで実行時エラー7、...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA 変数名に変数を使用したい。
-
vba フィルター 複数条件 3つ以...
-
C#でbyte配列から画像を表示さ...
-
Excel2010のinputboxで複数デー...
-
エクセルでXY座標に並べられた...
-
構造体配列の特定のメンバーをF...
-
定数配列の書き方
-
コンボボックスのインデックス...
-
OutOfMemoryExceptionの回避策...
-
Dir関数で読み取り順を操作でき...
-
CheckBoxの配列化
-
構造体配列内の文字列検索のよ...
-
COBOLの基本的な事なので...
-
Redim とEraseの違いは?
-
VBAで配列引数を値渡しできない...
-
2次元配列の初期値
-
配列の中の最大値とそのインデ...
-
VB6からの移行したいけど、VB.N...
-
大量の変数を定義するにはどう...
-
VB6のメモリ解放に関して
おすすめ情報