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

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

新規登録して質問してみよう
ただいま回答率
85.48%
SVG

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

VBA

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

HTML5

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

HTML

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

Q&A

解決済

2回答

3812閲覧

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

rickey

総合スコア24

SVG

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

VBA

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

HTML5

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

HTML

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

0グッド

0クリップ

投稿2018/11/20 01:43

編集2018/11/20 06:47

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

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

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

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

投稿2018/11/28 06:22

ladybird

総合スコア163

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rickey

2019/01/02 09:58

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

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/02 17:42

shinobu_osaka

総合スコア456

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rickey

2019/01/02 22:14

ご回答ありがとうございます。コピペを繰り返すレベルに近く、最近javascriptの勉強を始めたところです。おそらく理解していないから、質問もあいまいなのかと思います。 このお返事を読んで、勉強不足を感じました。まず、返事してくださったキーワードを検索しながら理解してみます。今の自分では、難しい、基礎ができていない、ということがわかっただけでもよかったです。 しっかり勉強しなおします。 ご丁寧に返事くださって本当にありがとうございます。 ちなみに求めている回答は 「単に元のURLへアクセスして保存するという方法が困難です。」なのか、可能なのかが知りたかったので、sinobu様の回答が助かりました。
shinobu_osaka

2019/01/03 01:20

承知いたしました。 SVGについてはエクセルで取り扱うにはかなり面倒ですので、 手軽にスクリーンショットしてしまうのが良いかもしれません。 Javascriptを使っているのがわざとでないのであれば、 まずはともかく普通のDOM操作を勉強してみてください。 ex: .document.GetElementsByTagName("a")(i).Click ExcelVBAでのDOM操作は得意なので回答依頼を行っていただいても結構です。 では頑張ってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問