1208371274 エクセルマクロ中級者です。

エクセルのVBAマクロでIE上のJavascriptをコントロールしたいと考えています。
具体的には、添付ファイルのページ内のJavascriptで動作している表示エリア(為替取引の画面で、買いと売りの2つの表示エリアにそれぞれ変動する為替レートが表示されています。)をクリックする、という動作を行いたいと思っています。
サイトのソースは以下のとおりです。
---------------------------------------
(…中略…以下、フォーム情報部分)
<FORM name=NewStreamingOrderForm action=/fxcwebpresen/ExecuteNewStreamingOrder.do method=post>
<INPUT type=hidden value=doOrder name=actionMethod>
<INPUT type=hidden name=buySellType>
<INPUT type=hidden name=orderPrice>
<INPUT type=hidden name=priceId>
(…中略…以下、Javascript動作部分)
<SCRIPT src="/fxcwebpresen/StreamingApplet.do"></SCRIPT>
<OBJECT height=80 width=300 classid=clsid:8AD9C840-044E-11D1-B3E9-00805F499D93 name=FxCStreamingApplet jinstall-1_4-windows-i586.cab#Version="1,4,0,0" autodl plugin products java.sun.com https:>
<PARAM NAME="_cx" VALUE="7938">
<PARAM NAME="_cy" VALUE="2117">
</OBJECT>(以下略)
---------------------------------------
ソースを元に上記動作を行うマクロの記述を、最も的確に早くご回答頂いた方に500ポイント差し上げます。

回答の条件
  • 1人3回まで
  • 登録:2008/04/17 03:41:18
  • 終了:2008/04/24 03:45:02

回答(2件)

id:ardarim No.1

ardarim回答回数896ベストアンサー獲得回数1442008/04/17 05:58:23

ポイント35pt

まずExcelからIEを起動し、IEオブジェクトを管理できる状態にあることが前提ですが、

Call objIE.document.getElementsByName("NewStreamingOrderForm").Item(0).submit

でできると思います。

該当ページでテストできないので確実なことはいえないですが、質問のソースですとフォームはPOSTされるだけで何かスクリプトで処理されているようには見えないので、単純にsubmitするだけで良いはずです。


ExcelからIEを起動するのは

Set objIE = CreateObject("InternetExplorer.Application")
    
objIE.Visible = True
objIE.navigate "http://q.hatena.ne.jp/1208371274"

のような感じで行って必要なページに事前に遷移されていることが前提です。

id:junrou

ご回答ありがとうございます。

Javascript表示部分には「Bid売」と「Ask買」があり、赤色と青色の2つの四角があると思うのですが、クリックする部分によって、注文の種類が認識され、かつその時に表示されている為替レートで約定されます。

たとえば、「Bid売」(画像では101.72のレート)で約定したい場場合、青色の部分をクリックすると「売り」と「101.72」という情報が次の画面に引き継がれるのですが、この動きはどのように記述するのでしょうか?

2008/04/17 13:34:44
id:ardarim No.2

ardarim回答回数896ベストアンサー獲得回数1442008/04/17 23:44:46

ポイント35pt

質問に記載のソースコードは全体のごく一部のため、画面表示のどの部分のソースなのかが特定できないため、これ以上詳しい説明は難しいです。

Javascript表示部分というのはどこのことを指しているのでしょうか? レートがリアルタイムで(例えば数秒間隔とかで)表示更新されているという意味でしょうか。


質問のソース部分には、フォームをsubmitする処理(ボタンなど)が見当たりませんが、おそらくsubmit時の処理でレートなどの情報をフォームパラメータにセットして、フォームをPOSTしていると思います。その結果、次の画面にフォームパラメータが引き継がれます。

具体的な処理はその部分のスクリプトを見てみないとなんとも言えませんが、同じ処理をすれば問題はないはずです。


コメント欄を開けていただけると、より詳しいやり取りができると思いますので、コメント欄をオープンにしていただけませんか?

id:junrou

ardarim様、お返事ありがとうございます。

はてな初心者のため、コメント欄についてよく理解していませんが、「コメント・トラックバック表示」をオンにしました。これでよろしいでしょうか?

>Javascript表示部分というのはどこのことを指しているのでしょうか? レートがリアルタイムで(例えば数秒間隔とかで)表示更新されているという意味でしょうか。

添付画像の、101.72、101.と書かれている左中央の青色の四角と赤色の四角の部分になります。ほぼリアルタイムで、この部分の為替レートが変動しており、自分が約定したいと思うレートのタイミングでマウスを当て、クリックするとそのレートで約定画面に遷移します。

ページ全体のソースをお示ししたほうがよろしいでしょうか?

どうぞ宜しくお願いいたします。

2008/04/17 23:52:23
  • id:ardarim
    赤色と青色の枠がボタンになっているのか、またはonclick等でフォームの送信処理が組み込まれていると思います。
    スクリプトが割り当てられている場合は、その送信処理でやっていることと同じことを行うか、その送信処理が関数になっているなら直接その関数を呼び出すなどが考えられます。

    今わかっている部分だけで予想すると、buySellTypeが名前的に「売り」「買い」のどちらかを入れるパラメータっぽいです。おそらく送信処理でここに値をセットしてフォームを送信しているのだと思います。

    とりあえずフォームの中身(<form>~</form>)を中略せず出していただければ何かわかると思います。特に赤枠、青枠の部分。


  • id:junrou
    ardarim様、どうもありがとうございます。
    フォーム部分の記述は、以下のとおりとなっています。

    (ここから)
    <FORM name=NewStreamingOrderForm action=/fxcwebpresen/ExecuteNewStreamingOrder.do method=post>
    <INPUT type=hidden value=doOrder name=actionMethod>
    <INPUT type=hidden name=buySellType>
    <INPUT type=hidden name=orderPrice>
    <INPUT type=hidden name=priceId>
    <TBODY>
    <TR>
    <TD class=f_08>&nbsp;&nbsp;&nbsp;</TD>
    </TR>
    <TR>
    <TD vAlign=top align=middle height=358>
    <TABLE cellSpacing=0 cellPadding=0 width=912 border=0>
    <TBODY>
    <TR>
    <TD>
    <FONT color=red>買注文を行うと両建になる可能性があります。 <BR></FONT>
    </TD>
    </TR>
    <TR>
    <TD>
    <TABLE cellSpacing=0 cellPadding=0 width=578 border=0>
    <TBODY>
    <TR>
    <TD vAlign=top width=312>
    <TABLE cellSpacing=0 cellPadding=0 width=312 border=0>
    <TBODY>
    <TR>
    <TD class=f14 bgColor=#152841>
    <IMG height=19 alt=新規 hspace=2 src="lib/images/ico_trade_new.gif" width=36 align=absMiddle vspace=3>
    <B class=f_whi00> ストリーミング(新規注文)</B>
    <A onclick="openSubWindow('http://www.daiwa.co.jp/olt_help/trade/h_01t_dfx1003-01.html')" href="#"><IMG height=13 alt=? hspace=3 src="lib/images/ico_help_bg_b.gif" width=13 align=absMiddle border=0></A>
    </TD>
    </TR>
    <TR>
    <TD class=b_trade bgColor=#ffffff>
    <TABLE cellSpacing=0 cellPadding=4 width="100%" border=0>
    <TBODY>
    <TR>
    <TD noWrap height=28><B>通貨ペア:</B></TD>
    <TD width=186><B>米ドル/円</B></TD></TR>
    <TR>
    <TD noWrap height=28><B>注文数量:</B></TD>
    <TD><B><SPAN class=positive>1,000</SPAN></B> &nbsp;米ドル </TD></TR>
    <TR align=middle>
    <TD class=nobo colSpan=2>
    <TABLE cellSpacing=0 cellPadding=2 width=255 border=0>
    <TBODY>
    <TR align=middle>
    <TD class=nobo colSpan=2>
    <SCRIPT src="/fxcwebpresen/StreamingApplet.do"></SCRIPT>
    <OBJECT height=80 width=300 classid=clsid:8AD9C840-044E-11D1-B3E9-00805F499D93 name=FxCStreamingApplet jinstall-1_4-windows-i586.cab#Version="1,4,0,0" autodl plugin products java.sun.com https:>
    <PARAM NAME="_cx" VALUE="7938">
    <PARAM NAME="_cy" VALUE="2117">
    </OBJECT>
    </TD>
    </TR>
    </TBODY>
    </TABLE>
    </TD>
    </TR>
    <TR align=middle>
    <TD class=nobo colSpan=2>表示レートをクリックすると約定します。</TD></TR>
    <TR align=middle>
    <TD class=nobo colSpan=2 height=55>
    <A onclick=doBack() href="#"><IMG height=19 alt=中止 src="lib/images/btn_stop.gif" width=62 align=absMiddle border=0></A>
    </TD>
    </TR>
    </TBODY>
    </TABLE>
    </TD>
    </TR>
    <TR>
    <TD bgColor=#898a8b height=25>
    <TABLE cellSpacing=0 cellPadding=4 width="100%" border=0>
    <TBODY>
    <TR>
    <TD class=f12 noWrap>
    <B>
    <SPAN class=f_whi00>スタート ></SPAN> 注文実行 
    <SPAN class=f_whi00>> 注文完了</SPAN>
    </B>
    </TD>
    </TR>
    </TBODY>
    </TABLE>
    </TD>
    </TR>
    </TBODY>
    </TABLE>
    </TD>
    <TD width=6>&nbsp;</TD>
    <TD vAlign=top width=260>
    <TABLE cellSpacing=0 cellPadding=0 width=260 border=0>
    <TBODY>
    <TR>
    <TD bgColor=#152841 height=25>
    <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
    <TBODY>
    <TR>
    <TD class=f14 noWrap>&nbsp;
    <B class=f_whi00>口座情報サマリー</B>
    <A onclick="openSubWindow('http://www.daiwa.co.jp/olt_help/trade/h_01t_dfx1301-01.html')" href="#"><IMG height=13 alt=? hspace=3 src="lib/images/ico_help_bg_b.gif" width=13 align=absMiddle border=0></A>
    </TD>
    </TR>
    </TBODY>
    </TABLE>
    </TD>
    </TR>
    <TR>
    <TD bgColor=#ffffff>
    <TABLE class=b_account_sam cellSpacing=0 cellPadding=4 width=260 border=0>
    <TBODY>
    <TR>
    <TD bgColor=#f3f3f3>取引余力</TD>
    <TD align=right><B><SPAN class=positive>19,644</SPAN></B> 円 </TD></TR>
    <TR>
    <TD bgColor=#f3f3f3>証拠金維持率</TD>
    <TD align=right><B><SPAN class=positive>106.96</SPAN></B> %</TD></TR>
    <TR>
    <TD bgColor=#f3f3f3>評価損益</TD>
    <TD align=right><B><SPAN class=negative>-45,200</SPAN></B> 円 </TD></TR>
    <TR>
    <TD bgColor=#f3f3f3>現在のレバレッジ(最大)</TD>
    <TD align=right><B>20倍</B> </TD></TR>
    <TR>
    <TD align=right colSpan=2>
    <A onclick=doOpenLeverageChangeOrder() href="#">レバレッジを変更する&gt;&gt;</A>
    </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
    <TABLE cellSpacing=0 cellPadding=4 width="100%" border=0>
    <TBODY>
    <TR>
    <TD class=lh20f14><B>ストリーミングでのご注文について</B><BR>「通貨ペア」「注文数量」を指定後、画面にて自動更新される売値または買値をクリックすることで、その提示レートで取引が成立します。</TD>
    </TR>
    </TBODY>
    </TABLE>
    </TD>
    </TR>
    </TBODY>
    </TABLE>
    &nbsp;&nbsp;
    </TD>
    </TR>
    </TBODY>
    </TABLE>
    </TD>
    </TR>
    <INPUT type=hidden value=615962E1D3BFAAE9DEF3B2070107D6B2_0 name=F_token>
    <INPUT type=hidden value=true name=F_agreeNotice>
    <INPUT type=hidden value=1000 name=F_orderAmount>
    <INPUT type=hidden value=0 name=F_page>
    <INPUT type=hidden value=SPOT_USD/JPY name=F_productId>
    </FORM>
    (ここまで)

    この画面の前の画面で、以下の内容を入力をしております。
    1.「確認画面が表示されないことに同意する。」チェックボックスにチェック
    2.「注文数量」に「1000」
    3.「通貨ペア」に「米ドル/円」

    それが、それぞれ上記フォーム部分の最後の
    1.<INPUT type=hidden value=true name=F_agreeNotice>
    2.<INPUT type=hidden value=1000 name=F_orderAmount>
    <INPUT type=hidden value=0 name=F_page>
    3.<INPUT type=hidden value=SPOT_USD/JPY name=F_productId>
    に反映していると思われます。
    最終的には、これらの情報は次の画面に引き継がれるようになっていると推測しています。

    また、上記フォーム部分の最初の
    1.<INPUT type=hidden name=buySellType>
    2.<INPUT type=hidden name=orderPrice>
    3.<INPUT type=hidden name=priceId>
    についてですが、おっしゃるとおりそれぞれ
    1.buySellTypeが「売り」か「買い」の別
    2.orderPriceが約定レート
    ではないかと推測します。
    3.のpriceIdをどこから取得するのかが分かりません。

    お手数ですが、どうぞ宜しくお願いいたします。
  • id:ardarim
    クリックする部分はスクリプト、もしくはJavaアプレットで作られているようですね。(最初の質問文の抜粋はこの部分だったのですね)

    <SCRIPT src="/fxcwebpresen/StreamingApplet.do"></SCRIPT>
    <OBJECT height=80 width=300 classid=clsid:8AD9C840-044E-11D1-B3E9-00805F499D93 name=FxCStreamingApplet jinstall-1_4-windows-i586.cab#Version="1,4,0,0" autodl plugin products java.sun.com https:>
    <PARAM NAME="_cx" VALUE="7938">
    <PARAM NAME="_cy" VALUE="2117">
    </OBJECT>

    "/fxcwebpresen/StreamingApplet.do" のスクリプト内で該当部分のHTMLを生成して、クリック時の処理を書いているのか、あるいはその下のJavaアプレットで枠の描画やイベントの処理まで行ってしまっているか、どちらかだと思います。

    スクリプトの中は確認されましたでしょうか? Javaアプレットを有効にするだけの単なるイネーブラの可能性が高いですが...

    Javaアプレットでの制御となると外部からのコントロールは難しい(無理?)と思いますので、ページ遷移時のパラメータを確認して、どういう値を指定したらよいか推測して自力でパラメータをセットし、フォームを送信するしか方法はないかもしれません。
    ページ遷移時のパラメータは、パケットモニタ(例えば、Microsoft Network MonitorとかWiresharkとか)で確認できます。
  • id:junrou
    ardarim様、どうも有難うございました。
    上記方法でトライしてみます。

    お約束の500ptを差し上げたいのですが、ポイントの受け渡し方法って何か決まったものがあるのでしょうか?
  • id:ardarim
    最終的な方法まできちんと提示できませんでしたので、500ptは結構ですよ。
    70ptでも十分です。

    もう一度考えてみましたが、パラメータのセット方法がわかっても、そのときのレートなど取得する方法がありませんので、結局は無理そうです。
    (勝手に自分で決めたレートで送信したりしたらシステムの利用規約とかに違反しそうですし、下手すると詐欺とか不正アクセスとかに問われてしまうかもしれません)
  • id:junrou
    ありがとうございました。
    上記方法が無理と分かっただけでも十分です。

    このたびは色々とありがとうございました!

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません