ネットが遅くてイライラしてない!?

下記の質問回答を参考にし、複数のWebページをHTML形式で保存することを行っていました。
が、IEのバージョンが上がりタブブラウザが本格的になるとこの方法が通用しなくなってしまいました。
その後はごまかしながら旧IEバージョンを用いて取り込みをしているのですが、さすがにそろそろ限界になってきた次第です。
どなたか直近のIEのバージョンでも対応可能な方法をご存知でしょうか?

https://oshiete.goo.ne.jp/qa/4253824.html
http://www.ken3.org/vba/backno/vba120.html

よろしくお願いいたします。

質問者からの補足コメント

  • 少々言葉足らずだったかもしれませんが・・・
    もちろんWebサイトを直接コピーしてExcelシートに貼り付け、という方法は私も存じております。が、それではちょっと難しいのです。
    目的として何がしたいのかというと、対象のページをHTML形式で保存することによって一緒にくっついてくる.filesフォルダの中にある画像(商品価格を画像にしたもの)を取り出す、ということをしたいのです。
    極端な話、その目的の画像だけをWebから取り出せればそれでいいのですが、手っ取り早い方法が上記だったわけで。
    とはいえ、現状ではかなり難しそうですね。

      補足日時:2015/02/02 22:10
  • 確かに、目的を考えると趣旨が異なっていたかもしれません。
    問題だったのは必要な画像が価格表示する為に都度生成されるようで、
    ただ単にダウンローダやExcelVBAで対象ファイルのURLからコピーする方法では通用しなかった、というのがあります。
    色々と思案した結果、下記の方法で落ち着きました。

    IEを操作してページをExcelシートに全コピー

    画像の代替テキストに書かれているURLに条件である「.aspx」があるものを探す

    見つかったらその画像を別シートにコピー

    結局のところ事故解決ですが、WindFaller様、色々とご回答ありがとうございました。

      補足日時:2015/02/03 15:52

このQ&Aに関連する最新のQ&A

A 回答 (3件)

こんばんは。



>もちろんWebサイトを直接コピーしてExcelシートに貼り付け、という方法は私も存じております。が、それではちょっと難しいのです。

>.filesフォルダの中にある画像(商品価格を画像にしたもの)を取り出す、ということをしたいのです。

えっ! それは、ここのスレでは一度もでていない話だと思います。
まったく違う内容だと思いますが。むろん、私なら、VBAで可能かもしれませんが、あえて面倒なことをする気にもなりません。

ダウンローダーを使えば、何十個でも、何百個でも、種別に選別して数分でダウロードできます。

以下はアマゾンサイトのあるページを、ダウンローダーでみたjpg/pngのファイル一覧です。
「ダウンローダー フリー」とでもググればいくつか出てきます。たぶん、ソフトウェアには、Malware は入っていないと思いますが、この種のものは、余計なものをインストールされることがありますから、十分に気をつけてインストールしてください。
「EXCEL VBAでwebページを保存す」の回答画像3
    • good
    • 0
この回答へのお礼

補足にある通りです。色々とありがとうございました。

お礼日時:2015/02/03 15:53

#1の補足です。



後々、また考えてみましたが、IEをVisible(表示)しているという点で、それを見る側にとっては、なんとも、無駄なことをしているように思えます。もちろん、このコードの作者は、ユーザーに確認させるためで、いきなり、Visible =False にはしないという暗黙的なルールに則っているだけです。それゆえ、Tabでひとまとめにできないのか、と思ったのではないでしょうか?

ご希望通りに、確かにTabで、ひとまとめにはできるのですが、実際のアクセスの段階では、別々(IEオブジェクトが複数)になってしまうようです。IEの立ち上げから、タブを一つ一つと開けます。そしてループでダウンロードも可能なのですが、よく考えてみれば、その元のURLは、複数あって、それを単にIEを複数にするのか単独でするかの違いなのです。(この説明ではよく分からないかもしれません。)

#1では、けんもほろろに回答してしまいましたが、おっしゃっている意図は分かるのですが、それをすることによって、ほんのちょっとの違いと、場合によっては、IEのハングということをもたらす可能性はないとは言えないのです。

反対の例としては、Evernoteを始め、同様の昨今のツールは、単独で、サイトを複数を取得するわけではありません。確か、昔、Web自動巡回という便利なソフトウェアがありましたが、あれも癖もので、不要なものも多く撮ってくるという始末の悪いものでした。後々、とても見きれるレベルではありませんでした。

もう一度、考えなおしてみてください。
なお、私個人は、複数よりもHTMLではなく、必要な情報をVBAで抜き出すということを考えます。
    • good
    • 0

こんばんは。



>IEのバージョンが上がりタブブラウザが本格的になるとこの方法が通用しなくなってしまいました。
何が、通用しないのでしょうか?

いろいろと検証してみましたが、タブ・ブラウザだから、いままでのコードがダメだという理由が良く分からないのです。しばらく、グーグルで、MSDNやら他の英語サイトも読んでみましたが、未だIEのタブ・コントロールというメソッドは、どうやら存在しないようなのですし、タブ・コントロールのタイプライブラリも公では見当たりません。むろん、それなりには、私自身、プログラムでタブの切り替えは可能です。

しかし、本来の目的である、HTMLのダウンロードとは直接関係のない問題です。言い換えると、タブ・コントロールすること自体が、あまり意味があることではない、ということに気が付きました。

ユーザーが任意で開いた複数のサイトを全てHTMLで保存するコードということであれば、また、話は違ってきますし、それなりには考えますが、リンク先のコードは、そのような趣旨ではありません。

>ごまかしながら旧IEバージョンを用いて取り込みをしているのですが、
前の人たちのログも読みましたが、HTMLのダウンロードに関しては、基本的には、前も現在も変わらないものというしかありません。

実際、HTMLでダウンロードすること自体は、コードを読んで分かる通り、コードの最初からサイトのURLの設定になっているのですから、それぞれのIEオブジェクトですればよいことで、仮に、それをタブで切り分けたところで、やることはほとんど同じです。何が問題になっているのか、今ひとつ理解できませんでした。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QEXCEL VBAでWEBページ保存2

何度もお世話になります、よろしくお願いいたします。

本日、EXCEL VBAでWEBページを完全保存する方法を質問して
下記を紹介していただきました。
Option Explicit
Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
"URLDownloadToFileA" ( _
ByVal pCaller As Long, ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As Long, _
ByVal lpfnCB As Long) As Long

--------------------------------------------------------------------------------

Sub DownloadFileFromWeb()
Const strUrl As String = "http://www.puremis.net/excel/index.shtml"
Dim strSavePath As String
Dim returnValue As Long
strSavePath = ThisWorkbook.Path & "\" & "Test.htm"
returnValue = URLDownloadToFile(0, strUrl, strSavePath, 0, 0)
If returnValue = 0 Then
MsgBox "Sccess!"
Else
MsgBox "Did not success."
End If
End Sub
-------------------------------------------------
この状態だと動作は完璧なんですが
たくさんのWEBページを保存するようにVBAを組みたいので
HPアドレスの部分に変数を使いたいのです。
この部分です:Const strUrl As String = "http://www.puremis.net/excel/index.shtml"

でも変数を使うとエラーになってしまうので困り果てております。何か良い方法はございませんでしょうか。
よろしくお願いいたします。

何度もお世話になります、よろしくお願いいたします。

本日、EXCEL VBAでWEBページを完全保存する方法を質問して
下記を紹介していただきました。
Option Explicit
Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
"URLDownloadToFileA" ( _
ByVal pCaller As Long, ByVal szURL As String, _
ByVal szFileName As String, _
...続きを読む

Aベストアンサー

こんにちは。

> WEBページを完全保存する方法

ご質問なさっていることは、かなり面倒なことです...ね。

ご存じかもしれませんが、WEB ページとは HTML ファイル以外にも

 ・CSS スタイルシートファイル
 ・JS などのスクリプトファイル
 ・画像ファイル

など複数の外部ファイルで構成されています。

 # もちろん、HTML 単一で構成されたページもあります。

ご質問文にあるコードだと、この内 HTML ファイルのみローカルに保存して
いるだけで、出力されたファイルをブラウザで開くと、フルパス指定されて
いない画像などは欠けた状態になるはずです。

画像等も含めてローカルに保存したい場合、URLDownloadToFile API を使用
するなら、HTML の中で参照されている先述の外部ファイルも一緒に
URLDownloadToFile API でダウンロードし、かつ HTML ファイルを解析して
参照リンクも書き変えなければなりません。

■案1. IE を操作して保存ダイアログを使う方法

' // IE で WEB ページを保存する
Sub Sample1()

  Const READYSTATE_COMPLETE   As Long = 4
  Const OLECMDID_SAVEAS     As Long = 4
  Const OLECMDEXECOPT_PROMPTUSER As Long = 1
  
  Dim ie As Object  ' // InternetExplorer
  Dim url As String
  
  url = "http://www.goo.ne.jp/"
  
  ' // ie を起動して目的のページを開く
  Set ie = CreateObject("InternetExplorer.Application")
  ie.Visible = True
  ie.Navigate url
  While ie.Busy Or ie.ReadyState <> READYSTATE_COMPLETE
    DoEvents
  Wend
  ' // 初期ファイル名を指定するため WEB ページタイトルを変更します
  ie.Document.Title = "test"
  ' // ie の保存ダイアログを表示します
  ie.ExecWB OLECMDID_SAVEAS, OLECMDEXECOPT_PROMPTUSER

End Sub

保存ダイアログの自動化は可能ですけど、API を駆使した面倒なコードになり
ますので省略します。


■案2. MHT ファイルでも良ければ...な方法(Windows2000以降限定)

参考(Wiki): http://ja.wikipedia.org/wiki/MHTML

Sub sample2()

  ' // この方法でも完全ではないが、実用上はほぼ問題ないか。。な

  Const cdoSuppressNone    As Long = 0
  Const adSaveCreateOverWrite As Long = 2
  
  Dim msg     As Object ' // CDO.Message
  Dim stm     As Object ' // ADODB.Stream
  Dim url     As String
  Dim outFilename As String
  
  url = "http://www.goo.ne.jp/"
  outFilename = ThisWorkbook.Path & "\sample.mht"
  
  Set msg = CreateObject("CDO.Message")
  msg.CreateMHTMLBody url, cdoSuppressNone, "", ""
  Set stm = msg.GetStream
  stm.SaveToFile outFilename, adSaveCreateOverWrite
  stm.Close

  Set stm = Nothing
  Set msg = Nothing

End Sub

要するに、メールのように HTML に画像ファイルなどが添付されるような
イメージです。

なお、コードは一切エラー処理はしてませんし、必要最小限しか書いてません。
お試しになる場合は、ご自身で試行錯誤してみて下さい。

こんにちは。

> WEBページを完全保存する方法

ご質問なさっていることは、かなり面倒なことです...ね。

ご存じかもしれませんが、WEB ページとは HTML ファイル以外にも

 ・CSS スタイルシートファイル
 ・JS などのスクリプトファイル
 ・画像ファイル

など複数の外部ファイルで構成されています。

 # もちろん、HTML 単一で構成されたページもあります。

ご質問文にあるコードだと、この内 HTML ファイルのみローカルに保存して
いるだけで、出力されたファイルをブラウザで開くと...続きを読む

QvbaでIEの名前を付けて保存(A)をしたい

VBA で IEの通知バー を操作したいです。
SendKeys で 通知バーの 保存(S) はできたのですが、
保存(s)の右隣の ▼ をクリックするとでてくる、 名前を付けて保存(A) の方法がわかりません。

どのようなキーをおくればよいのでしょうか。


他の質問をみると、SendKeysではなく ○○がよいですよ みたいな内容しか見つからず、
回答をみつけることができなくて困っておりますのでよろしくお願いいたします。

Aベストアンサー

VBAでインターネット上のファイルをダウンロードする方法をまとめてみました。 | 初心者備忘録
http://www.ka-net.org/blog/?p=4855
とか。

Qエクセルのマクロでアクティブシートをhtml保存

エクセルのマクロを使って、アクティブシートのみをhtml形式に保存したいと考えています。

 ActiveSheet.SaveAs Filename:="ファイルパス", FileFormat:=xlHtml 

でhtmlに保存するところまではできたのですが、すべてのシートが出力されてしまいます。
アクティブなシート、あるいは特定のシートのみをhtml形式で保存する方法があればご教示ください。

Aベストアンサー

こんにちは。

失礼しました。こちらで。

'html作成のシート名をコピー
ThisWorkbook.Worksheets("sheet1").Copy
Workbooks(Workbooks.Count).SaveAs Filename:="ファイルパス", FileFormat:=xlHtml

QVBAを使ってHTMLソースから特定の文字列を抽出したいと思っています

VBAを使ってHTMLソースから特定の文字列を抽出したいと思っています。
正規表現を利用してタグに挟まれた文字を抽出したいのですがうまくいきません。
タグごと抽出する方法でも構わないので教えてください。

例えば
<a href="www.yahoo.com△">○○○</a>   ・・・<1>
※△は(www.yahoo.com)+(半角数字1文字)
※○○○は1文字以上の全角文字

このようなパターンの文字列(<1>を丸ごと)を抜き出すには
どのような正規表現を書けばよいでしょうか?
単に<a href ではじまって </a>  で終わる文字列であれば
<a href.*</a>
で良いと思うのですが、もう少し範囲を絞れば目的の文字列だけを抽出できるので
ぜひ実現させたいと思っています。宜しくお願いします。

Aベストアンサー

 正規表現による抽出にこだわらないでしたら、
>例えば
の答えは、[Links プロパティ] により、 下記のような方法で
>タグごと抽出する
こともできますし、
>もう少し範囲を絞れば目的の文字列だけを抽出
することもできます。

Sub test()
 Dim objIE As Object
 Dim i As Long
 Set objIE = CreateObject("InternetExplorer.Application")
 With objIE
  .navigate "http://www.yahoo.com/"
  While .Busy Or .ReadyState <> 4: DoEvents: Wend
  With .Document
   For i = 0 To .Links.Length - 1
    Cells(i + 1, 1) = .Links(i).outerHTML
    Cells(i + 1, 2) = .Links(i).outerText
   Next
  End With
 End With
 objIE.Quit
 Set objIE = Nothing
End Sub

 正規表現による抽出にこだわらないでしたら、
>例えば
の答えは、[Links プロパティ] により、 下記のような方法で
>タグごと抽出する
こともできますし、
>もう少し範囲を絞れば目的の文字列だけを抽出
することもできます。

Sub test()
 Dim objIE As Object
 Dim i As Long
 Set objIE = CreateObject("InternetExplorer.Application")
 With objIE
  .navigate "http://www.yahoo.com/"
  While .Busy Or .ReadyState <> 4: DoEvents: Wend
  With .Document
   For i = 0 To .Links.Lengt...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QVBAを使い、Web上からファイルをダウンロードしたいのですが・・・

はじめまして。
今、日証金から日々の融資・貸株残高のデータ(CSV)を自動的に
ダウンロードしてExcelに取り込むというマクロを作ろうとして
いるのですが、うまくいきません。


具体的には、

range("A1").value = "http://www.jsf.co.jp/de/stock/dlcsv.php?target=balance&date=" & format(now,"YYYY-MM-DD")
range("A1").select
Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True

しかし、これだと「ファイルを保存」のWindowがあがってしまうので
処理が途中で止まります。

VBAで、あらかじめ指定したディレクトリに、指定したURLからファイルを自動的にダウンロードする
には、どのようにすればよいのでしょうか?

Aベストアンサー

ちょっと無茶ですね・・・。
APIという機能を使う事になります。
これでVBAの機能を拡張して新たな機能を取り込む事ができるようになります。


http://www.accessclub.jp/bbs5/0009/vba2406.html
http://www.ken3.org/vba/backno/vba120.html

QVBAでwebの画像を名前を付けて保存する方法

下記でエクセルのシートには保存はできましたが直接画像をjpegでファイルとして保存するにはどうすれば良いでしょうか?
マクロの記録では無理でした・・・
どなたかご存知の方よろしくお願いいたします。
Sub test()
Dim IMG As Variant
Dim wbooks As Workbook
Dim Filename As String
Set wbooks = Workbooks.Add
Filename = "C:\テスト\" & Format(Date - 1, "yyyymmdd") & ".xlsx"
wbooks.SaveAs (Filename)
IMG = "http://t-success.co.jp/image.jpg"
With ActiveSheet.Pictures.Insert(IMG)
.Top = Range("A1").Top
.Left = Range("A1").Left
End With
wbooks.Save
End Sub

Aベストアンサー

知恵袋に回答がありました。ご参考まで。
下記では画像ファイルがpngとなっていますのでjpgに変更する事と、JRLアドレスの変更で可能だと思います。

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1449318889

QVBAからhttpを呼びソースを取得

ブラウザでURLを指定すると、htmlがサーバーから返され表示されます。
それをVBAからURLを指定し、htmlのソースを文字列で受け取りたいと思います。

普通にshellで渡すとブラウザが起動されてしまうし・・・。

方法があれば教えてください。

Aベストアンサー

HTMLテキストを取るには
Sub test01()
Set obj = CreateObject("InternetExplorer.Application.1") 'IEを新規オブジェクトとして宣言
obj.Visible = True
targetURL = "http://okweb.jp/kotaeru.php3?qid=1044759"

obj.Navigate (targetURL) '指定アドレスに飛ばす
'時間待ち(objが動作中であれば)
Do While obj.busy
Loop

'表示
obj.Visible = True
For n = 0 To obj.Document.All.Length - 1
If UCase(Trim(obj.Document.All(n).tagname)) = "HTML" Then
s = obj.Document.All(n).outerhtml 'HTMLのテキスト
Cells(n + 1, 1) = s 'エクセルONLY用
End If
Next
End Sub
2,3のWEBに載ってたものの寄せ集めですが。
なかなか載って無いものですね。
sが文字列です。エクセルなどでは、長さ制約あり。
WSHやBASP21やWEBBROWSERなど使う方法があるようですが、不勉強で全体を見渡せていないので取りあえず。

HTMLテキストを取るには
Sub test01()
Set obj = CreateObject("InternetExplorer.Application.1") 'IEを新規オブジェクトとして宣言
obj.Visible = True
targetURL = "http://okweb.jp/kotaeru.php3?qid=1044759"

obj.Navigate (targetURL) '指定アドレスに飛ばす
'時間待ち(objが動作中であれば)
Do While obj.busy
Loop

'表示
obj.Visible = True
For n = 0 To obj.Document.All.Length - 1
If UCase(Trim(obj.Document.All(n).tagname)) = "HTML" Then
s = obj.Docum...続きを読む

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

QVBAからIEを操作する時のウィンドウの選択の仕方がわかりません

VBAで、webページを操作するマクロを組んでいます。
具体的な手順としては、セルの商品番号をweb上の検索ボックスに入力して、別ウィンドウで開いた情報を「すべて選択」「コピー」してexcellの別シートに「貼り付け」までを行うものなのですが、
別ウィンドウで開いたページに対して、Sendkeysを行うにはどうやったらいいのでしょうか。
仮に、入力ページをA、結果ページをBとしたとき、Aに対しての入力とBページの表示までは出来ているのですが、Bページに対しての操作が出来ません。

ちなみに、事情があってwebクエリはあえて使っていません。
どなたか、いい解決方法・プロシージャをご存知でしたらよろしくお願いします。

Aベストアンサー

こんにちは。KenKen_SP です。

検索フォーム経由ではなく、検索結果のページをコードで直接開けないですか?
例えば、教えてGooなら

http://oshiete1.goo.ne.jp/kotaeru.php3?q=


URL の後ろに ? マークがあります。この記号以下は CGI に渡すパラメータです。
q= の後ろに質問番号が入りますので、予め質問番号が分かっている場合は、
この URL に質問番号を連結してやれば、直接開くことができます。

仮に、質問番号が A1 セルに入っているなら

IE.Navigate "http://oshiete1.goo.ne.jp/kotaeru.php3?q=" & Range("A1").Value

みたいなコードで検索結果ページを開くことができると思います。同様に、商品番号
を渡すパラメータがあるはずですから、探して見て下さい。CGI にパラメータを渡す
方法が Get でも Post の場合でも検索フォームの HTML ソースを見れば分かります。

取り合えず、一度検索フォームの HTML ソースを見てみましょう。

これが可能なら、コードで IE オブジェクトを作り、直接検索結果のページを開くこ
とができますので、IE のウインドウハンドルやウインドウタイトルは簡単に取得
できます。

簡単な例です。A1 セルの値を Google で検索し、結果を A5 セルに貼り付けます。


Option Explicit

Private Declare Function SetForegroundWindow Lib "user32.dll" ( _
  ByVal hWnd As Long _
) As Long
  
Sub Sample()

  Dim IE   As Object
  Dim strURL As String
  Dim lngRet As Long
  
  Const READYSTATE_COMPLETE = &H4
  
  strURL = "http://www.google.com/search?hl=ja&lr=lang_ja&ie=Shift_JIS&q="
  strURL = strURL & Range("A1").Value
   
  Set IE = CreateObject("InternetExplorer.application")
  IE.Visible = True
  IE.navigate strURL
  Do
    DoEvents
  Loop Until Not IE.Busy And IE.readyState = READYSTATE_COMPLETE
  
  ' IE のウインドウをアクティブにする
  lngRet = SetForegroundWindow(IE.hWnd)
  If lngRet <> 0 Then
    ' アクティブにできたらキー送信して結果をコピー
    SendKeys "^a", True
    SendKeys "^c", True
    ' 貼り付け
    Range("A5").Select
    ActiveSheet.Paste
  End If
  Set IE = Nothing

End Sub

どうしても検索フォームを経由し、新しい IE を開く必要がある場合は、
参考 URL 先の記事が参考になると思います。

参考 URL: http://www.ken3.org/cgi-bin/group/vba_ie.asp

ちなみに、SendKeys を使わない方法としては、IE.Document.body.innerHTML
で HTML ソースは取得し、クリップボードに転送してからペースト、、

というのでも良いかもしれません。

では。

こんにちは。KenKen_SP です。

検索フォーム経由ではなく、検索結果のページをコードで直接開けないですか?
例えば、教えてGooなら

http://oshiete1.goo.ne.jp/kotaeru.php3?q=


URL の後ろに ? マークがあります。この記号以下は CGI に渡すパラメータです。
q= の後ろに質問番号が入りますので、予め質問番号が分かっている場合は、
この URL に質問番号を連結してやれば、直接開くことができます。

仮に、質問番号が A1 セルに入っているなら

IE.Navigate "http://oshiete1.goo.ne.jp/kot...続きを読む


人気Q&Aランキング