エクセルVBAについて質問です。次のページにあるようなマクロを作ってください。

http://hatena88.web.fc2.com/hatena/newpage1.shtml

一番最初の正解者に500ポイント、2着目以降の方にも50ポイント差し上げます。ただし正解の基準として、「ド」素人の僕にわかりやすい解説とプログラムを書いているということを条件とします。本当に素人なんです。下記のページに似たような質問をしていていて、いただいた回答と解説は完璧だったのですが、プログラムは理解できなくて他に応用することができませんでした。質問の内容は変えてありますが、参考にしてください。
http://q.hatena.ne.jp/1162101565
スマートなマクロよりも素人が作るようなどろくさい感じの方が理解しやすいと思います。

以上よろしくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/10/29 20:16:45
  • 終了:2006/10/30 22:18:17

回答(1件)

id:openseed No.1

openseed回答回数51ベストアンサー獲得回数62006/10/30 03:51:59

ポイント500pt

これは、エラー処理など、ちゃんと作ろうとすると、1~2日の作業になると思います。

また、自動化するのであれば、素直に他の言語を使ったほうが良いような気もします。(たとえば、JavaScriptと組み合わせるとより便利かもしれません。)

本来は・・・

・POSTデータの解析(HTMLエレメント名の抽出)

・Excelのセル情報の抽出とエレメント名とのマッピング作成

・要求情報(POST)の作成と送信

・返却情報の解析&エラー処理

・次データ処理・・・

というような、作業になると思うのですが・・・


VBAで直接IEを操作する場合に、参考になりそうなページがあったので、ご紹介します。

http://www.ken3.org/cgi-bin/group/vba_ie.asp

この処理は、VBA以外にもHTML(フォームや部品)やJavaScriptなど(データ構造)の知識も必要になります。

どこから解説して良いかわからないため、簡単なサンプルコードのみ記述してみました。

また、Excelからの値取得は、http://q.hatena.ne.jp/1162101565 でも紹介されているので、省略しています。


参考になれば幸いです。

※ 実際の処理を行う前に、 MsgBox を追加していますので、

必要に応じて、Excelにフォーカスをあて、MsgBoxを閉じてください。


ソースコード

Option Explicit

    Dim objIE As Object

    Dim objTAG As Object

    ' IEオブジェクトを作成し、表示する。

    Set objIE = CreateObject("InternetExplorer.application")

    objIE.Visible = True

'動作①

    '文字列で指定したURLを開く

    objIE.Navigate "https://regist.mail.goo.ne.jp/id/regist"

    '表示終了まで待つ

    Do While objIE.Busy = True

        DoEvents

    Loop


MsgBox "表示されました。"


    'フォームに値を設定する。

    With objIE.document.forms.form1.elements

        .REGIST_NAME.Value = "山田太郎"

        .LastName.Value = "山田太郎"

        .FirstName.Value = ""

        '※ <option value="16">(会社員)販売・営業</option>

        .Ui_job.Value = "16"

    End With


MsgBox "一つ目の値を設定しました。"


    ' 登録ボタンを押下する。

    For Each objTAG In objIE.document.getElementsByTagName("INPUT")

        If (objTAG.Type = "submit" And objTAG.Value = "上記利用規約に同意して登録") Then

            objTAG.Click

        End If

    Next


MsgBox "登録ボタンを押下しました。"


    '表示終了まで待つ

    Do While objIE.Busy = True

        DoEvents

    Loop

'動作②

    ' 戻るボタンを押下します。

    objIE.GoBack

MsgBox "戻るボタンを押下しました。"

    '表示終了まで待つ

    Do While objIE.Busy = True

        DoEvents

    Loop


'動作③

    'フォームに値を設定する。

    With objIE.document.forms.form1.elements

        .REGIST_NAME.Value = "山田太郎(その2)"

        .LastName.Value = "山田太郎(その2)"

        .FirstName.Value = ""

        '※ <option value="16">(会社員)販売・営業</option>

        .Ui_job.Value = "16"

    End With

MsgBox "2つ目の値を設定しました。"

((※ 表示終了まで待つのが重要
Do While objIE.Busy = True
    DoEvents
Loop))

id:taroemon

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

そんなに難しい者とは知りませんでした。

作っていただいてとても嬉しいです。

助かりました。

2006/10/30 22:17:51

コメントはまだありません

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

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

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

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