読者より、下記の書き込みをいただきました。(2007/10/08 20:23:39)
MSHTMLに参照設定して、以下コードを実行すると、
WebBrowser1オブジェクトのDocumentオブジェクトに補完が聞きますよ。
その後、VB、VBAのオブジェクトブラウザでMSHTMLのActiveXに関する情報が手に入ります。
--
dim objHTML as MSHTML.HTMLDocument
set objHTML = WebBrowser1.Document
.....
set objHTML = Nothing
--
あと、デバッグ中にobjHTMLをウォッチすると、いろいろわかります。
CreateObjectは簡単で、
Sub ie_test()
Dim objIE As Object 'IEオブジェクト参照用
Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
objIE.Visible = True '見えるようにする(お約束)
End Sub
↑とにかくコレを貼り付けて実行してみてください。↓IEの起動は、ここの解説がはじめの一歩として、わかりやすいと思う。
http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/mar06/hey0313.mspx
↑イロイロなサイズを指定して起動できたりするみたい。
サンプルを走らせながらが一番いいのかなぁ?
マニュアルや調査することも非常に大切なのですが、入り口で挫折しないためには、楽しくなくっちゃ???
サンプルを見ながら動かしていけば、なんとなく感覚がつかめてくるので、あとはエラー処理を含めた丁寧なプログラムを組んでいく、そんな感じがいいのでは???
過去の解説はこちら→[過去の解説 vba_ie20070520.asp]もあわせてみてください。
ここから↓新しく書き直した解説です。(↑もしかして書き直さない方がよかった(笑))
Sub ie_test_Navigate()
Dim objIE As Object 'IEオブジェクト参照用
Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
objIE.Visible = True '見えるようにする(お約束)
'.Navigate で 指定した文字列のURLを開く
objIE.Navigate "http://ken3-info.blog.ocn.ne.jp/"
End Sub
ねっ、簡単に目的のURLを開くことができたでしょ。
<FORM ACTION="http://www.ken3.org/cgi-bin/test/test029-3.asp" METHOD="POST">
<b>感想:</b>
<INPUT TYPE="TEXT" NAME="MEMO" SIZE=20><br>
<b>メルマガ区分選択:</b><br>
<INPUT TYPE="RADIO" NAME="KUBUN" VALUE="ASP">三流君ASPで遊ぶ<br>
<INPUT TYPE="RADIO" NAME="KUBUN" VALUE="VBA" CHECKED>三流君VBAで楽しく<br>
<INPUT TYPE="RADIO" NAME="KUBUN" VALUE="GUCHI">プログラマー愚痴<br>
<INPUT TYPE="HIDDEN" NAME="NO" VALUE="0">
<INPUT TYPE="SUBMIT" VALUE="書 込">
<INPUT TYPE="RESET" VALUE="クリア">
</FORM>
<hr>
Sub ie_test_data_set()
Dim objIE As Object 'IEオブジェクト参照用
Dim time5 As Date '5秒待ちに使う。
Dim strCOMMENT As String 'コメントの入力
'INPUTBOXでデータをもらう
strCOMMENT = InputBox("Ken3へ一言?", "", "" & Now)
Application.WindowState = xlMinimized '入力後Excelを最小化、下に下げる
'IEを起動する
Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
objIE.Visible = True '見えるようにする(お約束)
'.Navigate で 指定したURLを開く
objIE.Navigate "http://ken3-info.blog.ocn.ne.jp/test/2007/05/post_4291_1.html"
'手抜きで5秒待つ(読み込み待ちを単純に5秒とする)
time5 = DateAdd("s", 5, Now()) '5秒後を計算する
Do While True '無限ループ
DoEvents
If time5 < Now() Then Exit Do '5秒後に抜ける
Loop
'htmlドキュメント フォーム(0番目) アイテム(MEMO)に転記(代入)する。
objIE.Document.Forms(0).Item("MEMO").Value = strCOMMENT
End Sub
ポイントは、ie_test_form_submit()
Dim objIE As Object 'IEオブジェクト参照用
Dim time5 As Date '5秒待ちに使う。
Dim strCOMMENT As String 'コメントの入力
'INPUTBOXでデータをもらう
strCOMMENT = InputBox("Ken3へ一言?", "", "" & Now)
Application.WindowState = xlMinimized '入力後Excelを最小化、下に下げる
'IEを起動する
Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
objIE.Visible = True '見えるようにする(お約束)
'.Navigate で 指定したURLを開く
objIE.Navigate "http://ken3-info.blog.ocn.ne.jp/test/2007/05/post_4291_1.html"
'手抜きで5秒待つ(読み込み待ちを単純に5秒とする)
time5 = DateAdd("s", 5, Now()) '5秒後を計算する
Do While True '無限ループ
DoEvents
If time5 < Now() Then Exit Do '5秒後に抜ける
Loop
'htmlドキュメント フォーム(0番目) アイテム(MEMO)に転記(代入)する。
objIE.Document.Forms(0).Item("MEMO").Value = strCOMMENT
'フォーム(0番目)を .Submit する
objIE.Document.Forms(0).Submit '送信処理
End Sub
※過去のメルマガ→[VBAからIE操作 .document.forms(0).Submit でフォーム送信処理]も見て参考となれば・・・Sub ie_test_busy()
Dim objIE As Object 'IEオブジェクト参照用
Dim strCOMMENT As String 'コメントの入力
'INPUTBOXでデータをもらう
strCOMMENT = InputBox("Ken3へ一言?", "", "" & Now)
Application.WindowState = xlMinimized '入力後Excelを最小化、下に下げる
'IEを起動する
Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
objIE.Visible = True '見えるようにする(お約束)
'.Navigate で 指定したURLを開く
objIE.Navigate "http://ken3-info.blog.ocn.ne.jp/test/2007/05/post_4291_1.html"
'表示終了まで待つ .Busy(忙しい)間ループ
Do While objIE.Busy = True
DoEvents '特に何もしないで.Busyの状態が変わるまで待つ
Loop
'htmlドキュメント フォーム(0番目) アイテム(MEMO)に転記(代入)する。
objIE.Document.Forms(0).Item("MEMO").Value = strCOMMENT
'フォーム(0番目)を .Submit する
objIE.Document.Forms(0).Submit '送信処理
End Sub
'.ReadyState = READYSTATE_COMPLETE
Do While objIE.ReadyState <> 4 '4の完了以外ループ
'何もしないループ(笑)
DoEvents
Loop
と、.ReadyState で 判断している 場合もあります。(判断する必要があったりします)
Enum READYSTATE
READYSTATE_UNINITIALIZED = 0
READYSTATE_LOADING = 1
READYSTATE_LOADED = 2
READYSTATE_INTERACTIVE = 3
READYSTATE_COMPLETE = 4
End EnumSub ie_test_ReadyState() '.ReadyStateのテスト
Dim objIE As Object 'IEオブジェクト参照用
Dim strCOMMENT As String 'コメントの入力
Dim nFLG As Integer 'テスト用のフラグ
'INPUTBOXでデータをもらう
strCOMMENT = InputBox("何か一言コメントを入れてください")
If strCOMMENT = "" Then
MsgBox "何か文字を入れてくださいね"
Exit Sub '途中で抜ける
End If
Application.WindowState = xlMinimized '入力後Excelを最小化、下に下げる
'IEを起動する
Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
objIE.Visible = True '見えるようにする(お約束)
Debug.Print "IE起動しました(.Navigate前)" 'デバッグで文字を書く
Debug.Print ".Busy = " & objIE.Busy
Debug.Print ".ReadyState = " & objIE.ReadyState
'.Navigate で 指定したURLを開く
objIE.Navigate "http://ken3-info.blog.ocn.ne.jp/test/2007/05/post_4291_1.html"
Debug.Print "指定したURLへ移動中(.Navigate直後)" 'デバッグで文字を書く
Debug.Print ".Busy = " & objIE.Busy
Debug.Print ".ReadyState = " & objIE.ReadyState
'表示終了まで待つ .Busy(忙しい)間 と.ReadyState(ステータス)が4以外の時 ループ
Debug.Print "これからループに入ります"
nFLG = 999 'テスト用のフラグを999で初期化する。
Do While objIE.Busy = True And objIE.ReadyState <> 4
If objIE.ReadyState <> nFLG Then '前回の状態と違うか判断
Debug.Print ".Busy = " & objIE.Busy 'デバッグで文字を書く
Debug.Print ".ReadyState = " & objIE.ReadyState
nFLG = objIE.ReadyState 'フラグに今の状態を代入する
End If
DoEvents '特に何もしないで.Busyの状態が変わるまで待つ
Loop
Debug.Print "ループを出ました"
Debug.Print ".Busy = " & objIE.Busy 'デバッグで文字を書く
Debug.Print ".ReadyState = " & objIE.ReadyState
'htmlドキュメント フォーム(0番目) アイテム(MEMO)に転記(代入)する。
objIE.Document.Forms(0).Item("MEMO").Value = strCOMMENT
'フォーム(0番目)を .Submit する
objIE.Document.Forms(0).Submit '送信処理
End Sub |
IE起動しました(.Navigate前) .Busy = False .ReadyState = 0 指定したURLへ移動中(.Navigate直後) .Busy = True .ReadyState = 1 これからループに入ります .Busy = True .ReadyState = 1 .Busy = True .ReadyState = 3 ループを出ました .Busy = False .ReadyState = 4
Sub ie_test_Document_TITLE() 'Document.TITLEのテスト
Dim objIE As Object 'IEオブジェクト参照用
Dim strCOMMENT As String 'コメントの入力
'INPUTBOXでデータをもらう
strCOMMENT = InputBox("何か一言コメントを入れてください")
If strCOMMENT = "" Then
MsgBox "何か文字を入れてくださいね"
Exit Sub '途中で抜ける
End If
Application.WindowState = xlMinimized '入力後Excelを最小化、下に下げる
'IEを起動する
Set objIE = CreateObject("InternetExplorer.application") 'IEのオブジェクトを作る
objIE.Visible = True '見えるようにする(お約束)
objIE.Navigate "about:blank" '空白のページへ移動 初期化のつもり(笑)
'.Navigate で 指定したURLを開く
objIE.Navigate "http://ken3-info.blog.ocn.ne.jp/test/2007/05/post_4291_1.html"
Do While objIE.Document.Title = "" 'タイトルが変わったらループを抜ける
DoEvents '特に何もしないで.Busyの状態が変わるまで待つ
Loop
'htmlドキュメント フォーム(0番目) アイテム(MEMO)に転記(代入)する。
objIE.Document.Forms(0).Item("MEMO").Value = strCOMMENT
'フォーム(0番目)を .Submit する
objIE.Document.Forms(0).Submit '送信処理
End Sub |
※まだまだ、書きかけ、内容をまとめていく予定・・・
チョット、はじめの一歩が長すぎましたね。ここからドキュメントの探りやプロパティ、メソッド、イベント・・・と先は長いんだけど。
WebBrowser Control -- Reference for Visual Basic Developers
http://msdn2.microsoft.com/en-us/library/Aa752043.aspx
WebBrowser Object
http://msdn2.microsoft.com/en-us/library/Aa752085.aspx
アクセス可能な HTML 要素
http://www.microsoft.com/japan/msdn/workshop/author/access/accessibility.aspx#acc_elements
この辺りから1つ1つ探っていくのもアリかなぁ・・・
Internet Explorer (Programming)
http://support.microsoft.com/iep
上記は英語だから・・・ツライけど。
読者の心の声:だったらテメエがわかりやすく翻訳したり説明しろよボケ
[後輩に追い越される三流な先輩]←こんな感じで後から来た皆さんに追い越されまくり(笑)
検索エンジンやリンクから、せっかく私のサイトに来ていただいたのですが、下記2つの検索結果がかなり参考になったり・・・するのでは???
[IE 魔界の]2つをキーワードにしてGoogleで検索する
(↑かなりの確立で有効な回答が得られると思います、先輩方の回答を見ると謎が解けると思います。私もすらっと回答できる、そんな人になりたいですね。。。)
↓あとは、パターン的にobjIEと変数名を定義している人が多いので、
[objIE]をキーワードにしてGoogleで検索する
も有効かなぁ。※短いサンプルなどが見つかり、参考となるのでは?
あとは、[InternetExplorer.application]をキーワードにしてマイクロソフト内検索する
などなど・・・
↑1歩1歩独自で進めたい人はこんな感じで、実際のプログラムを見ながら進めるのがいいと思います。
※また、BBSやMLの空気を読んで(過去ログも読んで)、上級者がいらっしゃる掲示板に質問を投げてみるのもひとつの手です。
検索に迷ったら(IE操作の道に迷ったら)、objIE や InternetExplorer.application をキーワードにGoogleやYahooで探ってみてください。
[No.71 IE操作 リンク先を取出す .Document.links(i).href] .Documentオブジェクトのリンクを探り、 .href .outertext .outerHTML を使ってみました。関連リンク 2008/02/04: [三流君CODEのゴミ箱: VBA IE操作 リンクの取り出し と ダウンロード IE6+Excel2003] ←ダウンロードとの組み合わせとサンプルファイルです。サンプルにキレがないけど こちらも合わせてみてください
[No.97 InternetExplorer.application操作 .Clickでクリック] データをフォームに objIE.document.all.userid.Value = "Ken3" 'ユーザー名 objIE.document.all.pass.Value = "aaa" 'パスワード でセットして、その後、 objIE.document.all.btn01.Click 'クリックメソッドを実行 単純にクリックメソッドを実行して、自動ログイン処理を作成しました。 [No.105 VBAからIE操作 .document.forms(0).Submit でフォーム送信処理] ボタンに名前が付けられていないと、.Clickが使いにくかったので、 .document.forms(0).Submit を使用して、ファームの送信ボタンを押しました。 [No.108 IE アプリケーションのイベントを横取りする] Dim WithEvents IE As InternetExplorer と WithEventsキーワードを使って、 IE_NewWindow2(ppDisp As Object, Cancel As Boolean) と書き、IEのイベントに対して、処理を書いてみました。 テストで下記のようなダウンロード終了時に発生するイベントを書いてみました。 Private Sub WebBrowser0_DocumentComplete(ByVal pDisp As Object, URL As Variant) 'タイトルの代入 Me![txtTITLE] = Me.WebBrowser0.Document.Title 'HTMLの代入 Me![txtHTML] = Me.WebBrowser0.Document.body.innerhtml End Sub [No.110 IE SELECTタグ OPTIONを選択する.Document.all(n).Selected=True] .Document.all(n).Selected=Trueを使用して、 フォーム内のSELECT タグのOPTIONを選択してみました。 [No.112 IE 操作 .ExecWB でコマンド実行(検索したかったけど)] IEの機能(ボタン)を使いたかったので、.ExecWBを探りました。 検索コマンドがうまく行かなかったので、SendKeysで逃げました・・・・ [No.116 InternetExplorer操作 Frameと遊ぶ Objectを探る方法] F2のオブジェクトブラウザを使って、Frameを探り、 フレーム分割された画面に対して、データをセットしてみました。 objIE.Document.frames("F_RIGHT").Document.all("userid").Value = "Ken3" とフレーム関係を探ってみました。 [No.117 InternetExplorer操作 .Silentを使用したけど....] JavaScriptのalert警告メッセージを表示したくなかったので、 .Silent=Trueを使用したが、うまく行かなかった話です。 ※逃げ手(代替案)も成果も無いメルマガでした。(笑) [No.118 Microsoft Web Browser コントロールをフォームに貼る] Microsoft Web Browser コントロールをフォームに貼る手順の解説です。 たんに挿入、ActiveXコントロール、と順に選ぶだけです(簡単です) [No.119 IEを使用して、Web上の表をExcelへ] TABLEのタグから階層的にTR,TDのタグを取り出し、 Web上の表データをExcelに転記しました。 タグはタグの集合体、そんな階層イメージがわかればOKです。 [No.120 URLDownloadToFile APIを使用してダウンロードしてみた] URLDownloadToFile APIを使用して、 Web上のリンク先のデータをダウンロードしてみました。 (右クリック、保存の自動化にチャレンジしてみました) [No.124 IE _BeforeNavigate2イベントでPostデータを覗き見する] _BeforeNavigate2、次のURLへ移る前のイベントで、 PostDataをチェックしてみました。 [No.148 IE ラジオボタン(RADIO)の.Checkedと.Clickの違い] INPUT Type=RADIO(ラジオボタン)のオブジェクトに対して、 .Checkedだとイベントが起動しないが、 .ClickだとonClickのイベントが起動する、 そんな違いの話を少し書いてます。 [No.154 IE SELECTタグの選択 .SelectedIndex=nで選択] objIE.Document.all.Ken.SelectedIndex = 5 objIE.Document.all.kansou.SelectedIndex = 2 など、.SelectedIndexでSELECTタグの項目を選択してみた。 [No.155 IE SELECT後 .fireEventでJavaScriptのイベントを起動] fireEvent --- Fires a specified event on the object. (オブジェクトに指定された出来事を発砲します。) なんてのがあって、 '選択後にonchangeのイベントを発生させる objIE.Document.all.JYO.fireEvent ("onchange") として、JavaScriptのonchangeイベントを発生させました。 [No.156 TypeNameとShell.Applicationを使い起動済みのIEを探す] 'シェルのオブジェクトを作成する Set objShell = CreateObject("Shell.Application") ここから、ウインドウの数だけまわし、起動中のIEを探してみました。 For Each objWindow In objShell.Windows Debug.Print "タイプは:" & TypeName(objWindow.document) 'HTMLDocumentだったら If TypeName(objWindow.document) = "HTMLDocument" Then 'オブジェクトを代入する Set objIE = objWindow nFLG = True '見つけたよ Exit For '初めに見つけたオブジェクトを代入 End If Next [No.157 IE Element の 我流な探し方(AS Objectはキライ)] TypeNameを使い、 'データをループする For Each objTAG In objIE.document.all Debug.Print objTAG.tagName & ":" & TypeName(objTAG) Cells(yline, "A") = objTAG.tagName Cells(yline, "B") = TypeName(objTAG) Cells(yline, "C") = objTAG.innerHTML yline = yline + 1 Next ループさせて、オブジェクトのタイプを探ってみました。 B:HTMLPhraseElement BR:HTMLBRElement A:HTMLAnchorElement とかいろいろとあるみたいです。 [No.159 IE 認証ページへのアクセス、basci認証ページって?] ヘッダーに "Authorization: Basic bWFpbG1hZ2E6Z3Vlc3Q=" と基本認証のコードを埋め込み、Basic認証のページをIEで開いてみました。 'テスト用の認証ページに飛ぶ Const strURL = "http://www.kurokiya.sake-ten.jp/zzz/" Const strHEAD = "Authorization: Basic bWFpbG1hZ2E6Z3Vlc3Q= " & vbCrLf objIE.navigate2 strURL, , , , strHEAD たんにヘッダーで送っているだけです。 [No.162 IE データセット後、JavaScriptを起動する] IEのJavaScriptの起動方法ですが、 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Me.WebBrowser1.Document.scripts(n) とか、scriptsがスクリプトオブジェクトだから、 これを.RUNとかないかなぁと探ってみましたが、 目的の処理が見つかりませんでした。 <a href = "JavaScript:parts('B')">〜 とリンクになっているから、それだったら、 .Navigate2 "JavaScript:parts('B')" でOKなのか?って発想でテスト実行してみました。 [No.163 IE _NewWindow2 別窓で開いたオブジェクトの管理] Dim WithEvents objNEW_IE As InternetExplorer でオブジェクト変数を定義して_NewWindow2で新規IEを作成、 Private Sub WebBrowser1_NewWindow2(ppDisp As Object, Cancel As Boolean) Set objNEW_IE = CreateObject("InternetExplorer.Application") Set ppDisp = objNEW_IE '作ったオブジェクトを代入 objNEW_IE.Visible = True End Sub 下記のように、作成したIEのイベント(ここでは読み込み完了)で処理したサンプルです Private Sub objNEW_IE_DocumentComplete(ByVal pDisp As Object, URL As Variant) MsgBox "あたらしく開かれたURLは" & URL End Sub [No.164 IE .getElementsByTagNameでタグ指定 .Quitで閉じる] .getElementsByTagName("タグの名前") で指定したオブジェクトを取得できます。 新規ウインドウに表示された広告コードなどTEXTAREAのタグを .getElementsByTagName("TEXTAREA") で取り出し処理を行い、その後、.Quitで新規に開いたIEを閉じました。 [No.167 amazonの広告コード UTF-8を探る(keywordを作る) ] IE操作にはあまり関係ないのですが、 amazonの広告コード UTF-8でkeywordを作ってみました。 ※SJISをUTF-8に変換してみました。 [No.170 IE Aタグのリンク先を.Click(クリック)してみた] フレームの先のJavaScriptの起動ができなくて、 苦肉の策で Dim objFDOC As Object 'フレームのドキュメントを保存する Set objFDOC = objIE.Document.frames("F_RIGHT").Document '代入 'リンク情報からオブジェクトを探し.Clickする For n = 0 To objFDOC.links.Length - 1 'リンク数分まわす Debug.Print objFDOC.links(n).href 'デバックで表示する 'リンク先(.href)をチェックする(文字列比較する) If objFDOC.links(n).href = "javascript:gonumber();" Then objFDOC.links(n).Click '.Clickでクリックしてみた Exit For '見つかったので強制的にループを抜ける End If Next n と、フレームの先のリンク先オブジェクトを探して.Click(クリック)して逃げました。 [No.175 IE .Navigate about:blankで空白ページ表示 禁断の制御文GOTO文] objIE.Navigate "about:blank" で空白のページを表示してから、 正常に移動されなかったら、禁断の制御文?GoTo文を使って再度読み込みに行く、 そんなサンプルです。(あまりキレがないけど) [No.176 VBAからIE操作 NAMEが同じフォームの項目へデータをセットする] 同じ名前が存在する時、.allで探すとエラーになるので、 objIE.document.all.q(0).Value = "golf" 'document.all.q(0)をテスト や objIE.document.all("q")(1).Value = "auto" 'document.all("q")(1)をテスト でセットして遊んでみました。 ラジオボタンの操作の時、 '上から3番目のGUCHIをチェック(2)の.CheckedをTrueにする objIE.document.Forms(0).kubun(2).Checked = True 'セレクト状態をtrueにする や '下記でもOKです.all("kubun")(2)を操作する 'objIE.document.all("kubun")(2).Checked = True 'セレクト状態をtrueにする が使えたので、場面によっては楽かなぁ??? [No.177 VBAからIE操作 TABLEの中にTABLE .getElementsByTagNameほか] サンプルは株価の表で、TABLEが2重になってました。 そのテーブルを、 '.document から.getElementsByTagName("TABLE")でオブジェクトを取り出す For Each objTAG In objIE.document.getElementsByTagName("TABLE") 'TABLEの中、テキスト文字で[終値]があるか、子TABLEは無しかチェック If InStr(objTAG.InnerText, "終値") > 0 _ なんて感じで識別して、取り込んでみました。
読者からのお勧め本。私はまだ購入していないのですが、下記の
[自動売買ロボット作成マニュアル~エクセルで理想のシステムトレード]
が参考になった三流君も見習って株のソフトを作ってくださいと多数(と言っても3人)に言われました。
株の自動売買ソフトかぁ・・・みなさん夢がありますね。。。
※追加情報(2006/11/08)、各証券会社にあわせたVBA IEコントロールの発注方法などは載っていないみたいです。本を買っただけではわからない・・と読者からお叱りを受けました。
※※メールで送られてくる質問の多数は株と競馬の自動データ処理なので、新たに解説ページを別で作ろうかなぁ・・・と思いつつ、具体的な予定は無かったり・・・はやく動き出せ、動けよコラ、三流プログラマーはこれだから と 自分自身に言ってみた。
読者からのお勧め本その2私はまだ購入していないのですが(またカヨ)、下記の
[VBAマクロで作る株式自動売買プログラム(仮)]
のタイトルが気になったので三流君も買ってみたら?と言われました(と言っても1
人ですが、、)
たしかに、タイトルに惹かれますね。あとは中身のチェックかな。
※じゃなくって、ポツポツIEを使った自動処理の本が出ているってことは、私は波に乗り遅れたかなぁ、、、今から証券口座を申し込んで作成を始めても遅いか。(そもそも、今から勉強して素人が株デビューするには時期が悪い?それとも?)
| ※種類が豊富で探し易いです。※在庫ありが48時間以内発送が急ぎで資料や書籍がほしい時、とても助かります。 お奨め本の目次を見るだけでも勉強になったり |