八十万(やそよろず)の雑記帳

自分用のメモだったり、まとめだったり。
色々検索しても分からなかったり必要ない部分が多いんだったら、自分でまとめたらいいじゃない!

カテゴリ: エクセルVBA

今度は、VBScript(Microsoft Visual Basic Scripting Edition)を使って、その日の株価を取得して表示するアプリ?マクロ?を作ってみました。

サンプルは、こちらのGoogleapi.txtの拡張子を、「.vbs」に変えてお使いください。

コンピュータに害を云々~という警告が出ることもありますが、OK押してもらって大丈夫です。


動かした結果は、こんな感じ。

タイトルなし

それまで一週間の終値、高値、安値、始値、出来高と
当日の、1時間ごとの終値等を表示します。

これ、別に5分間隔にでもできますし、
何でもできますよ。

もちろん、VBScriptはマイクロソフトとついているだけあって、Windowsだけでしか動かないみたいですけれども、VBAともほとんど互換性があるみたいなので、
これをエクセルのマクロに張り付けて使うっていう方法もありますね。



色んなアプリや、何かで株のデータを管理していらっしゃると思いますが、
ザラ場にデータを得る方法って、意外と少ないんですよね。
普通に証券会社のページを見たりしていればいいんですけれども、

そういうのができない人でも、ワンクリックで、自分の好きな銘柄のデータを取得できます。


うまくダウンロードできないという方は
以下のサンプルをメモ帳などにコピペして、「a.vbs」とでも名付けるだけでも使えますよ。
VBScriptは、要領さえわかってしまえば何にもいらず作れるのがいいですね。


'サンプルここから

Option Explicit 

Dim strURL, strCheck_txt, strCode, strCodename, strSt_point, strEd_point, strPrice_txt, strTime '文字列 
Dim strPrice_txt1, strPrice_txt2, strPrice_txt3, strPrice_txt4, strPrice_txt5
Dim strTime1, strTime2, strTime3, strTime4, strTime5
Dim n
Dim ohttp 'オブジェクト 

Set ohttp = CreateObject("MSXML2.XMLHTTP") 

For n = 1 to 2
IF n = 1 then
strCode = "5742"
strCodename = "NIC"
Elseif n = 2 then
strCode = "9466"
strCodename = "aidma"
End if

 ' GoogleAPI 1日毎。pが取得日数、年数、iが間隔(秒)fが取得値(o始値c終値l安値h高値v出来高)
 strURL = "https://finance.google.com/finance/getprices?p=7d&i=86400&f=d,o,c,l,h,v&x=TYO&q=" _ 
 & strCode

 ' HTML形式で読み込む 
ohttp.Open "GET", strURL, False 
 ohttp.setRequestHeader "If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT" 
 ohttp.send 
 If ohttp.Status <> 200 Then WScript.Quit 'リクエスト失敗で終了 

'UNIXTIMEを東京時間に変換します
strCheck_txt = "TIMEZONE_OFFSET=540"
strSt_point = InStr(1, ohttp.responsetext, strCheck_txt)
strCheck_txt = "a"
strSt_point = InStr(strSt_point, ohttp.responsetext, strCheck_txt) + 1
strPrice_txt = Mid(ohttp.responsetext, strSt_point, 10)
strTime1 = DateAdd("h", 9, DateAdd("s", strPrice_txt, DateSerial(1970, 1, 1)))

'それ以降のデータを抽出します
strCheck_txt = ","
strSt_point = InStr(strSt_point, ohttp.responsetext, strCheck_txt) + 1
strEd_point = InStr(strSt_point, ohttp.responsetext, vbLf)
strPrice_txt1 = Mid(ohttp.responsetext, strSt_point, strEd_point - strSt_point)

strSt_point = InStr(strEd_point, ohttp.responsetext, strCheck_txt)
strTime2 = DateAdd("d", Mid(ohttp.responsetext, strEd_point + 1, strSt_point - strEd_point), strTime1)
strSt_point = InStr(strEd_point, ohttp.responsetext, strCheck_txt) + 1
strEd_point = InStr(strSt_point, ohttp.responsetext, vbLf)
strPrice_txt2 = Mid(ohttp.responsetext, strSt_point, strEd_point - strSt_point)

strSt_point = InStr(strEd_point, ohttp.responsetext, strCheck_txt)
strTime3 = DateAdd("d", Mid(ohttp.responsetext, strEd_point + 1, strSt_point - strEd_point), strTime1)
strSt_point = InStr(strEd_point, ohttp.responsetext, strCheck_txt) + 1
strEd_point = InStr(strSt_point, ohttp.responsetext, vbLf)
strPrice_txt3 = Mid(ohttp.responsetext, strSt_point, strEd_point - strSt_point)

strSt_point = InStr(strEd_point, ohttp.responsetext, strCheck_txt)
strTime4 = DateAdd("d", Mid(ohttp.responsetext, strEd_point + 1, strSt_point - strEd_point), strTime1)
strSt_point = InStr(strEd_point, ohttp.responsetext, strCheck_txt) + 1
strEd_point = InStr(strSt_point, ohttp.responsetext, vbLf)
strPrice_txt4 = Mid(ohttp.responsetext, strSt_point, strEd_point - strSt_point)

strSt_point = InStr(strEd_point, ohttp.responsetext, strCheck_txt)
strTime5 = DateAdd("d", Mid(ohttp.responsetext, strEd_point + 1, strSt_point - strEd_point), strTime1)
strSt_point = InStr(strEd_point, ohttp.responsetext, strCheck_txt) + 1
strEd_point = InStr(strSt_point, ohttp.responsetext, vbLf)
strPrice_txt5 = Mid(ohttp.responsetext, strSt_point, strEd_point - strSt_point)

 ' GoogleAPI 30分毎。pが取得日数、年数、iが間隔(秒)fが取得値(o始値c終値l安値h高値v出来高)
 strURL = "https://finance.google.com/finance/getprices?p=1d&i=3600&f=d,o,c,l,h,v&x=TYO&q=" _ 
 & strCode

 ' HTML形式で読み込む 
ohttp.Open "GET", strURL, False 
 ohttp.setRequestHeader "If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT" 
 ohttp.send 
 If ohttp.Status <> 200 Then WScript.Quit 'リクエスト失敗で終了 

'UNIXTIMEを東京時間に変換します
strCheck_txt = "TIMEZONE_OFFSET=540"
strSt_point = InStr(1, ohttp.responsetext, strCheck_txt)
strCheck_txt = "a"
strSt_point = InStr(strSt_point, ohttp.responsetext, strCheck_txt) + 1
strPrice_txt = Mid(ohttp.responsetext, strSt_point, 10)
strTime = DateAdd("h", 9, DateAdd("s", strPrice_txt, DateSerial(1970, 1, 1)))

'それ以降のデータを抽出します
strCheck_txt = ","
strSt_point = InStr(strSt_point, ohttp.responsetext, strCheck_txt) + 1
strPrice_txt = Mid(ohttp.responsetext, strSt_point, Len(ohttp.responsetext) - Len(strSt_point))

'メッセージボックスで表示します。
msgbox strCode & strCodename & "の日足データは" & vbCrLf _
 & "日付,終値,高値,安値,始値,出来高" & vbCrLf _
 & strTime1 &"," & strPrice_txt1 & vbCrLf _
 & strTime2 &"," & strPrice_txt2 & vbCrLf _
 & strTime3 &"," & strPrice_txt3 & vbCrLf _
 & strTime4 &"," & strPrice_txt4 & vbCrLf _
 & strTime5 &"," & strPrice_txt5 & vbCrLf & vbCrLf _
 & strTime & "の1時間前から1時間間隔で" & vbCrLf _
 & "1,終値,高値,安値,始値,出来高" & vbCrLf _
 & "0," & strPrice_txt & vbCrLf _
 & "0が10時 1が11時 2が前場終了時" & vbCrLf _
 & "3が13時 4が14時 5が15時かな。" _
 , , strCode & strCodename

'strSt_point = InStr(1, ohttp.responsetext, strCheck_txt) + Len(strCheck_txt) + 1
'strEd_point = InStr(strSt_point, ohttp.responsetext, vbLf)
'If strEd_point - strSt_point > 6 Then
' strPrice_txt = Mid(ohttp.responsetext, strSt_point, strEd_point - strSt_point)
'Else
' strPrice_txt = Mid(ohttp.responsetext, strSt_point, strEd_point - strSt_point)
'End If

Next

Set ohttp = Nothing 

'サンプルここまで


因みに、
For n = 1 to 2
IF n = 1 then
strCode = "5742"
strCodename = "NIC"
Elseif n = 2 then
strCode = "9466"
strCodename = "aidma"
End if
ってところの、
strCodeっていうのが、証券コードになっています。ここを変えればどんな銘柄でも大丈夫ですよ。
また、
1to2を1to3に変えて、
Elseif n = 3 then
strCode = "数字"
strCodename = "銘柄名"
っていうのをEnd ifの前に加えれば、
それだけでもう一つ増やしていけます。


ぜひぜひ試してみてください。
ちょっとした仕事の休憩時間に相場を見たりなんてこともできるかも?


ダウンロードはこちらのGoogleapi.txtの拡張子をvbsに変えてお使いください!

不具合等あったら教えてください。 
分からないことなどもあれば分かる範囲で答えたいと思います。

KABU+、CSVEXのデータの自動取込マクロを作ってみたよ。

Zaifの相場、板情報、取引履歴の自動取得マクロ作りました。

コインチェックの価格自動取得マクロ作りました。

アルトコインの価格自動取得マクロ作りました。

グーグルのAPIから株価を取得して日経平均株価を計算するマクロ作りました。

エクセルVBAの使い方 目次

chart
NB2GYRIF6BVPDZSKRV7A3C2ZGCDZEEIQHCY4PA6B

↑一応自分のNEMのアドレスです。
何かコメント等ありましたら教えてください。


にほんブログ村 ライフスタイルブログ のんびり暮らしへ
にほんブログ村
↑クリックしていただけると単純に嬉しいです。
幼稚園の頃の夢は「のんびり暮らしたい。」でした。
仙人のような暮らしを夢見て
日々、遊んでる毎日です。
読んでいただきありがとうございました。
このエントリーをはてなブックマークに追加 mixiチェック

日本株全銘柄 株価一覧表
https://hesonogoma.com/stocks/japan-all-stock-prices.html

のページが本日3月16日より機能制限開始されたそうです。

株価データサイト k-db.com さんも今年に入って停止になりましたし
世知辛い世の中になってきましたね。

今後は後継サービスとなる

KABU+
https://kabu.plus/
CSVEX
https://csvex.com/

で有償にて配布と言うことです。
皆さん登録してあげてください。

登録すると、こんなグラフも簡単に作れちゃいます。

でーたぐらふ

さて、
このCSVEXは、共有フォルダ機能を使って簡単に接続してダウンロードも出来るんですが、
何らかの事情で共有フォルダ機能が使えない環境の場合もあります。
その場合は手動でダウンロードしなければなりません。面倒くさいですよね。

ということで、
サンプルプログラム
https://csvex.com/document/sample_program.txt
を参考に、エクセルVBAで使える自動ダウンロードの方法を考えてみることにしました。
VBAの方法も書いておいてくれたら良いのに。

結論としては、"MSXML2.XMLHTTP"を使って、
.Open "GET", URL, False, ID, PW
と言うふうに、OpenのあとにID,パスワードを入れるだけだったんですが、
なかなか分からなかったので。。。

また一つ勉強になりました。
ダウンロードはこちらのcsvex.xlsmをどうぞ!



投資を自動で記録分析してくれる無料アプリ【マイトレード】

以下がサンプルコードです。
これをVBAのモジュールにコピペしたらそのまま使えますよ。



Option Explicit

Dim ID As String, PW As String, URL As String, hozon_path As String '文字列

Sub ダウンロードしてエクセル出力()
さいしょ
ログインID入力

'取得したいCSVのURLを入力してください
URL = "https://csvex.com/kabu.plus/csv/japan-all-stock-data/daily/japan-all-stock-data.csv"
'保存したい場所と名前を入力してください
hozon_path = "D:\japan-all-stock-data.csv"

CSVダウンロード
CSV編集
'CSV入力の中の「sosa_sh.Cells(check_row, 1).Value = tmp(0)」を変えると自分の好きなものだけ取り込めます
CSV入力
さいご
End Sub

Private Sub ログインID入力()
ID = "○○○○○" ' "○○○○○"の○○○○○をIDに変えてください
PW = "●●●●●" ' "●●●●●"の●●●●●をパスワードに変えてください
End Sub

Private Sub さいしょ()
'手動計算にして、画面描写を無くします。
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
End Sub

Private Sub さいご()
'自動計算に戻して、画面描写を復活させます。
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.StatusBar = False
End Sub

Private Sub CSVダウンロード()
Dim http As Object 'オブジェクト

Application.StatusBar = "csvの取込中です。。。"

'CSVをダウンロードします
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", URL, False, ID, PW
http.setRequestHeader "If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT"
http.send
If http.Status <> 200 Then Exit Sub 'リクエスト失敗で終了
With CreateObject("ADODB.Stream")
.Open 'Streamをオープン
.Type = 1 'バイナリデータ
.Write http.responseBody
.SaveToFile "D:\tmp.csv", 2
.Close
End With
Set http = Nothing

End Sub

Private Sub CSV編集()
Dim buf As String '文字列
Application.StatusBar = "csvの編集中です。。。"

'CSVデータが""で囲まれているので"を削除します
Open "D:\tmp.csv" For Input As #1
Open hozon_path For Output As #2
Do Until EOF(1)
Line Input #1, buf
Print #2, Replace(buf, """", "")
Loop
Close #1
Close #2

'ダウンロードしたファイルの削除
Kill "D:\tmp.csv"

End Sub

Private Sub CSV入力()
Dim buf As String '文字列
Dim check_row As Long '長整数
Dim tmp As Variant 'バリアント
Dim sosa_sh As Worksheet 'ワークシート

'CSVをエクセルに読み込みます。
check_row = 1
Application.StatusBar = "csvの書出中です。。。"
Set sosa_sh = Sheets("Sheet1") 'シートを選択
Open hozon_path For Input As #1
Do Until EOF(1)
Line Input #1, buf
tmp = Split(buf, ",") 'タブ区切り
sosa_sh.Cells(check_row, 1).Value = tmp(0) 'コード
sosa_sh.Cells(check_row, 2).Value = tmp(1) '名前
sosa_sh.Cells(check_row, 3).Value = tmp(2) '市場
sosa_sh.Cells(check_row, 4).Value = tmp(5) '発行済株式数
sosa_sh.Cells(check_row, 5).Value = tmp(13) '単元株
sosa_sh.Cells(check_row, 6).Value = tmp(10) 'EPS
sosa_sh.Cells(check_row, 7).Value = tmp(11) 'BPS
sosa_sh.Cells(check_row, 8).Value = tmp(7) '1株配当
sosa_sh.Cells(check_row, 9).Value = tmp(6) '配当利回り
sosa_sh.Cells(check_row, 10).Value = tmp(8) 'PER
sosa_sh.Cells(check_row, 11).Value = tmp(9) 'PBR
check_row = check_row + 1
Loop
Close #1
Set sosa_sh = Nothing 'シートを開放

End Sub

ダウンロードはこちらのcsvex.xlsmをどうぞ!

サンプルコードを直接入力するやり方としては、 
エクセルマクロの出し方1

開発タブから、VBAを開いて、
エクセルマクロの出し方2

モジュールを挿入して 
エクセルマクロの出し方3

コピペ。あとはマクロを動かすだけです。

不具合等あったら教えてください。 
分からないことなどもあれば分かる範囲で答えたいと思います。


Zaifの相場、板情報、取引履歴の自動取得マクロ作りました。

コインチェックの価格自動取得マクロ作りました。

アルトコインの価格自動取得マクロ作りました。

グーグルのAPIから株価を取得して日経平均株価を計算するマクロ作りました。

エクセルVBAの使い方 目次

chart
NB2GYRIF6BVPDZSKRV7A3C2ZGCDZEEIQHCY4PA6B

↑一応自分のNEMのアドレスです。
何かコメント等ありましたら教えてください。


にほんブログ村 ライフスタイルブログ のんびり暮らしへ
にほんブログ村
↑クリックしていただけると単純に嬉しいです。
幼稚園の頃の夢は「のんびり暮らしたい。」でした。
仙人のような暮らしを夢見て
日々、遊んでる毎日です。
読んでいただきありがとうございました。
このエントリーをはてなブックマークに追加 mixiチェック

仮想通貨の取引。

国内の取引所で、NEM/XEMを現物で取引できる取引所って今はZaifだけだと思います。
コインチェックは流出事件の影響で使えませんからね。
なので、私は最近、ザイフを良く使っています。


さて、仮想通貨の取引をしているときに、毎回アプリを開いたり、ログインしたりするのは面倒です。
ブラウザを開いておいておくのも面倒です。
でも現在の相場だけでも確認したい。
BTCはいくらなんだ。XEMはいくらなんだ。ってことをすぐ確認したい。
そういうことがあると思います。

コインチェックの相場をAPIからエクセルマクロで取得するものは前作っていましたが
コインチェックが使い物にならないし、いつ復活できるかも分からないので
今度は、ザイフのapiからエクセルに表示するマクロを作ってみました。


ダウンロードはこちらのZaif.xlsmをどうぞ!

エクセルの黄色の欄に銘柄名を入力して、実行ボタンを押すと、
終値
過去24時間の高値
過去24時間の安値
過去24時間の加重平均
過去24時間の出来高
買気配値
売気配値
が出てきます。
相場

また、シートを替えれば、エクセルの黄色の欄に銘柄名を入力して、実行ボタンを押すと、
最新の取引日時
その取引価格
その取引量
通貨ペア
売り買いの別

売板の価格
その量
買板の価格
その量
が出てきます。
板情報


どうぞやってみてくださいな。
円建てもBTC建てもできますよ。 
nem_btcの買い板がこんだけしかないということにびっくりでした。

以下にコードも置いておきますので、ご参照ください。

'以下エクセルVBAコード
Option Explicit
Sub さいしょ()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
End Sub

Sub さいご()
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

Sub Zaif()
Dim url As String, code As String, code2 As String, check_txt As String, price_txt As String '文字列
Dim sosa_sh As Worksheet 'ワークシート
Dim check_row As Integer, code_column As Integer, price_column As Integer '整数
Dim st_point As String, ed_point As Long, tmp_point As Long '長整数
Dim http As Object 'オブジェクト

Set sosa_sh = Sheets("Zaif") ' 現在のシートを退避
check_row = 2 ' 2行目から価格取得開始
code_column = 1 ' 識別コードの列A

さいしょ

Set http = CreateObject("MSXML2.XMLHTTP")

Do While sosa_sh.Cells(check_row, code_column) <> ""
code = sosa_sh.Cells(check_row, code_column)
code2 = sosa_sh.Cells(check_row, code_column + 1)
price_column = 3 ' 本日価格列B
Application.StatusBar = code & "の処理中です。。。"

' ZaifAPI
url = "https://api.zaif.jp/api/1/ticker/" _
& LCase(code) _
& "_" & LCase(code2)

' HTML形式で読み込む
http.Open "GET", url, False
http.setRequestHeader "If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT"
http.send
If http.Status <> 200 Then Exit Sub 'リクエスト失敗で終了

check_txt = "[" & http.responsetext & "]" 'JSON文字列のレスポンス
'Javascriptオブジェクトを生成
With CreateObject("ScriptControl"): .Language = "JScript"

'JSON文字列をJSONオブジェクトに変換するJavascript関数
.Addcode "function getVal(num,key,check_txt){" _
& "var json=eval('('+check_txt+')');" _
& "return json[num-1][key];}"

'JSONオブジェクトからrateキーの値を取得
price_txt = .CodeObject.getVal(1, "last", check_txt)
sosa_sh.Cells(check_row, price_column) = CDbl(price_txt)
price_column = price_column + 1
price_txt = .CodeObject.getVal(1, "high", check_txt)
sosa_sh.Cells(check_row, price_column) = CDbl(price_txt)
price_column = price_column + 1
price_txt = .CodeObject.getVal(1, "low", check_txt)
sosa_sh.Cells(check_row, price_column) = CDbl(price_txt)
price_column = price_column + 1
price_txt = .CodeObject.getVal(1, "vwap", check_txt)
sosa_sh.Cells(check_row, price_column) = CDbl(price_txt)
price_column = price_column + 1
price_txt = .CodeObject.getVal(1, "volume", check_txt)
sosa_sh.Cells(check_row, price_column) = CDbl(price_txt)
price_column = price_column + 1
price_txt = .CodeObject.getVal(1, "bid", check_txt)
sosa_sh.Cells(check_row, price_column) = CDbl(price_txt)
price_column = price_column + 1
price_txt = .CodeObject.getVal(1, "ask", check_txt)
sosa_sh.Cells(check_row, price_column) = CDbl(price_txt)
End With

check_row = check_row + 1 ' 次の行のコイン取得へ
Loop

Set http = Nothing
Set sosa_sh = Nothing

Application.StatusBar = False

さいご

End Sub

Sub Zaif2()
Dim url As String, code As String, code2 As String, check_txt As String, price_txt As String '文字列
Dim sosa_sh As Worksheet 'ワークシート
Dim check_row As Integer, code_column As Integer, price_column As Integer '整数
Dim st_point As String, ed_point As Long, tmp_point As Long, n As Long '長整数
Dim http As Object 'オブジェクト
Dim tmp

Set sosa_sh = Sheets("Zaif2") ' 現在のシートを退避
check_row = 2 ' 2行目から価格取得開始
code_column = 1 ' 識別コードの列A

さいしょ

Set http = CreateObject("MSXML2.XMLHTTP")

code = sosa_sh.Cells(check_row, code_column)
code2 = sosa_sh.Cells(check_row, code_column + 1)
price_column = 3 ' 本日価格列C

' ZaifAPI
url = "https://api.zaif.jp/api/1/trades/" _
& LCase(code) _
& "_" & LCase(code2)

' HTML形式で読み込む
http.Open "GET", url, False
http.setRequestHeader "If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT"
http.send
If http.Status <> 200 Then Exit Sub 'リクエスト失敗で終了

check_txt = http.responsetext 'JSON文字列のレスポンス
'Javascriptオブジェクトを生成
With CreateObject("ScriptControl"): .Language = "JScript"

'JSON文字列をJSONオブジェクトに変換するJavascript関数
.Addcode "function getVal(num,key,check_txt){" _
& "var json=eval('('+check_txt+')');" _
& "return json[num-1][key];}"
n = 1

Do While n < 151
'JSONオブジェクトからrateキーの値を取得
price_txt = .CodeObject.getVal(n, "date", check_txt)
sosa_sh.Cells(check_row, price_column) = CDbl(price_txt)
price_column = price_column + 2
price_txt = .CodeObject.getVal(n, "price", check_txt)
sosa_sh.Cells(check_row, price_column) = CDbl(price_txt)
price_column = price_column + 1
price_txt = .CodeObject.getVal(n, "amount", check_txt)
sosa_sh.Cells(check_row, price_column) = CDbl(price_txt)
price_column = price_column + 1
price_txt = .CodeObject.getVal(n, "tid", check_txt)
sosa_sh.Cells(check_row, price_column) = CDbl(price_txt)
price_column = price_column + 1
price_txt = .CodeObject.getVal(n, "currency_pair", check_txt)
sosa_sh.Cells(check_row, price_column) = price_txt
price_column = price_column + 1
price_txt = .CodeObject.getVal(n, "trade_type", check_txt)
If price_txt = "bid" Then
price_txt = "買い"
ElseIf price_txt = "ask" Then
price_txt = "売り"
End If
sosa_sh.Cells(check_row, price_column) = price_txt
n = n + 1
check_row = check_row + 1
price_column = 3
Loop
End With

check_row = 2
price_column = 11 ' 列K

' ZaifAPI
url = "https://api.zaif.jp/api/1/depth/" _
& LCase(code) _
& "_" & LCase(code2)

' HTML形式で読み込む
http.Open "GET", url, False
http.setRequestHeader "If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT"
http.send
If http.Status <> 200 Then Exit Sub 'リクエスト失敗で終了

check_txt = "[" & http.responsetext & "]" 'JSON文字列のレスポンス
'Javascriptオブジェクトを生成
With CreateObject("ScriptControl"): .Language = "JScript"

'JSON文字列をJSONオブジェクトに変換するJavascript関数
.Addcode "function getVal(num,key,check_txt){" _
& "var json=eval('('+check_txt+')');" _
& "return json[num-1][key];}"

n = 0
'JSONオブジェクトからrateキーの値を取得
price_txt = .CodeObject.getVal(1, "asks", check_txt)
tmp = Split(price_txt, ",")
Do While n < 300
sosa_sh.Cells(check_row, price_column) = tmp(n)
sosa_sh.Cells(check_row, price_column + 1) = tmp(n + 1)
check_row = check_row + 1
n = n + 2
Loop
price_column = price_column + 2
n = 0
check_row = 2
price_txt = .CodeObject.getVal(1, "bids", check_txt)
tmp = Split(price_txt, ",")
Do While n < 300
sosa_sh.Cells(check_row, price_column) = tmp(n)
sosa_sh.Cells(check_row, price_column + 1) = tmp(n + 1)
check_row = check_row + 1
n = n + 2
Loop
End With

Set http = Nothing
Set sosa_sh = Nothing

さいご

End Sub
'エクセルVBAコードここまで

ダウンロードはこちらのZaif.xlsmをどうぞ!

コインチェックの価格自動取得マクロ作りました。

アルトコインの価格自動取得マクロ作りました。

グーグルのAPIから株価を取得して日経平均株価を計算するマクロ作りました。

株価を取得して日経平均株価を計算するマクロ作りました。

エクセルVBAの使い方 目次

chart
NB2GYRIF6BVPDZSKRV7A3C2ZGCDZEEIQHCY4PA6B

↑一応自分のNEMのアドレスです。
何かコメント等ありましたら教えてください。


にほんブログ村 ライフスタイルブログ のんびり暮らしへ
にほんブログ村
↑クリックしていただけると単純に嬉しいです。
幼稚園の頃の夢は「のんびり暮らしたい。」でした。
仙人のような暮らしを夢見て
日々、遊んでる毎日です。
読んでいただきありがとうございました。
このエントリーをはてなブックマークに追加 mixiチェック

nem/xem ネムです。

コインチェック事件で有名になりましたね。

以前の記事でもエクセルVBAでネムの残高確認のマクロを作ってみてました。

今度は、送受信の履歴も含めて見れるようにアップデートしてみました。

ダウンロードはこちらのnemapi.xlsmをどうぞ!

無題1

自分のアドレスの下のアドレス名をいろいろと変えてみて、
実行ボタンを押して、各シートを見てみてください。


やってることは、
https://supernodes.nem.io/
上のサイトからSNを上からいくつか選んで、
生きてる奴からアカウントのapiを取得しているだけです。

書いてあるアドレスは、僕のアドレスほか、
適当に送受信履歴から引っ張ってきました。
関係ない方まで巻き込んですいません。
ネムを奪った犯人?っていう人のアドレスも入れてみてあります。

誰にでも公開されているからプライバシーなんてないようなもんですよね。
いろんな人のを見ることで、マルチシング?の履歴にも対応してみました。


一番難しかったのは、nemのapiじゃなくて、
16進数の文字列をどうやったら日本語に変換できるか。でした。
完全にプログラム関係は初心者です。
それでもここまでできると嬉しい。

完全に、インターネットのブラウザ上でもできるようなことしかしてないので、
何も新しいことはないんですけどね。

chart
NB2GYRIF6BVPDZSKRV7A3C2ZGCDZEEIQHCY4PA6B
↑一応自分のアドレスです。

使えないとか、ここ動かないとか
こうしたらいいのにとか
色々このブログのコメントなり、ネムでコメント送るなりなんなり教えていただければ嬉しいです。

ダウンロードはこちらのnemapi.xlsmをどうぞ!


コインチェックの価格取得マクロ作りました。

アルトコインの価格取得マクロ作りました。

株価を取得して日経平均株価を計算するマクロ作りました。

グーグルのapiから株価を取得して日経平均株価を計算するマクロ作りました。

株価の時系列データを取得するマクロ作りました。

エクセルVBAの使い方 目次



にほんブログ村 ライフスタイルブログ のんびり暮らしへ
にほんブログ村
↑クリックしていただけると単純に嬉しいです。
幼稚園の頃の夢は「のんびり暮らしたい。」でした。
仙人のような暮らしを夢見て
日々、遊んでる毎日です。
読んでいただきありがとうございました。
このエントリーをはてなブックマークに追加 mixiチェック

nem/xem ネムです。

1月25日ファイルを更新しました!

仮想通貨といえば、ビットコインが有名ですが、
ネムと言うコインもあります。

コインチェックで買えますよね。
ビットコイン取引高日本一の仮想通貨取引所 coincheck bitcoin

zaifでも買えますよね。


さて、みなさん、そのコインの残高を確認するときって、どうやってやってますか?
アプリとか?
いろんなウォレットを使って?

ネムは、インターネットのブラウザ(IEとかChromeとか)でも
直接スーパーノードと呼ばれるサーバーのアドレスを叩くことで
すぐに見ることもできるんですが、
文字の羅列で分かりにくいので、分かり易く表示するものを作ってみました。

ダウンロードはこちらのnemapi.xlsmをどうぞ!

無題1

やってることは、
https://supernodes.nem.io/
上のサイトからSNを上からいくつか選んで、
生きてる奴からアカウントのapiを取得しているだけです。

これきっと、SNもどれ選んだ方が良いとかあるんでしょうけど、
生きて返答さえ返ってこれば良いやと思って書いてみました。
間違ってたらごめんなさい。

書いてあるアドレスは、僕のアドレスです。
と言っても、いっぺんnemの送信と言うものをやりたかったので作っただけで
他に何も使ってないんですけどね。

誰にでも公開されているから仮想通貨の仕組みと言うのはすごいわけで。
このアドレスにmosaicでもxemでも送っていただければ。
喜びますよ。


しかし、jsonファイルって言うんですか?
全然分かりません。
javascriptと似てるというか一緒だと言う話も聞きますし
たぶん勉強すれば分かるんだと思うんですが。

とりあえず返ってくるものを、なんとか表示できるようにはしてみましたが、
全く理解できていないので、使い勝手も悪いかもしれません。

まぁ、そこは、こんな初心者でもこういうの見れるんだよ。ってことで。


たぶん、これをだんだん応用していく事で
nemの送信、受信なども全部エクセルのマクロ、VBAを使ってできるんだと思うんですよね。

今回は、とりあえず、Hello world!的なのりで
nemのapiを触ってみました。
思いのほか簡単でびっくり。

Excelで出来るようになれば、
仕事中にも仕事してるかのような感じで送金できるじゃん?
みたいな。


VBAも含め、色々と勉強していきたいですねー。
javascriptも、htmlの中に入れるので少しコピペしたことがあるくらいでしかないからなぁ。
きっと、地理院地図のgeojsonファイルとか近いんだろうなぁ。

勉強せねば。全くの畑違いだけれども。

以下書いてみたサンプルコードです。

Option Explicit
Sub 実行()
SN取得
nem_balance
End Sub

Sub nem_balance()
    Dim tmp As Variant
    Dim url As String, SN_address As String, x As String, check_txt As String
    Dim sosa_sh As Worksheet
    Dim n As Integer, m As Integer
    Dim http As Object
    
    Set sosa_sh = Sheets("coincheck")       '   現在のシートを退避
    Set http = CreateObject("MSXML2.XMLHTTP")
    n = 2
    SN_address = sosa_sh.Cells(n, 2)
    
    Do Until n > 10
    ' API
    url = "http://" & SN_address & ":7890/heartbeat"
        
    ' HTML形式で読み込む
    http.Open "GET", url, False
    http.setRequestHeader "If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT"
    http.Send
    If http.Status <> 200 Then Exit Sub 'リクエスト失敗で終了
    
    If InStr(1, http.responseText, "ok") > 1 Then Exit Do
    
    Loop
    
    url = "http://" & SN_address & ":7890/account/get?address=" & sosa_sh.Cells(2, 3)
        
    ' HTML形式で読み込む
    http.Open "GET", url, False
    http.setRequestHeader "If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT"
    http.Send
    If http.Status <> 200 Then Exit Sub 'リクエスト失敗で終了
    
    tmp = Split(http.responseText, ",")
    sosa_sh.Cells(2, 4) = Mid(tmp(4), Len(tmp(4)) - 40, 40)
    sosa_sh.Cells(2, 5) = Mid(tmp(5), 19)
    sosa_sh.Cells(2, 6) = Mid(tmp(6), 11) / 1000000
    sosa_sh.Cells(2, 7) = Mid(tmp(7), 14)
    sosa_sh.Cells(2, 8) = Mid(tmp(9), Len(tmp(9)) - 64, 64)
                             
    Set http = Nothing
    Set sosa_sh = Nothing
        
End Sub
Sub SN取得()
    Dim url As String, code As String, check_txt As String, SN_address As String
    Dim sosa_sh As Worksheet                                                'ワークシート
    Dim check_row As Integer
    Dim st_point As String, tmp_point As String, ed_point As Long
    Dim http As Object                                                      'オブジェクト
    
    Set sosa_sh = ActiveSheet       '   現在のシートを退避
    check_row = 2                   '   2行目からSN取得開始
     
    Set http = CreateObject("MSXML2.XMLHTTP")
    
    Application.ScreenUpdating = False
    Application.StatusBar = check_row - 1 & "個目取得中"
    
    ' スーパーノード
    url = "https://supernodes.nem.io/"
                   
    ' HTML形式で読み込む
    http.Open "GET", url, False
    http.setRequestHeader "If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT"
    http.Send
    
    ' 目印の"<td scope="row">"の位置からSNを取得
    check_txt = "<td scope=""row"">"
    tmp_point = InStr(1, http.responseText, check_txt)
    
    Do While sosa_sh.Cells(check_row, 1) <> ""
        st_point = InStr(tmp_point, http.responseText, "<td>") + Len("<td>")
        ed_point = InStr(st_point, http.responseText, "</td>")
        SN_address = Mid(http.responseText, st_point, ed_point - st_point)
        sosa_sh.Cells(check_row, 2) = SN_address
        tmp_point = InStr(ed_point, http.responseText, check_txt)
        check_row = check_row + 1           ' 次のスーパーノード取得へ
    Loop
    
    Set http = Nothing
    Set sosa_sh = Nothing
        
    Application.ScreenUpdating = True
    Application.StatusBar = False
    
End Sub

ダウンロードはこちらのnemapi.xlsmをどうぞ!


コインチェックの価格取得マクロ作りました。

アルトコインの価格取得マクロ作りました。

株価を取得して日経平均株価を計算するマクロ作りました。

グーグルのapiから株価を取得して日経平均株価を計算するマクロ作りました。

株価の時系列データを取得するマクロ作りました。

エクセルVBAの使い方 目次



にほんブログ村 ライフスタイルブログ のんびり暮らしへ
にほんブログ村
↑クリックしていただけると単純に嬉しいです。
幼稚園の頃の夢は「のんびり暮らしたい。」でした。
仙人のような暮らしを夢見て
日々、遊んでる毎日です。
読んでいただきありがとうございました。
このエントリーをはてなブックマークに追加 mixiチェック

↑このページのトップヘ