• ベストアンサー

VBAでWEB上のデータを変数に代入するには?

NOBNNNの回答

  • NOBNNN
  • ベストアンサー率50% (93/186)
回答No.2

先に#1 の方も答えていますが EXCELで実験してみました。 とりあえず 下記ソースをモジュールとして貼り付け、マクロを実行してみてください。 やり方は (1) http://kabu-macro.com/kouza/kabuka_shutoku/kueri.html (2) http://kabu-macro.com/kouza/kabuka_shutoku/macro_kabuka.html (3) http://www.d3.dion.ne.jp/~jkondou/excelvba/T2.htm を参考にしています。 ただ性能的には遅く、VB.NET2008 などで ご自分で別なDLL として作成したほうがいいかも 外部クラス参照でVBAからできるようにすれば可能です。 ++++++++++++++++++<サンプルソース> +++++++++++++++++++ Option Explicit Const cns_WkSheet = "_ExchengeSheet" Sub USD_Yen_GET() Dim FindFlg As Boolean: FindFlg = False Dim strAnser As String: strAnser = Empty Dim MyRange As Range Dim NowSheet As String NowSheet = ActiveSheet.Name With Worksheets.Add() .Name = cns_WkSheet End With With ThisWorkbook.Worksheets(cns_WkSheet) .Activate End With Call Exchenge_WEB_GET Set MyRange = Columns("A:B").Find(What:="アメリカ合衆国") '"アメリカ合衆国"の文字列を探す If Not (MyRange Is Nothing) Then '見つかったか? If MyRange.Offset(0, 1) = "ドル(USD)" Then 'レートの文字 "ドル(USD)"があるか? strAnser = MyRange.Offset(0, 2) FindFlg = True End If End If With ThisWorkbook.Worksheets(cns_WkSheet) Application.DisplayAlerts = False .Delete Application.DisplayAlerts = True End With ThisWorkbook.Worksheets(NowSheet).Select If FindFlg Then MsgBox "アメリカ合衆国 ドル(USD) は(" & strAnser & "円)です。" Else MsgBox "為替(アメリカ合衆国)の値が見つかりません。", vbExclamation End If End Sub Private Sub Exchenge_WEB_GET() ' ' Macro1 Macro ' マクロ記録日 : 2012/3/18 ' ' 外部データの取得 Webクエリ ' ' ActiveWorkbook.Worksheets.Add With ThisWorkbook.Worksheets(cns_WkSheet).QueryTables.Add(Connection:= _ "URL;http://www.kanzei.or.jp/check/rate_all/2012/20120318.htm", Destination:= _ Range("A1")) .Name = "20120318" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .BackgroundQuery = True .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .WebSelectionType = xlEntirePage .WebFormatting = xlWebFormattingNone .WebPreFormattedTextToColumns = True .WebConsecutiveDelimitersAsOne = True .WebSingleBlockTextImport = False .WebDisableDateRecognition = False .WebDisableRedirections = False .Refresh BackgroundQuery:=False End With End Sub +++++++++++++++++++++++++++++++

関連するQ&A

  • NY為替相場と東京為替相場の違い

     NY為替相場と東京為替相場の違いなんですが、僕は、NY為替相場はアメリカで円をドルに交換する時に適用されるもので、東京為替相場とは日本国内でドルを円に交換する時に適用されるものだと思いますが正しいでしょうか。又又、両者のレートの違いの主な原因は関税でしょうか。教えてください。

  • 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で自動取得したいのですが・・・何か良い方法がありますでしょうか? ((+_+))

  • 基準化したデータより得られた回帰式に新たな説明変数を代入する際の取り扱いについて

    基準化したデータより得られた回帰式に新たな説明変数の数値を代入し、従属変数の数値を計算(予測)する際、その代入される説明変数も基準化されている必要があると思いますが、その基準化の方法はどのように行えばよいのでしょうか? 例えば、サンプル数10、従属変数1、説明変数4というデータセットがあり、全変数を基準化し回帰係数を求めたとします。 得られた回帰式を用い新しいデータの説明変数の数値を代入することにより説明変数の値を予測したいと思います。 この際、この新たなデータも基準化される必要があると思うのですが、基準化する際には回帰係数を求めるために用いた10個のサンプルより計算された各説明変数の平均及び標準偏差を用いて、基準化を行うのでしょうか? 具体的には10個のサンプルから計算された説明変数a,b,c,dの平均がそれぞれ2,4,6,8、及び標準偏差が10,20,30,40であったとします。 新たなデータの説明変数a,b,c,dの値が3,6,9,12であった場合は、それぞれ(3-2)/10, (6-4)/20, (9-6)/30, (12-8)/40の値を計算し、その数値を回帰式に代入するのでしょうか? 長くなってしまい申し訳ありませんが、どなたか詳しい方がいましたら是非教えていただきたくお願いします。

  • [VBA] CountIfに変数を使いたい

    ある数値データがA1:A100まであるとします。これをいくつかの変数に基づいて数えたい場合、どうしたらいいのでしょうか? x=1 For i = 1 To 10 Cells(i, 5) = WorksheetFunction.CountIf(Range("A1","A100),">-(x)") x=x+10 Next i のような式を作ったんですが、うまく働いてくれません。たぶん変数xが使えないからだと思いますが、他にいい方法が浮かびません。いい方法がありましたら教えてください。よろしくお願いします。

  • VBAにてVLOOKUPの検査値を変数で指定

    VBAにてVLOOKUP(検査値、範囲、列番号、検索の型)を使用する時、検査値を変数として扱いたいのですが、どのような方法が良いのでしょうか。 セルに=VLOOKUP($D$3,名簿,2,0)と入力しD3を検査値とし名簿内より2にある社員番号を取り出しているのですが、これをVBAにて実施させ、セルには式ではなく社員番号を表示させたいのです。DATAとしてはD3から下にいくつか入力されているので、検査値を変数で扱う事によりD3以降全てのDATAを取り扱うようにしたいのです。 宜しくお願いします。

  • VBA(多くの数値データの最小値5つを格納する方法)

    VBA(多くの数値データの最小値5つを格納する方法) 現在テキストファイルの数値データを取り出し最小値5つを書き出す動作をVBAで行うつもりでいます。 例  5    9    33    11    1    0.3    0.02     ・     ・     ・     ・ といった形の数値データ行がテキストファイルに存在します。 今現在すべての数値データを格納してエクセルに書き出しそれを並び替え最小値5つ(0を除く)を見て作業を行っております。 この作業をより効率化するために、VBAを用いて0を除いた最小値5つをエクセルシートに書き出すようにしたいのですが、VBAの知識が足らず対策が思い浮かびません。 ・VBAで行いたいこと(わからない部分) 格納するデータを5つに設定して、数値データを順次読み込み最終的に数値データ群の最小値5つ(0を除く)を配列に格納している状態にしたい。 初歩的かもしれませんが、ご回答お願いいたします。

  • VBAでコマンドプロンプトの結果を変数に代入

    コマンドラインソフトのffmpegを使って、動画の再生時間などを取得したいのですが VBAでコマンドプロンプトの結果を変数に代入する方法について教えてください。 "D:\xxxx\ffmpeg\bin\ffmpeg" -i "d:\xxxx\aaff.mp4" 2>&1 | grep Duration これをコマンドプロンプトで実行すると d:\xxxx\aaff.mp4の再生時間などがコマンドライン上に表示されます。 これを変数に代入するために、 http://officetanaka.net/excel/vba/tips/tips27.htm このページを参考にして Sub Sample1() Dim WSH, wExec, sCmd As String, Result As String Set WSH = CreateObject("WScript.Shell") ''(1) sCmd = """D:\xxxx\ffmpeg\bin\ffmpeg"" -i ""d:\xxxx\aaff.mp4"" 2>&1 | grep Duration" Set wExec = WSH.Exec("%ComSpec% /c " & sCmd) ''(3) Do While wExec.Status = 0 ''(4) DoEvents Loop Result = wExec.StdOut.ReadAll ''(5) MsgBox Result Set wExec = Nothing Set WSH = Nothing End Sub を実行しました。 しかしResultには何の文字列も代入されませんでした。 恐らく、このページのタイトルにもあるように「MS-DOSコマンドの標準出力を取得する」 とあるので、標準出力しか取得できないのではないかと思います。 それでは一般的なコマンドラインソフトの実行結果を変数に代入するにはどうしたら良いでしょうか?

  • VBAオブジェクト変数またはWithブロック変数

    Access VBAについてお教えください。 VBAを使用しています。下記のようなコードでDOMの値を取得しようと思っています。 If IsNull(IE.Document.getElementsByTagName("table").Item(1).rows(1).cells(0).innerText) Or _ IE.Document.getElementsByTagName("table").Item(1).rows(1).cells(0).innerText = "" Then stocker = "" Else stocker = IE.Document.getElementsByTagName("table").Item(1).rows(1).cells(0).innerText End If IE.Document.getElementsByTagName("table").Item(1).rows(1).cells(0).innerText)にデータがある場合は、 問題なくstockerに値をセットすることができます。 ただし、IE.Document.getElementsByTagName("table").Item(1).rows(1).cells(0).innerText)にデータ(要素)が なにも無い場合は、エラーが発生します。 「実行時エラー91;オブジェクト変数またはWithブロック変数が設定されていません」 IE.Document.getElementsByTagName("table").Item(1).rows(1).cells(0).innerText)にデータが無い場合は、NULLが 帰ってくるとサイトで見かけたので、IF文を使って回避しようと思いましたが、成功しませんでした。 何が悪いと考えられるでしょうか?

  • 公務員 マクロ経済学

    公務員試験のマクロ経済学をやっているのですが 日本の企業が、日本国内の設備投資を行うために保持していたアメリカ合衆国の公債を大量に売却すると国際為替市場ではドルが売られ円が買われることから為替レートは円高になる と書いてあったのですが、アメリカ合衆国の公債を大量に売却すると国際為替市場ではドルが売られ円が買われる、の部分は、アメリカの公債を売るとドルが市場に出てドル安になる、と考えているのですが円が買われるという部分が理解できません。またドル安の部分の考え方も正しいのでしょうか? 詳しくなくていいので宜しくお願いします

  • Excel VBAで読み込んだテキストから任意のデータを取得するには?

    Excel VBAで外部テキストをTextBoxに読み込み、そのテキストの中から任意の場所の数値を取得する(変数に代入する)にはどのようにしたらいいのでしょうか? 例えば、外部テキストが以下のようなかんじだったとします。 ここから--------------------- ・・・ 通勤時間A root 60 root 120 root 45 root 225 root 30 通勤時間B root 90 root 150 root 75 ・・・ ここまで--------------------- このテキストの中から通勤時間Aを検索し、その下の行にある、60,120,45,225,30という数値を変数に代入したいのです。 テキストをTextBoxに読み込む方法はわかりますが、数値の検索方法がわかりません。どうすればいいでしょうか? (テキストをTextBoxに読み込まなくても数値を検索する方法があればそちらの方法もお願いします)。