• ベストアンサー

VBAについて。セルにあわせてマクロを変更したい。

VBAを使い、yahooの路線検索を閲覧しています。 出発地 目的地 府中 桜上水 【ボタン】 新宿 御徒町 【ボタン】 日暮里 巣鴨  【ボタン】 A列のセルを出発地 B列のセルを目的地 にそれぞれ入力しています。 C列の【ボタン】を押すとマクロが動くようにしたいと思っています。 下記のマクロの『Range("")』の部分を 3行目の【ボタン】をクリックしたら 『Range("A3")』 『Range("B3")』 に 4行目の【ボタン】をクリックしたら 『Range("A4")』 『Range("B4")』 に・・・ としたいと思っています。 200行近くあるので、ひとつひとつマクロを作成するのはとても大変で、色々と調べたのですが、どうにも解らず、助けを求めにきました。 また… 【ボタン】に関しても、特に意味はなく、使いやすいかなと思った程度ですので、同じような使い方をしている方で、便利にしようする方法などありましたら教えていただければと思います。 ------------------------------------------------------------------- Sub 路線検索() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://transit.yahoo.co.jp/" Do While objIE.Busy = True DoEvents Loop objIE.Document.all("from").Value = Range("A2").Value objIE.Document.all("to").Value = Range("B2").Value objIE.Document.all.tags("input").Item(17).Click End Sub -------------------------------------------------------------------

質問者が選んだベストアンサー

  • ベストアンサー
  • Yosha
  • ベストアンサー率59% (172/287)
回答No.5

No.3 です。 訂正します。  路線検索 Selection.Row ⇒ 路線検索 Cel.Row

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.4

質問のように200個ボタンを配置して、どれかのボタンを押せば、その行のデータで実行するように、Range(ba).Valueとかにはできて、標準モジュールのコードは短くできる。 しかし、 各ボタンについてクリックイベントを書かなければならなくて、結局同じようなコードを書く羽目になって、質問のようにするのは面白くない。 他の回答者のように1つのボタンで処理するようにした方がいいと思う。 クリックイベントは下記。 Private Sub CommandButton1_Click() r = Selection.Row 路線検索 End Sub 標準モジュールは、 モジュールで宣言 Public r As Long from,toを下記に直す。 objIE.Document.all("from").Value = Cells(r, 1).Value objIE.Document.all("to").Value = Cells(r, 2).Value これで、どこかの行を選択して、ボタンをクリックすればその行のデータを処理する。

全文を見る
すると、全ての回答が全文表示されます。
  • Yosha
  • ベストアンサー率59% (172/287)
回答No.3

>同じような使い方をしている方で、便利にしようする方法などありましたら 私個人の好みでよく使う方法です。 目的のシートのみに有効にしたいときに使います。 エクセル自体に、新しいコマンドボタンを張り付けると、いろいろ不都合なことがあります。 具体的には、目的のシートの最上段=1行目の高さを少し高くして、そこにコマンドボタンを配置し、2行目で「ウィンドウ枠の固定」をします。 これで以下の行をスクロールしてもボタンの位置は動きません。  コマンドボタン(オブジェクト)名は “決定” など適当な名前を付けます。  コードの一例 当該シートのオブジェクトに   Private Sub 決定_Click()     Dim Cel As Range     For Each Cel In Selection       路線検索 Selection.Row     Next   End Sub とを書き込む。  標準モジュールのコードを少し書き換えます。   Sub 路線検索(nRow As Long) として、選択した行番号を受けます。   Range("A2").Value ⇒ Range("A" & nRow).Value   Range("B2").Value ⇒ Range("B" & nRow).Value とします。 これで、シートを目的の行まで、スクロールし1行または複数行を選択する(行のみ必要ですので、列はどこでも構いません)し、“決定ボタン” を押せばよい。

全文を見る
すると、全ての回答が全文表示されます。
  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.2

目的地と出発地をリスト表示にして常に2行目だけで実行するようにしたら問題ないのでは? 目的地と出発地の組み合わせが毎回固定ならばA列とB列を一つにする 例 A2セルを【府中⇒桜上水】として B2セルに=LEFT(A2,FIND("⇒",A2)-1) C2セルに=MID(A2,FIND("⇒",A2)+1,100) としてマクロのセル指定をそれぞれ Range("B2")と Range("C2")にする。 と言うか路線検索なら毎回、目的地・出発地を入力する方が実用的なのでは?

全文を見る
すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

例えば。 ・ボタンを1つにする ・検索したい行のA列をアクティブ(選択)にしておく ・ボタンを押す >objIE.Document.all("from").Value = Range("A2").Value >objIE.Document.all("to").Value = Range("B2").Value objIE.Document.all("from").Value = ActiveCell.Value objIE.Document.all("to").Value = ActiveCell.Offset(,1).Value とか? ⇒200行だとアクティブにしてからマクロを実行した方が楽かな? ボタンだとスクロールさせる分だけ大変かも。

hikomaro
質問者

お礼

おそくなりました! とても参考になりました。 ありがとうございます☆

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルでのVBA

    エクセルでVBAを使ってIEで指定のURLを開いて、VBAで指定したWEBフォームにエクセルで指定したセルの値を入力したいのですが、下記のコードを入れるとエラーが出てしまいます。   A1:1-1 or 1-2 or 1-3 B1:月曜日 C1:火曜日 D1:水曜日 上のA1~D1まで入力した上でコマンドボタンをクリックすると、自動的に行うようにしたいです。 Private Sub CommandButton1_Click() Dim objie As Object Set objie = CreateObject("InternetExplorer.application") objie.Visible = True objie.Navigate "http://●●●●/form.html" Dim kubun As String kubun = range("A1") Select Case kubun Case "1-1" call ma1_1 Case "1-2" call ma1_2 Case "1-3" call ma1_3 End select Set objie = Nothing End sub Sub ma1_1() objie.Document.all.form1_1.Value = Range("B1") End Sub Sub ma1_2() objie.Document.all.form1_1.Value = Range("B1") objie.Document.all.form1_2.Value = Range("C1") End Sub Sub ma1_3() objie.Document.all.form1_1.Value = Range("B1") objie.Document.all.form1_2.Value = Range("C1") objie.Document.all.form1_3.Value = Range("D1") End Sub これで実行を押すと、objie 変数が定義されていません。と出てしまいます。このobjieを有効にするにはどうしたよいのでしょうか? わかる方いましたらご教授願います。 よろしくお願いします。

  • エクセルのVBAで最終行までループする方法

    エクセルのVBAで最終行までループする方法を教えてください。 下記がコードになります。 Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate Range("A1").Value While objIE.ReadyState <> 4 Or objIE.Busy = True DoEvents Wend Range("B1").value = objIE.Document.all("zoom1").href

  • IEの制御のマクロをつくっていますが

    ログインと作業実行を別々のマクロにしたいのですが マクロでログインを省略して次の画面にもっていきたいので objIE.navigate "https://........... とやると、セキュリティの関係だと思いますが画面がはじかれてしまいます。 ですのでいまはひとつの作業をするのにその都度ログインのマクロからになってしまいます。 何かいい方法がございましたらご教授ください。 Sub ログイン() Dim objIE As InternetExplorer Dim strUserName, strPassword As String strUserName = Range("AA1").Value strPassword = Range("AA2").Value Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.navigate "https://mobile.e..............’ログイン画面 IE_Complete objIE '表示終わるまで待つ objIE.Document.All.req_userId.Value = strUserName 'ユーザーネーム objIE.Document.All.req_password.Value = strPassword 'パスワード objIE.Document.All.LoginSubmit.Click 'クリック IE_Complete objIE ここまでログイン 上記を省略して以下からはじめたい Sub 作業実行() objIE.navigate "https://...........

  • VBA .document.all.の後はセルでも

    先質問 http://okwave.jp/qa/q7750791.html では .document.all.number01.Value = Range("A1").Value .document.all.number02.Value = Range("A2").Value .document.all.number03.Value = Range("A3").Value .document.all.number04.Value = Range("A4").Value .document.all.number05.Value = Range("A5").Value とHPのソースから .document.all.●.Valueの●の部分を調べ、それがnumber01~number05だという事がわかったのですが、 実際やろうとしたHPのnumber01~number05にあたる部分は単純なものではなく、「文字列+変数」でした。 よってその「文字列+変数」をエクセル上のD列のセルに作りました。 .document.all.D1.Value = Range("A1").Value .document.all.D2.Value = Range("A2").Value .document.all.D3.Value = Range("A3").Value .document.all.D4.Value = Range("A4").Value .document.all.D5.Value = Range("A5").Value でも駄目で .document.all.("D1").Value = Range("A1").Value .document.all.("D2").Value = Range("A2").Value .document.all.("D3").Value = Range("A3").Value .document.all.("D4").Value = Range("A4").Value .document.all.("D5").Value = Range("A5").Value でも駄目でした。 書き方が間違っているのか、そもそも.document.all.の後にはセルは利用できませんか? 「文字列+変数」というか「「文字列+個別の番号」です。

  • VBAで教えてgooに自動ログインしたい

    Sub 教えてgoo() Dim objIE As Object Const READYSTATE_COMPLETE As Long = 4 Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "https://login.mail.goo.ne.jp/id/authn/LoginStart?Site=oshiete.goo.ne.jp&Success=http%3A%2F%2Foshiete.goo.ne.jp%2F" Do While objIE.Busy = True DoEvents Loop Do Until objIE.ReadyState = READYSTATE_COMPLETE Loop objIE.document.all.all("uname").Value = "gooID" objIE.document.all.all("pass").Value = "gooPW" Do While objIE.Busy = True DoEvents Loop Do Until objIE.ReadyState = READYSTATE_COMPLETE Loop objIE.document.all("ログイン").Click End Sub --------------------------------------------------------- を実行してみても、 objIE.document.all.all("uname").Value = "gooID" objIE.document.all.all("pass").Value = "gooPW" objIE.document.all("ログイン").Click の部分がエラーになってしまいます。 教えてgooは、VBAでログインできないように規制されてるのでしょうか?

  • VBA IE操作、指定したボタンのクリック

    具体的には、ヤマト運輸のビジネスメンバーズのHPです。 https://bmypage.kuronekoyamato.co.jp/bmypage/servlet/jp.co.kuronekoyamato.wur.hmp.servlet.user.HMPLGI0010JspServlet 以下のコードで、それぞれのボックス(IDやパスワードなど)を入れることができました。 D3~D6セルに IDなどログインに必要な情報をいれてあります。 しかし、その下部分にある ログイン のボタンをクリックする方法が見つからず困っています。 Sub ボタン1_Click() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate Range("D3").Value objIE.Visible = True Do Until objIE.Busy = False DoEvents Loop objIE.Document.frm.CSTMR_CD.Value = Left(Range("D4").Value, 12) objIE.Document.frm.CSTMR_CLS_CD.Value = Right(Range("D4").Value, 3) objIE.Document.frm.LOGIN_USER_ID.Value = Range("D5").Value objIE.Document.frm.CSTMR_PSWD.Value = Range("D6").Value objIE.Document.frm.???.Click End Sub ログインのボタンに特に名前の指定がないようなのですが、この場合に ボタンをクリックする方法をご存知の方、ご指導ください。

  • VBAでサイトのsubmitボタンをクリックしたい

    とあるサイトに自動ログインするvbaを作っています。 (三流君を参考にしています) Sub ログイン() Set ObjIE = CreateObject("InternetExplorer.application") ObjIE.Visible = True '************************************************** ObjIE.navigate "https://www" Do While ObjIE.Busy = True '表示させるまで待つ DoEvents Loop Application.Wait (Now + TimeValue("00:00:03")) ObjIE.Document.all.UserId.Value = "ID" ObjIE.Document.all.submit_l貸出照会.Click ’ここでエラーになる End Sub 上記のようなコードを書いているのですが 該当サイトのソースを読み取り、 「INPUT TYPE="text" NAME="userid" VALUE=""」 の部分は ObjIE.Document.all.UserId.Value = "ID" で出来たのですが 「<INPUT TYPE="submit" VALUE="貸出照会">」 の部分をクリックしてログインしたいのですが ObjIE.Document.all.貸出照会.Click だとエラーになってしまいます。 ObjIE.Document.Forms(0).item("貸出照会").Click もダメでした。 ご教授よろしくお願い致します。 (エクセル2003)

  • VBAでJAVAをコントロール

    javascriptのリンクが、<a href="javascript:void(0);">なんたらかんたら</a> であれば記載のソースが通じるのですが、 【今回の問題】 【html部分】 onclick="javascript:updateDisp();return false;" alt="なんたらかんたら"><input type="hidden" name="allupdate" value="なんたらかんたら"> 【javascriptの部分】 function updateDisp(){ update_flg = window.confirm("なんたらかんたら"); if(update_flg == true){ document.updateForm.submit(); } else{ alert("キャンセルしました。"); } とやられた途端に全く通じなくなりました。 どのように回避したらよいでしょうか。 【今回のではなく前回の(javascript:void(0);)成功分】 Private Sub CommandButton99_Click() Set objIE = CreateObject("InternetExplorer.application") objIE.Visible = True objIE.Navigate "http://xxxx/entry" Do While objIE.Busy = True DoEvents Loop Application.Wait (Now + TimeValue("00:00:03")) objIE.Document.all("ShopShopId").Value = Range("C8") objIE.Document.all("ShopPassword").Value = Range("C9") objIE.Document.forms(0).submit Application.Wait (Now + TimeValue("00:00:05")) For Each Obj In objIE.Document.getElementsByTagName("a") If Obj.innerText = "なんたらかんたら" Then Obj.Click Exit For End If Debug.Print objIE.LocationURL objIE.Navigate "xxxx/entry/entry_tops/all_update?prm=xxxxxxxxxxxxxxxxxxxxxxx" For i = 0 To objIE.Document.Links.Length - 1 If objIE.Document.Links(i).href = "javascript:void(0);" Then Application.Wait (Now + TimeValue("00:00:05")) objIE.Document.Links(i).Click Application.Wait (Now + TimeValue("00:00:05")) Exit For MsgBox "ループ抜け" End If Exit Sub Next Next objIE.Quit End Sub 上記は【今回の問題】に通じません。 'objIE.Navigate.Document.updateForm.fireEvent ("なんたらかんたら") 'objIE.Document.Script.updateDisp "javascript:document.updateForm.submit(true);" など試行錯誤しておりますが、javascriptのポップアップが回避できません。 どなたか何とかご教授お願いいたします。

  • 乗換案内 VBAで操作したい

    ジョルダンの乗換案内を、VBAで操作したいのですが、詰んでしまいました・・・ Sub 乗換案内() Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.jorudan.co.jp/" Const READYSTATE_COMPLETE As Long = 4 Do While objIE.Busy = True DoEvents Loop Do Until objIE.ReadyState = READYSTATE_COMPLETE Loop objIE.document.all("eki1").Value = "東京" objIE.document.all("eki2").Value = "品川" objIE.document.Forms(0).submit Set objIE = Nothing End Sub を実行してVBAでIE操作をしたいのですが、うまくできません。 【質問1】 objIE.document.Forms(0).submit はエラーにならないのですが、検索ボタンがクリックされず(検索結果は表示されず) 詳細検索画面 http://www.jorudan.co.jp/norikae/cgi/nori.cgi?rf=top&eok1=&eok2=&pg=0&eki1=%E6%9D%B1%E4%BA%AC&eki2=%E5%93%81%E5%B7%9D&Dym=201207&Ddd=24&Dhh=14&Dmn1=3&Dmn2=2&Cway=0&Csg=1 に進んでしまいます。 objIE.document.Links(0).Clickにしてもダメでした。 【質問2】 出発地、到着地の指定はできたのですが日時の指定ができません。 2012/08/01 8時00分をプルダウンに入れたいのですが、 objIE.document.allをどのようにすればいいのでしょうか? ご教授よろしくお願いします。 ソースを見ると、 <script type="text/javascript">select_day();select_time();</script> となっていて、nameがありません。

  • エクセルのマクロで結合セルに値を貼り付けたい

    お世話になります。 マクロ初心者で本やネットで色々調べたのですが分からないため 教えていただけますと幸いです。 Sheet1にはB1:B3、B4:B6…と3行縦に結合された表があり、 Sheet2のA列には単独セルに商品の名前が入っております。 膨大な量のため、Sheet2のA列に入っている情報を Sheet1の縦に結合されたセルに一つずつマクロで転記したいと 考えております。 Range("B1:B100").Value = Range("A1:A100").Value のように記載すると、2個飛ばしで入力されてしまうので、 結合されている分飛ばされないで一つずつ転記したいのですが どのようにしたら良いでしょうか。

専門家に質問してみよう