VBAで仕事上のデータを処理するシステムを作成しており、
どうしてもWEB上のデータを変数に入れたいのですが、どのような方法が良いでしょうか?
取得したいデータは関税協会にある為替相場です。
http://www.kanzei.or.jp/check/rate_all/2012/2012 …
上記のページに行くとアメリカ合衆国の為替レートが81.33というのがわかります。
VBA上の変数に81.33という数値を入れる方法を教えてください。
よろしくお願いします。
No.5ベストアンサー
- 回答日時:
#2,#4 です。
いかにUPしましたのでダウンロード願います。 (2)のほうが処理速度は速いです。
(1) #2(Excel:クエリでWebデータを取り込む)のソース
https://box.yahoo.co.jp/guest/viewer?sid=box-l-5 …
(2) #4(ブラウザでサイトを開くことなく、プログラムからHTMLソースを取得する方法)
EXCEL にボタンをつけてありますから・・・・ 別にExcelでなくても使用できます。
https://box.yahoo.co.jp/guest/viewer?sid=box-l-5 …
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
>>おそらく私が使い方を理解していないからだと思います
失礼ながら、ボタンを作成してマクロを動かすのもできない
というレベルだと このソースの中身の解析や
質問者さまが実現したい毎日かわるURL(為替のレート)
に対応するためのコードの作成は困難だと思います。
基礎的な技術を身につけて再度チャレンジしてみてください。
この回答への補足
ご丁寧にサンプルまで作っていただけて感激です。
ありがとうございます。
それと、私の返答の文章がおかしかったです、申し訳ありません。
ボタンを作成してマクロが作れないという意味ではなく、
ユーザーフォームにボタンを設置した場合に頂いたコードを貼り付けようとしたのですが、
うまく動かないので再度教えてくださいという意味でした。
↓こんな感じにしたかったのです。
http://appstrading.com/gazou.JPG
どちらにせよ勉強不足ではありますが、お時間があるときで結構ですので
ユーザーフォームへの設置の仕方を教えていただけませんでしょうか?
何度もお願いをして大変恐縮ではありますが、よろしくお願いします。
No.4
- 回答日時:
#2 です。
#2 よりも効率的なやり方が見つかりましたので実験ソースを公開します。
下記のサイトを参考にしました。<!感謝>
◆ブラウザでサイトを開くことなく、プログラムからHTMLソースを取得する方法です。
http://www.kanaya440.com/contents/tips/vbs/007.h …
このソースで実験してみたところ #2にくらべて かなり高速です。
Excel でなくても使えます。
#3の方もいっているとおり、あとは URL のアドレスをどうするのかが問題ですけど。
++++++++++++++++++++++<サンプル 実験ソース >+++++++++++++++++++
Option Explicit
Const cns_URL As String = "http://www.kanzei.or.jp/check/rate_all/2012/2012 …
Const FindString As String = "アメリカ合衆国", FindMoney As String = "ドル(USD)"
Private m_strHTML As String
Private m_FindOK As Boolean
Private m_Anser As String
Sub DollerYen_GET_PROC()
Dim arryHTML As Variant
Dim row As Integer
Dim I As Integer
Dim strWk As String
m_FindOK = False
m_Anser = Empty
If GetHtmlSource(cns_URL, m_strHTML, False) = False Then
GoTo MSG_DollerYen_GET_PROC
End If
arryHTML = Split(m_strHTML, vbLf)
For row = 0 To UBound(arryHTML)
'Debug.Print (arryHTML(row))
If InStr(1, arryHTML(row), FindString) > 0 Then
If InStr(1, arryHTML(row + 2), FindMoney) > 0 Then
m_FindOK = True
strWk = ""
For I = 1 To Len(arryHTML(row + 4))
strWk = Mid(arryHTML(row + 4), I, 1)
If IsNumeric(strWk) Or strWk = "." Then
m_Anser = m_Anser & strWk
End If
Next I
Exit For
End If
End If
Next row
MSG_DollerYen_GET_PROC:
If m_FindOK Then
MsgBox "アメリカ合衆国 ドル(USD) は(" & m_Anser & "円)です。"
Else
MsgBox "為替(アメリカ合衆国)の値が見つかりません。", vbExclamation
End If
Exit_DollerYen_GET_PROC:
Exit Sub
End Sub
'####################################################################################
'#
'# 関数名:GetHtmlSource
'#-----------------------------------------------------------------------------------
'# 機能 :指定のURLからHTMLソースを取得する
'# 引数 :strURL I URL
'# strRetVal O 取得した文字列
'# isSJIS I ソースが Shift-JIS の場合 True
'# strID I ドメイン認証が必要な場合のユーザーID
'# strPass I ドメイン認証が必要な場合のパスワード
'# 戻り値:True 正常、False 失敗
'#
'####################################################################################
Private Function GetHtmlSource(ByVal strURL As String, _
ByRef strRetVal As String, _
Optional ByVal isSJIS As Boolean, _
Optional ByVal strID As String, _
Optional ByVal strPass As String) As Boolean
Dim oHttp As Object
'オブジェクト変数に参照をセットします
On Error Resume Next
Set oHttp = CreateObject("MSXML2.XMLHTTP")
If (Err.Number <> 0) Then
Set oHttp = CreateObject("MSXML.XMLHTTPRequest")
End If
On Error GoTo 0
If oHttp Is Nothing Then
MsgBox "XMLHTTP オブジェクトを作成できませんでした。", vbCritical
Exit Function
End If
'ドメイン認証が必要な場合
If strID <> "" Then
oHttp.Open "GET", strURL, False, strID, strPass
Else
oHttp.Open "GET", strURL, False
End If
oHttp.Send
'失敗した場合は関数を終了します。
If (oHttp.Status < 200 Or oHttp.Status >= 300) Then Exit Function
'ソースを格納します
If isSJIS Then
'ソースが Shift-JIS の場合
strRetVal = StrConv(oHttp.responseBody, vbUnicode)
Else
'ソースが Unicode の場合
strRetVal = oHttp.responseText
End If
'オブジェクト変数の参照を解放します
Set oHttp = Nothing
'戻り値をセットします
GetHtmlSource = True
End Function
+++++++++++++++++++++++++++++++++++++++++++++
参考URL:http://www.kanaya440.com/contents/tips/vbs/007.h …
この回答への補足
NOBNNN様
色々調べてくださったようで詳細なご回答に感謝します。
是非実行したかったのですが、まだVBAの勉強をしたばかりでして
せっかく頂いたコードを活用できずにいます、、
ボタンを設置して、それを押したらドル円の値を変数に入れる形にしたかったので
ボタンを設置し、上記のコードを貼り付けましたが、プロシージャー内では無効というエラーがでてしまいます。
おそらく私が使い方を理解していないからだと思います。
もうちょっと勉強してみますが、もし追加で実行に移せるアドバイスを頂けたら嬉しいです。
お手数をおかけして申し訳ありませんが、もしお時間ありましたらお願いします。
No.3
- 回答日時:
こんにちわ
81.33という数字は、今日(2012/3/18)現在のものです。
アドレス xxx.kanzei.or.jp/check/rate_all/2012/20120318.htm
日が経てばまた違った値になります。
アドレスも作り直す必要かあります。
アドレスさえ作れば、数値を持ってくるのはそんなに難しいことではないです。
なので、アドレスがどういうルールで作られているか、
またはどういう方法で入力されているかを教えてください。
No.2
- 回答日時:
先に#1 の方も答えていますが EXCELで実験してみました。
とりあえず 下記ソースをモジュールとして貼り付け、マクロを実行してみてください。
やり方は
(1) http://kabu-macro.com/kouza/kabuka_shutoku/kueri …
(2) http://kabu-macro.com/kouza/kabuka_shutoku/macro …
(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/2012 … 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
+++++++++++++++++++++++++++++++
No.1
- 回答日時:
ExcelのVBAであれば、このあたりで調べてください。
http://www.google.co.jp/search?q=excel+web%E3%82 …
Excel以外だとちょっと大変だと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- Excel(エクセル) Excel 表の作成について 3 2022/06/16 12:15
- Visual Basic(VBA) EXCEL VBAで NHK NEWSの NEWSデータ内容取得が できない 1 2023/04/09 12:26
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) vbaについて 主に以下のような設定をしたいです。 Aブックの表の行数が20未満だったら Bブックの 1 2023/06/08 23:40
- Excel(エクセル) 2列のエクセルの表を変更したい 2 2022/06/30 10:39
- Excel(エクセル) Countifよりも早く重複数をカウントする方法ありますか? 18 2022/07/04 13:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【VB.NET】WebページのDOMソー...
-
レストラン、英語のメニュー表記
-
#ifdef多用でソースが見づらい
-
JSPの実行結果をHTMLに変換
-
【VC++6.0(MFC)】Access Violat...
-
ローカル環境とネット環境でホ...
-
ソースの表示を無効にする方法。
-
Dreamweaverのコードカラーが黒...
-
htmlソース文の 各行 改行位置...
-
COBOLのCALL文について
-
Duolingo のソースコードの名前...
-
googleドライブで、PDFファイル...
-
iPadの標準ブラウザでローカルH...
-
HTMLからフォルダを開きたい
-
VBA URLDownloadToFileについて
-
複数のindex.htmlが存在するホ...
-
、URL化させるにはどうしたらい...
-
医療画像(Windows用)をMacで...
-
社内で利用するWebサイトを立ち...
-
フレームページが表示されない...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで#Regionに変わるものは無...
-
プログラム時のヘッダコメント...
-
【VC++6.0(MFC)】Access Violat...
-
ソースの追加行数と変更行数
-
Dreamweaverのコードカラーが黒...
-
レストラン、英語のメニュー表記
-
JSPの実行結果をHTMLに変換
-
#ifdef多用でソースが見づらい
-
ソースの表示を無効にする方法。
-
generatorとは?
-
VBAでhtmlソースから特定の文字...
-
c言語の改修されたソースから改...
-
「INT86(・・・・・・);」 っ...
-
コメントが閉じてないというエ...
-
jsファイルの中身を確認したい…
-
borderの下線が表示されない
-
画像と文字が重なって表示される。
-
VisualBasicがインストールされ...
-
htmlでソースを表示させたくな...
-
innerHTML で表示変更した時の...
おすすめ情報