• ベストアンサー

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

Yoshaの回答

  • 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行または複数行を選択する(行のみ必要ですので、列はどこでも構いません)し、“決定ボタン” を押せばよい。

関連する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個飛ばしで入力されてしまうので、 結合されている分飛ばされないで一つずつ転記したいのですが どのようにしたら良いでしょうか。