• ベストアンサー

エクセルのWEBクリエで取り込めないデータ

DOUGLAS_の回答

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.7

 念のために書かせていただきますが、使い古しの ブック に新しい シート を追加するのでは意味がありません。 1)新しい ブック を開きます。 2)その ブック に 標準モジュール を追加します。 3)マクロ の コード を「ここ」から コピペ します(手書きは絶対ダメです。誤記の元です)。 4)「Microsoft Forms 2.0 Object Library」に参照設定します。 5)マクロ を動かします。  以上が、こういうところの コード を試す基本かと存じます。  ひょっとしたら、Excel の バージョン がいたずらをしているのかも知れませんので、その場合は原因を確かめようがありません(私は 2003 です。) --------------------------------------------------  先ず、下記の サンプルを、上記 (1) ~ (5) の段取りでお試しください。 Sub テスト()  Dim objIE As Object  Dim myTbl As String  Dim CB As New DataObject  Set objIE = CreateObject("InternetExplorer.Application")  With objIE   .Navigate "http://www.stardigio.com/songlists/lists1/401.html"   .Visible = True   '上手く行けば、「401Ch」の ページ が表示されます。   Application.Wait (Now + TimeValue("0:00:2"))   myTbl = objIE.Document.getElementsByName("SongLists")(0).outerHTML   MsgBox myTbl   '上手く行った場合は、「<div id="SongLists"・・・」というような メッセージ が表示されます。   .Quit  End With  Set objIE = Nothing  With CB   .SetText "こんにちは"   .PutInClipboard   .GetFromClipboard   MsgBox .GetText   '上手く行った場合は、「こんにちは」という メッセージ が表示されます。  End With End Sub  上記の3点がすべて上手く行く場合は、「使い古しの ブック」が原因かも知れません。 ==================================================  これより下は、上記が上手く行った場合にお試しください。  サンプルコード を2つ掲載いたします。 A】1つは、「ANo.3」を基本として、クリップボード オブジェクト を利用するものですが、「ANo.3」の コード の内、 myTbl = Left(myTbl, InStr(myTbl, "</table>") - 1) & "</table></div></div>" の行を、 myTbl = Left(myTbl, InStr(1, myTbl, "<p class=""caption"">", vbTextCompare) - 1) & "</div>" に差し替えてください。  なお、原因が分かりませんが、「楽曲タイトル・演奏者名」の htmlコード を削除しても、その行が空白のまま表示されてしまいますので、『A列に「楽曲タイトル」(B列に「演奏者名」)という・・・行をVBAの中で削除』するのではなくて、マクロ が終わった後から、Excel の一般機能の「検索」により「楽曲タイトル」と書かれている セル を「すべて検索」・選択して、「行全体」を削除されるのが良いかと存じます(この作業自体を マクロ で行なうこともできますが、ご興味があれば、VBE で [Find メソッド] の ヘルプ をご覧ください)。 B】もう1つは、htmlコード を「タブ区切り」・「改行区切り」の文字列に変換して配列に格納し、そのまま ワークシート に展開するものです。  正規表現により、htmlコード を「改行」・「タブ」に変換したり、削除したりしておりますが、「正規表現」自体の パタン の書き方が素人ですので、無駄な マッチング が多いかと思われます(こちらは別途ご自習ください)。 Sub 配列に格納してから()  Dim objIE As Object  Dim RE As Object  Dim myCh As Variant  Dim myTbl As Variant  'dim CB As New DataObject  Set objIE = CreateObject("InternetExplorer.Application")  Set RE = CreateObject("VBScript.RegExp")  With objIE   Do    myCh = Application.InputBox("チャンネル番号を入力してください。" _     & vbNewLine & vbNewLine & "終了するときは キャンセル してください。", _     "STAR digio", 401, 100, 100, , , 1)    If VarType(myCh) = vbBoolean Then Exit Do    If CInt(myCh) <> myCh Or myCh < 400 Or myCh > 499 Then     MsgBox "400~499 の整数を入力してください。"    Else     .Navigate "http://www.stardigio.com/songlists/lists1/" & myCh & ".html"     Application.Wait (Now + TimeValue("0:00:2"))     myTbl = objIE.Document.getElementsByName("SongLists")(0).outerHTML     myTbl = Replace(myTbl, "", "")     With RE      .Global = True      .Pattern = "\n.*":        myTbl = .Replace(myTbl, "")      .Pattern = ".*<strong>":     myTbl = .Replace(myTbl, "")      .Pattern = "</strong></h1><p>": myTbl = .Replace(myTbl, vbCr)      .Pattern = "</div>.*?<span>":  myTbl = .Replace(myTbl, vbCr)      .Pattern = "</span>":      myTbl = .Replace(myTbl, "")      .Pattern = "</h2>.*?<td>":    myTbl = .Replace(myTbl, vbCr)      .Pattern = "</td></tr><tr><td>": myTbl = .Replace(myTbl, vbCr)      .Pattern = "</td><td>":     myTbl = .Replace(myTbl, vbTab)      .Pattern = "</td>.*?</table>":  myTbl = .Replace(myTbl, "")      .Pattern = "<br>":        myTbl = .Replace(myTbl, vbCr)      .Pattern = "</p>":        myTbl = .Replace(myTbl, "")      .Pattern = "<.*":        myTbl = .Replace(myTbl, "")      .Pattern = "&amp;":       myTbl = .Replace(myTbl, "&")      .Pattern = "&nbsp;":       myTbl = .Replace(myTbl, " ")     End With     myTbl = Split(myTbl, vbCr)     Cells(Rows.Count, 1).End(xlUp).Offset(2).Select     If Selection.Address = "$A$3" Then Range("A1").Select     Selection.Resize(UBound(myTbl) + 1) = Application.Transpose(myTbl)    End If   Loop   .Quit  End With  Set RE = Nothing  Set objIE = Nothing  Columns("A:A").TextToColumns Tab:=True End Sub

noro6857
質問者

お礼

お手数をおかけします。 まず使い古しのbooksheetについて あらかじめ関数を記述してあるbooksheetに今回のVBAマクロを追加しwebからのデータをとりこんだ上で、その関数から得られたデータを別の作業に使うことにしています。(取り込みデータはA列、B列、関数記述列はC~F列) この関数入りのシートにVBAを加えた場合及びなにも書かれていない新規SheetにVBAを記述した場合、いずれでもTESTマクロでは「こんにちわ」までたどり着きました。 次にサンプルコード1による場合は、 差し替えたmyTbl = Left(myTbl, InStr(1, myTbl, "<p class=""caption"">", vbTextCompare) - 1) & "</div>" のところでNo4と同じメッセージになりました。 サンプルコード2の場合は、数字入力Boxで数字を入れたあと再度数字入力Boxが表示される繰り返しになってしまいました。

関連するQ&A

  • Webクリエ うまく読み込みできません><

    Webクリエ うまくできません>< http://fx.himawari-group.co.jp/report/weeklycalendar.html のサイトのカレンダーを読み込みたいのですが・・・ エラーが出てしまいます! *画像参照お願い致します!

  • 新しいクリエ買ったのはいいんですが

    とうとうVZ90買いました。 いままで使っていたクリエからデータを移したいのですが、そのままできるんじゃないかなと思い、 強引にホットシンクさせたらやっぱりダメでした。 前のクリエの全部のデータをそのまま移せる方法って ないんでしょうか・・・? MSバックアップで移行もしてみましたが、このデバイスでバックアップされたものではないと蹴られてしまいました

  • ウェブサイトのデータの入手方法

    VisualBasic6.0でウェブサイトのデータをオブジェクトとして 取得する方法が判りません。 ExcelのWebクリエのようにHTMLのテーブルタグの内容が直接 オブジェクトとして取得できるようにしたいのですが、方法 が判りません。 今は、タグを一つ一つ外してから、読み込むようにしている のですが、サイトが変更されると一からやり直しなので、で きればもっと簡単な方法があればお願いします。

  • エクセルのデータを自動的にWebに入れるには?

    いつもお世話になっています。 エクセルのデータをホームページに入れる時、決まった動作の繰り返しをするので、これを自動化することは出来ないでしょうか?VBAだとエクセル内部でしか出来ないのではないでしょうか? こういう操作です。 エクセルの場面でセルをCtrl+Cでコピーして、リターンキーを押して(セルが次のセルへ飛ぶ)、Alt+TabでWeb画面へ移動して、Ctrl+VでWebにエクセルの数値を貼り付けて、Tabキーを数回(回数は一定)押して次の入力欄へ移動させて、Alt+Tabでエクセル画面へ戻って、またCtrl+Cでコピー。 この繰り返しでエクセルの数値をWeb画面に入力するのです。このような定型的な動作はコンピューターが得意とするはずですが、VBAでは実現できない(と思う・・。エクセルの外部にまで操作出来るのでしょうか?)。 何か方法があるはずですが、ご存知の方がいらっしゃればよろしくお願いしたします。

  • ボタン天国をインストールするとWEBからのデータ取り込みができない

    Excel用ボタン天国100をインストールしたところ、「データ」→「外部データの取り込み」→「新しいWEBクリエ」によるWEBデータの取り込みが出来なくなりました。

  • VBAを用いて、ウェブからデータを取り込みたい

    エクセルVBAでウェブからデータを取り込みたいと思い、いろいろ挑戦していますが、以下のやり方(1)と(2)は失敗中です。 取り込みたいのは、ウェブページ中に描かれてある「表」の部分のデータです。 アドバイスをお願いいたします。 ◆◆◆◆◆失敗(1)◆◆◆◆◆ ActiveSheet.QueryTables.Add(Connection:="url;http://***省略***.htm", Destination:=Range("A1")) の方法の場合、取得したデータをエクセルシートに張り付けた場合に生じる文字化けがなおらず挫折・・・ QueryTableは文字コードを指定して読み込めないので困難という結論に至りました。 ちなみに目的のウェブページはshift-JISでcharsetされてますが、取得したいデータ部分はSQLサーバーでUTF-8で記述されていると思われます。 →http://okwave.jp/qa/q7864296.html ◆◆◆◆◆失敗(2)◆◆◆◆◆ ユーザーフォーム機能から、WEBブラウザーコントロールを用いて目的のウェブページを表示する方法では、表示したウェブページの情報をエクセルシートに転記する方法が分からず挫折・・・ url_report = "http://****省略.htm" WebBrowser1.Navigate url_report 'ここから先、どうすればエクセルシートにデータ取得できる? 上記(1)や(2)以外で他のやり方も含め、経験者の方のアドバイスをお願いいたします。 ウェブページ中の表データをエクセルシートにVBAで自動取得したいのですが・・・何か良い方法がありますでしょうか? ((+_+))

  • クリエでMacでMP3は聴けますか?

    クリエ(Clie)のPEG-N700CがMP3に対応したと雑誌で読みました。 これまで、MacからクリエにはOpenMG形式のファイルを落とせなかったようですが、MP3になって、Macからもクリエに音楽データを落とせるようになるのでしょうか? Macユーザーなんですが、クリエでMP3を聴きたいのです。方法を教えてください。 まず、メモリースティックとメモリースティックリーダーはやっぱり必要なんですよね? また、ダウンロードが始まったというAudioPlayer Ver.2はMacでも使えるのでしょうか?

  • Excel VBA で Webからデータを取得する方法

    Excel VBAを使ってWebページからデータを 取得する方法を探しています。 最初に、そのWebページの認証ページにIDをパスワード をVBAから自動で送信したいのですが、方法が全く わかりません。 認証ページはJavascriptを利用したページです。 どちらかご存知の方がおられましたら、 ご教授ください。

  • またまたエクセルでWEBデータを取り込む

    下のVBAは以前にお世話になった方に教えていただいたWEBからのデータ取得するものです。 日付を入力することで、その日のデータを取り出すことができます。 ところがWEBのURLが変更になってしまいました。 当方、VBAは疎いため適当に部分修正で利用しようとしたもののなかなかうまくできません。 呼び出したデータも以前と若干形式がちがっているためそのへんも直したいところがあるのですが 取りあえずWEBの取り出し方記述を教えていただければありがたいです。 (70, 80, 32, 62, 101,…というのはたぶんジャンル区分なので今回は不要です。) よろしくお願いします。 WEBURL(旧) http://www.m******/****/0062/00620726.html WEBURL(新) http://m*****/*****/2012-04-17/ ●旧WEB取り出しVBA Sub Using_Web_query30A() Dim arrMenu As Variant Dim myDate As String Dim myURL As String Dim Connection_URL As String arrMenu = Array(70, 80, 32, 62, 101, 102, 90, 120, 40, 22, 31) myDate = InputBox("オープンする日付を「月/日」のように入力してください。", _ "日付の入力", Format(Date, "m/d")) myURL = "0062/0062" & Format(Split(myDate, "/")(0) * 1, "00") & _ Format(Split(myDate, "/")(1) * 1, "00") Connection_URL = "http://www.m*********/***/" & myURL & ".html" Columns(1).ClearContents With ActiveSheet.QueryTables.Add(Connection:= _ "URL;" & Connection_URL, Destination:=Range("A1")) .WebFormatting = xlWebFormattingNone .WebTables = "9" .Refresh BackgroundQuery:=False End With

  • エクセルのWEBクエリで取り込めないデータ(続)

    QNo6887062で教えていただいたWEBからデータを取り出すVBA(A15)で対象URLのレイアウトが変更になってしまいました。そこで引き続き活用したいため修正方法を教えていただければと思います。 URLの変更については一部対応できたのですが、取り出す範囲、除去する方法です。 具体的にはQ&Aの中で書きますので、上記VBAを修正できる方でお願いします。 Excel2010/WinXP