質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.45%

  • HTML

    11919questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • HTML5

    5311questions

    HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

  • VBA

    2396questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • SVG

    130questions

    SVGは、XMLを基盤とした2Dベクター画像記述言語。画像を線・面といった図形の集合体として扱うベクター画像のため、環境に適した表示が可能です。アニメーション機能もサポートされており、簡単なインタラクティブコンテンツ作成もできます。

VBAを用いて、HPのsvgタブの画像をエクセルにコピペする方法

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 434

rickey

score 14

VBAを用いて、ウェブスクレイピングをしています。
svgタグで記載されている画像をコピーしてエクセルに貼り付けたいと思っています。
そもそも、VBAでそんなことは可能なのでしょうか?

https://www.shiki.jp/stage_schedule/?aj=0&rid=0057&ggc=4017#201901
のサイトを開き、13:30 と記載されているカレンダーがをクリックすると、
座席表が表示されますこのその座席表をエクセルに貼り付けたいと考えています。
もしやりかたがあるならご教授ください。よろしくお願い致します。

Sub 開いたページをクリックする()
Dim objShell As Object              
Dim objWindow As Object             
Dim objIE As InternetExplorer
Dim キーワード As String
Dim strIFrameSrc As String
Dim objLink As Object
Dim タイトル   As String
タイトル = "ライオンキング 東京 | 公演情報 | 劇団四季"
Set objIE = Nothing
    '---------開いているのページを取得する処理---------
    Set objShell = CreateObject("Shell.Application")
    For Each objWindow In objShell.Windows
        'IEウィンドウの判定
        If InStr(LCase(objWindow.FullName), "iexplore.exe") > 0 Then
            'titleに「タイトル」が含まれていれば該当のページと判定
            If InStr(objWindow.Document.Title, タイトル) > 0 Then
                Set objIE = objWindow
                Exit For
            End If
        End If
    Next

     'titleページが見つからなかった場合の処理
    If objIE Is Nothing Then
        MsgBox "ページの取得ができませんでした。"
        End
    End If

Dim objtag As Object
Set objtag = objIE.Document.getElementsByTagName("a")
For i = 0 To objtag.Length - 1
 If InStr(objtag(i).outerHTML, "13:30") > 0 Then
  objIE.Document.Script.setTimeout "javascript:document.getElementsByTagName('a')(" & i & ").click()", 200
 End If
Next i
Sleep 1000

End sub
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

このままでは丸投げと判断され回答が付かないかと思います。
直接の回答ではないですが、ヒントを。

まずはやりたいことを細分化しましょう。
「VBAでWebページの内容(HTML)を取得する」とか
「VBAでWeb上の画像を取得する」とか。

そしてそれぞれの方法を調べて、それでもなお分からないところがあれば、
それを改めて質問すれば回答が付きやすいかと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/02 18:58

    回答がつかない理由やどうすればつくかまで、教えていただけるとは、本当に感謝です。返事が遅くなり、申し訳ありません。勉強して、もう少し、質問の場所を絞れるように努力します。ありがとうございました。

    キャンセル

checkベストアンサー

0

まず、求めている回答がわかりません、
該当ページから13:30である部分を見つけ出してクリックする部分をどこかからコピペしてきたコードで
作ったがうまく動かないのでしょうか?
それとも直接のDOM操作ではうまく行かなかったためDOM操作でjavascriptを埋め込むコードを
自力でかける技術まではお持ちなのでしょうか?

そこまではできるのであれば、
SVGタグについての理解が及んでいないかと思われます。

「svgタグで記載されている画像」と表現なさっておられますが、
SVGタグの中身はXMLであり、殆どの場合他の画像ファイルのように単体のバイナリファイルではありません、
HTML内に静的に埋め込まれている場合や該当ページのように動的に生成される方法で使用されることが多く、
単に元のURLへアクセスして保存するという方法が困難です。

保存を行う場合はページ表示(XML生成)後にDOM操作にて該当のDOMを操作しXMLを取り出すことにより可能です。
この手順で保存した場合は取得出来たものはXMLで記載されたベクターデータであり、
VBAでのラスタデータ(ビットマップデータ)化は難しい為、
表示にはSVG対応が必要となりますので、
エクセルシート上にMicrosoft Web Browser ActiveXコントロールを貼り付け、
そのソースを編集することによりシート上で表示が可能です、

もう一つの手法としては、DOM操作にてPNG等の画像化してダウンロードするJavascriptのコードを埋め込むという手もあります、この場合はJavascriptのコーディングも必要となる代わりに、
通常の画像ファイルとなりますので後の取扱が楽になります。

また、「そこまで本気の操作はいらないがとりあえず保存したい」という場合は、
IEを操作し画面いっぱいに表示、DOMを操作しSVGを画面いっぱいに表示させ、
スクリーンショットを撮る操作を行うという安易な方法もあります。

いずれにせよ結構高度(というかややこしい)事をしておりますので、
もしコピペしたコードを深い理解なく使用しているレベルの場合は、
まずは普通のページのクローリングから勉強なさらないと無理かと思われます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/03 07:14

    ご回答ありがとうございます。コピペを繰り返すレベルに近く、最近javascriptの勉強を始めたところです。おそらく理解していないから、質問もあいまいなのかと思います。
    このお返事を読んで、勉強不足を感じました。まず、返事してくださったキーワードを検索しながら理解してみます。今の自分では、難しい、基礎ができていない、ということがわかっただけでもよかったです。
    しっかり勉強しなおします。
    ご丁寧に返事くださって本当にありがとうございます。

    ちなみに求めている回答は
    「単に元のURLへアクセスして保存するという方法が困難です。」なのか、可能なのかが知りたかったので、sinobu様の回答が助かりました。

    キャンセル

  • 2019/01/03 10:20

    承知いたしました。

    SVGについてはエクセルで取り扱うにはかなり面倒ですので、
    手軽にスクリーンショットしてしまうのが良いかもしれません。

    Javascriptを使っているのがわざとでないのであれば、
    まずはともかく普通のDOM操作を勉強してみてください。
    ex: .document.GetElementsByTagName("a")(i).Click

    ExcelVBAでのDOM操作は得意なので回答依頼を行っていただいても結構です。
    では頑張ってください。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.45%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • HTML

    11919questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • HTML5

    5311questions

    HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

  • VBA

    2396questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

  • SVG

    130questions

    SVGは、XMLを基盤とした2Dベクター画像記述言語。画像を線・面といった図形の集合体として扱うベクター画像のため、環境に適した表示が可能です。アニメーション機能もサポートされており、簡単なインタラクティブコンテンツ作成もできます。