ken3memo (三流君)

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。
(※詳細は[三流君 三流プログラマーとは?]を見てください)




[記事一覧、バックナンバーを見る]

2010-07-19

ExcelのA列の単語を翻訳サイトにセット取得を自動で連続実行

2012/6/7 追記(コメント欄の動作報告を上に表示)

translation.infoseekのフォーマットが変更になったのかうまく取得できなくなっています。

objIE.Document.all("origin_doc").Value = Cells(yCNT, 1) 'A列の値を渡す

↑ここでエラーが出て止まってしまいますね。

現在、サンプルコードでは動かないみたいなので、参考程度に見てください


下記の質問を見て、昔作ったExcelからIE操作のサンプルを思い出す。

http://q.hatena.ne.jp/1279514525

【大量の英単語のリストを、日本語訳してくれるソフト】

手元に1000以上の英単語のリストがあります。この英単語を一気にすべて和訳してくれるソフト/サービスを探しています。

オリジナルな英単語帳を作りたいイメージです。

でも、無料サイトだからって、連続実行して迷惑をかけると

大量アクセス で 検索するとイロイロ出てくるけど、

岡崎市立図書館HP大量アクセス事|ムムの呟き

http://ameblo.jp/murmur-of-ignorance/entry-10575127519.html

から、岡崎市 図書館 大量アクセスで検索

岡崎図書館事件まとめ

http://librahack.jp/

みたいなこともあるので、注意が必要だったり。。。

※無料・タダに飛びつくとタダより高い物はないにならないように。。。

※※学校の宿題も自分で紙の辞書をひいた方が勉強になったり、、まぁ今はPCの辞書や携帯電話かもしれないけど。

そんな前説はこのくらいにして(前説のほうが解説よりも長かったり)

QA0914 .Document.allを使いデータセットと結果取得を連続で

http://ken3-info.blog.ocn.ne.jp/objie/2009/09/qa0914_document.html

これを参考にして、

(※サンプルと違うのは、URLが違うのと、オプションを選択しなかっただけですが)

こんな感じかなぁ

Option Explicit

'IEを使い 英単語を変換する
'A5から 単語を 変換サイトへ渡す(セットする)
'表示された変換結果を受け取り 隣のB5〜セットする
'A列のデータが終了するまで、翻訳サイトにデータセット、結果をB列にセットを繰り返す。

Sub ie_test_e()

'IEの起動
    Dim objIE As Object '変数を定義します。
    Set objIE = CreateObject("InternetExplorer.Application") 'オブジェクトを作成します。
    objIE.Visible = True      '可視、Trueで見えるようにします。
    
'表示位置(左上の座標)とサイズ(高さ・幅)を調整する
    objIE.Top = 100      '左上 上位置
    objIE.Left = 100     '左上 左位置
    
    
'変換元の日本語が無くなるまでループ
    Dim Wait_Time As Date  '秒数を計算するため
    Dim yCNT  As Integer   '行数
    
    For yCNT = 5 To 99  '5行目から最大99行目まで
        If Trim(Cells(yCNT, 1)) = "" Then Exit For 'A列が空白だったらループを抜ける
        
        '処理したいページを表示します。ここでは翻訳ページ
        objIE.Navigate "http://translation.infoseek.co.jp/?ac=Text&lng=en"  '.Navigate メソッドで表示する。
    
        '↑の起動待ち↓ 5秒間、待ってみた。
        Wait_Time = DateAdd("s", 5, Now())  '5秒後を  DateAddで計算
        Do While Now() < Wait_Time  '現在時刻が↑より小さい間 バカみたいに空回り(時間待ち)
            DoEvents
        Loop
        '※三流コードサンプルからアレンジして 良いコードを作ってくださいね。
    
        'ページの表示完了を待ちます。
        While objIE.ReadyState <> 4 Or objIE.Busy = True '.ReadyState <> 4の間まわる。
            DoEvents  '重いので嫌いな人居るけど。
        Wend
        
    'ページが表示されたので、表示された文章に対して、処理を行います。
    
        objIE.Document.all("origin_doc").Value = Cells(yCNT, 1) 'A列の値を渡す
        'objIE.Document.all("selector_1").Checked = True     '日本語--英語 逆の時
        objIE.Document.all("submit").Click '翻訳ボタンを押す
        
        '↑の起動待ち↓なんか、止まった感じがしてイヤなんだけど。。。
        Wait_Time = DateAdd("s", 5, Now())  '5秒後を  DateAddで計算
        Do While Now() < Wait_Time  '現在時刻が↑より小さい間 バカみたいに空回り(時間待ち)
            DoEvents
        Loop
        '※三流コードサンプルからアレンジして 良いコードを作ってくださいね。
    
    '翻訳の結果を 表示完了を待ちます。
        While objIE.ReadyState <> 4 Or objIE.Busy = True '.ReadyState <> 4の間まわる。
            DoEvents  '重いので嫌いな人居るけど。
        Wend
    
        '結果のエリア converted を 取り出し、隣のB列にセット
        Cells(yCNT, 2) = objIE.Document.all("converted").Value
    
    Next yCNT

'処理が終わったので、IEを閉じます。
    objIE.Quit  '.Quitで閉じる
    Set objIE = Nothing '使用したオブジェクト変数もキレイにしてね。
   
End Sub

実際のテストファイルは

http://www.ken3.org/vba/zip/IE_TEST_0719.zip

においておくので、使ってみてください。

解説は、ほぼ同じなので、こっちに置いてある動画

QA0914 .Document.allを使いデータセットと結果取得を連続で

http://ken3-info.blog.ocn.ne.jp/objie/2009/09/qa0914_document.html

を見てください

何かの参考となれば、、、

※連続処理は注意して実行してくださいね・・・

その他 処理と関係ない広告です

下記、IE操作と関係ない広告です。

(無料サイトも 広告を狙っているのに、、、連続実行されたら悲しいなぁ・・・)なんて思いつつも、下記最近の人気商品です。

【3気圧防水 breo ブレオ シリコンウォッチ 腕時計 ロームウォッチ 7月19日...[続きを見る]

【EFX正規販売店】 EFX パフォーマンスリストバンド スポーツ WR 7月19日...[続きを見る]

【メール便送料無料】 ☆2個セット☆ SANYO 【サンヨー DB-L8 7月19日...[続きを見る]

DS陰山メソッド 電脳反復 正しい漢字かきとりくん → 7月19日...[続きを見る]

JUNGLE STORM / サイドくしゅくしゅデザイン カーゴ ショー 7月19日...[続きを見る]

NEO by OYAIDE Elec d+ FireWire 6pin- 7月19日...[続きを見る]

SALUS アイススティックメーカー オレンジ → 7月19日...[続きを見る]

UVカット99%防災フィルム50SL → 7月19日...[続きを見る]

オート 油性替芯 0.7mm (インク色:クロ) No.87NP 5セッ 7月19日...[続きを見る]

カーメイト(CARMATE) プリウス用ラウンドノブ LS138 → 7月19日...[続きを見る]

カベンディッシュ&ハーベイ コーヒードロップ 200G → 7月19日...[続きを見る]

シルバー磨きクロス 用途の違う布の2枚セット ジュエリーセーム → 7月19日...[続きを見る]

スターウォーズ ヴィンテージ ベーシック フィギュア ダース・ベイダー 7月19日...[続きを見る]

ブラック岩塩(ヒマラヤ岩塩:バスソルト) ミル 1kg → 7月19日...[続きを見る]

ブレイク ブレイド PCデスクトップアクセサリー → 7月19日...[続きを見る]

モチベーション3.0 持続する「やる気!」をいかに引き出すか - 現在人気の モチベーション3.0 持続する「やる気!」をいかに引き出すか など 本・書籍を紹介する(...[続きを見る]

ローヤル Rody ロディ コンセントキャップ → 7月19日...[続きを見る]

蛍/少年(初回限定盤)(DVD付) → 7月19日...[続きを見る]

戦国BASARA弐 其の四 7月19日...[続きを見る]

なすびなすび 2012/06/07 12:25 translation.infoseekのフォーマットが変更になったのかうまく取得できなくなっています。
objIE.Document.all("origin_doc").Value = Cells(yCNT, 1) 'A列の値を渡す
↑ここでエラーが出て止まってしまいますね。

ken3memoken3memo 2012/06/07 12:59 連絡ありがとう。記事の上に注意事項として追記しました。

拓哉拓哉 2012/11/15 13:32 色々調べているうちに流れ着きました。あちこちのサイトで「三流君の〜」から引用させていただきましたというのを見かけました。成程、全くの初心者の私でも理解できるように解説いただき感謝しております。分からないことがあり教えていただきたく何処に書けばわからなかったのでこちらに書かせていただきました。A列の値を渡し結果をB列へという自分がやりたいことにドンピシャだったのですが(色々調べてみたのですが中々無かったです)A列を渡し検索ボタンを押して結果すべてをB列にまでは出来たのですが、検索結果の特定の場所だけ返したいのですが、どのようにすればいいのでしょうか?ちなみに検索結果ソースは<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="Shift_JIS">
<meta name="viewport" content="width=device-width">
<meta name="format-detection" content="telephone=no">
<title>高速検索ツール</title>
<link rel="shortcut icon" href="favicon.ico"> </head> <body onload="setTimeout('document.forms[0].keyword1.select();document.forms[0].keyword1.focus();',
40);">
<form style="display: inline" action=""
method="post">ログイン中。


<embed SRC="http://system-sedori.com/sound/wav/935.wav" hidden="true"
autostart="true" loop="false" />↓キーワード、ISBN等。複数入力対応

<input type="text" name="keyword1" size="16" maxlength="1000"
istyle="4" format="*N" mode="numeric" style="ime-mode:inactive;"
autofocus />

<input type="submit" name="search" value="GO">
[<a href="info_1/">?1</a>][<a href="info_2/">?2</a>]<input type="checkbox" name="simple_search" value="1"
onclick="document.forms[0].keyword1.select()">簡易高速検索モード

</form><form style="display: inline" action="" method="post">検索時間 :
3.23秒(1件)
(棚ID:1)
<hr><a
href="http://www.amazon.co.jp/gp/product/B0000A02WZ"
target="_blank">商</a>|<a
href="http://www.amazon.co.jp/product-reviews/B0000A02WZ"
target="_blank">★</a>[予想価値:<a
href="http://www.amazon.co.jp/gp/offer-listing/B0000A02WZ?condition=all"
target="_blank"><b>935円</b></a>]Three Pickers [DVD] [Import] (2003)
<font color="red"></font><font
color="red"></font>●推奨価格:<font
color="red"><b>1928円</b></font>、販売予想:<font
color="blue"><b>28日</b></font>
●DVD:<b>平均</b><font
このうち予想価値:935円の935をB列に販売予想:28日の28をC列に返したいのですがどのようにすればいいのでしょうか?
よろしくお願いいたします。

ken3memoken3memo 2012/11/15 19:48 >A列を渡し検索ボタンを押して結果すべてをB列にまでは出来たのですが
これが、できているなら、
>>結果すべてをB列に
の命令で、もし、
B列=XXXX.InnerHTML
を使っているなら、
B列=XXXX.InnerTEXT

.InnerTEXTにすると、タグなしのテキストデータがわたるので、
<font 〜 とか <タグ>テキスト</タグ>が
テキストのみになるので、
ここから、Instr関数などで 推奨価格: や 販売予想:を探して、円や日まで抜き取ればいいのかなぁ?
.
B列=XXXX.InnerHTMLじゃなかったらスミマセン。
.InnerTEXTで一度結果を取り出して、中身を確認してみてください。
販売予想:などに名前が付いていないので(Fontのタグでかこってあるだけなので)、
全体から探す案でした。
少しでも解決のヒントとなれば..と思いつつ失礼します。 三流プログラマー ken3

PS. instrを使ったサンプル http://www.ken3.org/vba/backno/vba053.html ← 動作しないかもしれませんが、何かの参考となれば...

拓哉拓哉 2012/11/16 16:21 アドバイスありがとうございます。
朝からまだ現在まで格闘中ですがようやく出来そうな気配がしてきました。
またわからないことがあれば教えて下さい。よろしくお願いいたします。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/ken3memo/20100719/1279537302




[記事一覧、バックナンバーを見る]








ブログトップ 記事一覧 ログイン 無料ブログ開設