Click Here!
表示中のIEの画面を操作するためのVBのソースを生成
EXCEL他VBAでIEを操作する方は多々おられると思いますが
操作する画面のソース(htmlファイル)からテキスト部とかボタンの名前
とかを探し表示画面の項目との対応をされているのではないでしょうか
このEXCELマクロでは、表示中のIE画面用を (1)操作するためのVBソース
(2)表示内容の文字列を切り出すためのVBソース
を自動で作成します
これを使えばhtmlファイルをテキストエディタとかで調べる手間が省けます
■対応タグ
タグ生成ソース生成サンプル
INPUT TEXT入力項目に値を設定objIE.document.all.Title.value="" ' text
TEXTAREAテキストエリアに値を設定objIE.document.all.Description.value="" ' textarea
INPUT CHECKBOXチェックボックスをクリックobjIE.document.all.ypmOK.click ' checkbox Yahoo!かんたん決済
INPUT RADIOラジオボタンをクリックobjIE.document.all.shipping(0).checked=true ' radio 落札者が送料を負担
INPUT BUTTONボタンをクリックobjIE.document.all.tags("INPUT").item(65).Click 'submit 続ける
SELECTプルダウンの項目選択objIE.Document.all.loc_cd.selectedIndex=5 ' 秋田県:5
HREFリンク先へ移動objIE.Document.links(1).click 'Yahoo! JAPAN
■EXCEL2002以上 IE6以上 Windows/XP,EXCEL2002,IE6で動作確認済み
■ソース生成例
対象のIE画面(Yahooオークションの出品ページ)
上記のソース生成結果(文字化けする場合はシフトJISでエンコードしてください)
■使いかた
1.こちらよりダウンロード ファイル名:htm_ope.xls
2.専用のディレクトリを用意して、htm_ope.xlsを移動またはコピー
3.ソース生成対象のIE画面を開いておく。開いているすべてのIEが対象になります
4.htm_ope.xlsを開き、生成ボタンを押す(マクロ:htm_input_opeが実行される)
5.htm_ope.xlsを置いたフォルダ内に次の規則でテキストファイルを作成
・表示したもののURLよりファイル名を決定
・右記の文字列・記号のタグイを削除 "http","https"
・上記の左24文字に".txt"を付加
6.テキストファイルを開き、必要なソースをコピーしてください
■制限事項など(作成者が分かっている範囲)
・Yahooオークションの出品ページでほぼ確認
・HREFでJAVASCRIPTを参照しているもの
・FORMが2つ以上あるページ
 (例)Yahooオークションの評価
 objIE0.Document.all.Comment.Value = "eee" ' textarea ←このコードを出すが実行時エラーになる
 objIE0.Document.all.Comment(0).Value = "eee" ' textarea ←このコードのようにformの位置を配列で指定するよう、修正すればOK
■免責うんぬん
・本EXCELブックによる使用者の損害どうのこうの補償は作成者は一切関知しません
 使用者の責においてご利用ください
・本EXCELブックに使用者が書き込まれた内容などは、そのEXCELブック内のみに保存されます。使用者の個人情報をこっそりメールするような、いかがわしいものではありません。ソースも見れますので安全そのものです
質問・要望はこちらから
こちらのオークションでプログラミングの書籍を出品してます
表示中のIEのTABLEのTD要素を配列にセットする関数
EXCEL他VBAでIEを操作する方は多々おられると思います
そして操作結果の画面からTABLEのTD要素をVBAで参照したいケースがでてきます
この際ソース(htmlファイル)からTABLEを探し、切り出しのため前後のキーとなる文字列 とかを探し表示画面の項目との対応をされているのではないでしょうか
このVBA関数では、TABLEの順序またはキーとなる文字列の指定で配列にTD要素をセットします
これを使えばhtmlファイルをテキストエディタとかで調べる手間が省けます
同様の機能にEXCELのwebクエリでシートにTABLEの値がセットできます
私の知る範囲では次の難があります(間違いでしたらすみません)
・ログインを必要とする、銀行とかの画面には使えない
・シートにセットだけで、VBAの変数とかに渡すのはチョット面倒
というわけで、こいつはなかなかの優れものではと自負しております
■関数仕様
<形式>Function t_Array(objIE As Object, ByRef fno As Integer, fno_w As Integer, no As Integer, ByRef a() As String, Optional s_s As String) As Integer
<引数>
#変数内容
1objIE対象画面のIEオブジェクト
2fno対象画面がフレームを使っている場合、対象TABLEが存在するフレーム番号を1からの連番で指定する
フレームがネストする場合の番号は下記の調査ツールで確認できる
フレームなしの場合0を指定する
3fno_w0を指定、(内部処理で何番目のフレームかの判定用)
4no何番目のTABLEかを0からの連番で指定する
TABLEがネストする場合の番号は下記の調査ツールで確認できる
5aTABLEのTD要素を設定する文字列配列を指定する
6s_s(4)のnoではなくキーとする文字列でTABLEを探す場合その文字列を指定する
<戻り値>
条件戻り値
s_s指定でTABLEがあったそのTABLEの連番(0基点)
これは同じようなテーブルが複数あり、全て取り出す場合、この戻り値を2回目以降noにすれば、次のTABLEの検索に使用できる
s_s指定でTABLEがなかった-1
no指定no
■使用例
■EXCEL2002以上 IE6以上 Windows/XP,EXCEL2002,IE6で動作確認済み
■ソース生成例
対象のIE画面(Yahooオークションの出品ページ)
上記のソース生成結果(文字化けする場合はシフトJISでエンコードしてください)
■使いかた、調査ツール
1.こちらよりダウンロード ファイル名:htm_ope.xls
このファイルのマクロに関数があります。必要分コピーするなり。呼び元を追加するなりしてご使用ください
AMAZON出品一覧作成amazon_ichiranとか参考になると思います
<以下、調査ツール>
2.専用のディレクトリを用意して、htm_ope.xlsを移動またはコピー
3.ソース生成対象のIE画面を開いておく。
4.htm_ope.xlsを開く。
5.適当なシートの値を全てクリアしておく。(セルに全テーブルの内容をセットするため) 6.IE画面を複数表示しえちる場合、セル1行・A列に対象URLまたは、一意になるようURLの一部の文字列を入れる
7.マクロtable_getを実行する
  8.実行したときのシートにテーブルの値を次の規則でセルにセット
・A列:そのテーブルの1行目にフレーム番号、テーブル番号、テーブルの大きさをセット
 2行目以降は値なし、値が登場したところが、次のテーブルの開始
(例)
 FrameNo=0 fno
 No=0  
 行=1 a
 列=2 a
・B列〜:テーブルの要素、との間の文字列
6.テキストファイルを開き、必要なソースをコピーしてください
■制限事項など(作成者が分かっている範囲)
・TAGの中身は全て小文字に変換
・コメントは削除
・エラーチェック殆んどなし
 ・文法違反 なしとか
 ・EXCELの行・列数オーバー
 ・などなど
■免責うんぬん
・本VBA関数、EXCELブックによる使用者の損害どうのこうの補償は作成者は一切関知しません
 使用者の責においてご利用ください
・本EXCELブックに使用者が書き込まれた内容などは、そのEXCELブック内のみに保存されます。使用者の個人情報をこっそりメールするような、いかがわしいものではありません。ソースも見れますので安全そのものです
質問・要望はこちらから
こちらのオークションでプログラミングの書籍を出品してます
HTMLの解析に便利な文字列操作関数
HTMLの解析用に作った関数を紹介します
VBの機能に既にあるかどうか調べてはいないので、作る必要がないものがあるかもしれません。
あるいは関数の組み合わせで1行で実現できるかもしれない
関数名動作
strmid指定された左右の文字指定キーワードの間の文字列を取り出す
strmidcut指定された左右の文字指定キーワードの間の文字列を削除
taglowerHTMLタグ内の文字列("<"と">"の間)を小文字にする
cut20lower文字列中の20H未満の文字(制御文字)を削除する
t_array_SetTABLE要素より2次元配列にTR,TD要素をセット
■strmid:指定キーワードの間の文字列を取り出す
■関数仕様
<形式>Function strmid(ByRef org As String, ByVal mae As String, ByVal usiro As String, _ Optional ByVal cnt As Integer, Optional copy_s As Boolean) As String
<引数>
>
#変数内容
1orgソース文字列
2mae取り出し対象の左の文字列
3usiro取り出し対象の右の文字列
4cnt何番目に発見した文字列を切り出すかを指定する
5copy_s切り出し後orgを切り出した次の文字列に変更するか否かを指定する
false(デフォルト):変更する
true:変更しない
<戻り値>
条件戻り値
切り出し文字列あり切り出し文字列
切り出し文字列なし""
■使用例
a="<table border=1><th>条件</th><th>戻り値</th><tr><td>切り出し文字列あり</td><td>切り出し文字列</td></tr><tr><td>切り出し文字列なし</td>< td>""</td></tr></table>"
m=strmid(a,"<th>","</th>") '実行結果:"条件"
m=strmid(a,"<th>","</th>") '実行結果:"戻り値"
m=strmid(a,"<td>","</td>",2) '実行結果:"切り出し文字列"
■EXCEL2002で動作確認済み
■ソース
こちら(htm_ope.xls)に、このページの紹介物が一通りあります
Function strmid(ByRef org As String, ByVal mae As String, ByVal usiro As String, _
Optional ByVal cnt As Integer, Optional copy_s As Boolean) As String
If cnt = 0 Then cnt = 1
Do Until cnt = 0
If mae = "" Then
strmid = Left(org, InStr(org, usiro) - 1)
org = Right(org, Len(org) - Len(strmid) - Len(usiro) + 1)
Else
pos = InStr(org, mae)
If pos > 0 Then
strmid = Right(org, Len(org) - pos - Len(mae) + 1)
'org = strmid
pos = InStr(strmid, usiro)
If usiro = "" Then
' strmid = ""
If copy_s = False Then org = strmid
Else
If pos > 0 Then
strmid = Left(strmid, pos - 1)
If copy_s = False Then org = Right(org, Len(org) - Len(strmid) - Len(mae) - Len(usiro))
End If
End If
Else
strmid = ""
End If
End If
cnt = cnt - 1
Loop
End Function
■免責うんぬん
・本VBA関数による使用者の損害どうのこうの補償は作成者は一切関知しません
 使用者の責においてご利用ください
質問・要望はこちらから
こちらのオークションでプログラミングの書籍を出品してます ■strmidcut:指定キーワードの間の文字列を取り出す
■関数仕様
<形式>Function strmid(ByRef org As String, ByVal mae As String, ByVal usiro As String, _ Optional ByVal cnt As Integer, Optional copy_s As Boolean) As String
<引数>
>
#変数内容
1orgソース文字列
2mae取り出し対象の左の文字列
3usiro取り出し対象の右の文字列
4cnt何番目に発見した文字列を切り出すかを指定する
5copy_s切り出し後orgを切り出した次の文字列に変更するか否かを指定する
false(デフォルト):変更する
true:変更しない
<戻り値>
条件戻り値
切り出し文字列あり切り出し文字列
切り出し文字列なし""
■使用例
a="<table border=1><th>条件</th><th>戻り値</th><tr><td>切り出し文字列あり</td><td>切り出し文字列</td></tr><tr><td>切り出し文字列なし</td>< td>""</td></tr></table>"
m=strmid(a,"<th>","</th>") '実行結果:"条件"
m=strmid(a,"<th>","</th>") '実行結果:"戻り値"
m=strmid(a,"<td>","</td>",2) '実行結果:"切り出し文字列"
■EXCEL2002で動作確認済み
■ソース
こちら(htm_ope.xls)に、このページの紹介物が一通りあります
Function strmid(ByRef org As String, ByVal mae As String, ByVal usiro As String, _
Optional ByVal cnt As Integer, Optional copy_s As Boolean) As String
If cnt = 0 Then cnt = 1
Do Until cnt = 0
If mae = "" Then
strmid = Left(org, InStr(org, usiro) - 1)
org = Right(org, Len(org) - Len(strmid) - Len(usiro) + 1)
Else
pos = InStr(org, mae)
If pos > 0 Then
strmid = Right(org, Len(org) - pos - Len(mae) + 1)
'org = strmid
pos = InStr(strmid, usiro)
If usiro = "" Then
' strmid = ""
If copy_s = False Then org = strmid
Else
If pos > 0 Then
strmid = Left(strmid, pos - 1)
If copy_s = False Then org = Right(org, Len(org) - Len(strmid) - Len(mae) - Len(usiro))
End If
End If
Else
strmid = ""
End If
End If
cnt = cnt - 1
Loop
End Function
■免責うんぬん
・本VBA関数による使用者の損害どうのこうの補償は作成者は一切関知しません
 使用者の責においてご利用ください
質問・要望はこちらから
こちらのオークションでプログラミングの書籍を出品してます
Anagramパズルの答え探し・週刊ST購読者にお助け、VBaプログラミング再帰IE操作などウンチクもの
楽天アフィ4今週はAnagram、やさしめとのこただが、動物の鳴き声など知らない
文字のマスの答えはすぐ分かったが、泣き声など分からんのでこんなのをEXCELマクロにしてみた
・ありうる単語の組み合わせで
英辞郎でチェック
■EXCEL2002以上 IE6以上 Windows/XP,EXCEL2002,IE6で動作確認済み
■使いかた
1.こちらよりダウンロード ファイル名:puzz.xls
2.専用のディレクトリを用意して、puzz.xlsを移動またはコピー
3.puzz.xlsを開く
4.任意のセルにチェックする文字を入力し、カーソルをそのセルに位置づける
5.ボタン”単語check”を押す→
 IEが起動され英辞郎での検索が始まる
 答えはこの検索結果から探してください
■制限事項など(作成者が分かっている範囲)
・完全一致したら英辞郎の検索をやめるようにしたかったけど、今回は全件検索
 エラーなしの画面で止めるようにしたのだけど、前の文字で一致するとそこで止まるので、この処理はコメントにした
■免責うんぬん
・本EXCELブックによる使用者の損害どうのこうの補償は作成者は一切関知しません
 使用者の責においてご利用ください
・本EXCELブックに使用者が書き込まれた内容などは、そのEXCELブック内のみに保存されます。使用者の個人情報をこっそりメールするような、いかがわしいものではありません。ソースも見れますので安全そのものです
質問・要望はこちらから
こちらのオークションでプログラミングの書籍を出品してます