自分の使っているエクセルシートにはA列~F列まで上から下まで1000行程度使って色々なデータがあります。
この中でF列は上から下まで
【 】 :::【 】
という文章が載っています。F列に1行ずつ登録しているのですが下記のサイト
http://www.kosho.or.jp/public/book/detailsearch.doで検索後
からエクセルに移行する場合に「Alt+Tab」キーで切り替えるのですが通常、切り替えると
カーソルはA列にあるのですがこれを切り替えると同時にカーソルがF列にあるように
する事はできるでしょうか。
ちなみにサイトはこれしか利用しませんが何度も切り替えます。
エクセルは2003です。
入力フォームを使う方法はいかがでしょうか。
F1セルがF列の項目見出しが入っているものとして、
F1からF1000(一番下の行)までを選択した状態で、
メニューバーから『データ』『フォーム』をクリックします。
確認メッセージが表示されるかもしれませんが、F1が項目見出しになっていれば、『OK』をクリックします。
これで、F2から順に下のセルにカーソルが移動しながら入力されるように入力フォームが表示されます。
少し(イヤだいぶかも)的から外れているかもしれませんが、サンプル作ってみました。
今回作成したサンプルはOS:Windows XP IE8 Excel2003でテストしました。
http://d.hatena.ne.jp/ken3memo/files/Book1102.xls
[file:ken3memo:Book1102.xls]
です。(裸の.xlsなのでダウンロード時 警告出るので、そのまま開かないで保存してから使ってください)
動かしながら、下の解説を見てください。※百聞は一見に...
↑↓が完成するまでの下書きは http://d.hatena.ne.jp/ken3memo/20091102/1257102258 を見てください。
シートに下記のコードを貼り付けます。
貼り付け手順:シートのイベントにコードを書きたいので、
シートの名前の上にカーソルを
合わせてから右クリック、
コードの表示を選択する
Option Explicit 'ダブルクリックのイベント Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Column = 1 Then 'A列の場合だけ、処理する。 Call ie_test(Target.Value) 'クリックされた場所の値をIEに渡す。 Cells(Target.Row, 6).Select 'F列の選択 End If End Sub '本のタイトルを受け取り、IEを起動して、書名にセットします。 Private Sub ie_test(bookname As String) '起動済みのIEを探す Dim objShell As Object 'Shell.ApplicationのWindowから探したいので Dim objIE As Object 'IEを入れる箱(捕まえてコントロールしたい) Dim n As Integer 'カウンターです。 'これで、エクスプローラーのウインドウを取得する Set objShell = CreateObject("Shell.Application") Set objIE = Nothing '初期化する(フラグ代わりも兼ねて、後でIs Nothingでチェックしたいので) '後ろから探す(素直に前から探してよ(笑)) '.Windowsでエクスプローラーとインターネットエクスプローラー(FullNameがIEXPLORE.EXE)にさわれる For n = objShell.Windows.Count To 1 Step -1 'MAXから-1ひいてく感じ '.FullNameで普通のファイルエクスプローラーとIE(インターネットエクスプローラー)を区別する If Right(UCase(objShell.Windows(n - 1).FullName), 12) = "IEXPLORE.EXE" Then Set objIE = objShell.Windows(n - 1) 'n番目のウインドウ(FullNameがIEXPLORE.EXE)を代入 Exit For '見つけたので、↑代入後、強制的にループを抜ける End If Next Set objShell = Nothing 'もし起動済みのIEが見つからなければ、新たに起動する If objIE Is Nothing Then '上で見つけられたか? Set objIE = CreateObject("InternetExplorer.Application") 'オブジェクトを作成します。 End If objIE.Visible = True '可視、Trueで見えるようにします。 '処理したいページを表示します。 objIE.Navigate "http://www.kosho.or.jp/public/book/detailsearch.do" '.Navigate メソッドで表示する。 '↑上記のページの表示が完了するまで待ちます。 While objIE.ReadyState <> 4 Or objIE.Busy = True '.ReadyState <> 4の間まわる。 DoEvents '重いので嫌いな人居るけど。 Wend 'ページが表示されたので、表示された文章に対して、処理を行います。 objIE.Document.all("p_shomei").Value = bookname 'A列の値を 書名にセットする。 '検索開始を押す 'リンクのアンカーオブジェクトをクリックする Dim objFDOC As Object 'ドキュメントを保存する Set objFDOC = objIE.Document '代入別に代入しなくてもいいけど。 'リンク情報からオブジェクトを探し.Clickする For n = 0 To objFDOC.Links.Length - 1 'リンク数分まわす Debug.Print objFDOC.Links(n).href 'デバックで表示する 'リンク先のAタグの中(.InnerHTML)をチェックする(検索開始を探す) If InStr(objFDOC.Links(n).innerHTML, "検索開始") > 0 Then objFDOC.Links(n).Click '.Clickでクリックしてみた Exit For '見つかったので強制的にループを抜ける End If Next n 'データセット後にIEを前面にする方法がわからなかったので、とりあえず、Excelを最小化してごまかす Application.WindowState = xlMinimized 'excelの最小化 End Sub
テストの動画 http://www.youtube.com/watch?v=HNO4hq-KYas
今回作成したサンプルはOS:Windows XP IE8 Excel2003でテストしました。
http://d.hatena.ne.jp/ken3memo/files/Book1102.xls
[file:ken3memo:Book1102.xls]
です。(裸の.xlsなのでダウンロード時 警告出るので、そのまま開かないで保存してから使ってください)
※動作を確認してみてください。
完成するまでの下書きは http://d.hatena.ne.jp/ken3memo/20091102/1257102258 を見てください。
コメント(3件)
(動作1)A列に書籍名や著者名などを入れる。
(動作2)ブラウザに切り替えて検索サイトで検索を行い。コピー。
(動作3)Excelに戻ってくるとA列にセルがあるのだけど、ペーストしたいのはF列なので、
Excelに戻った時点で、F列がアクティブになっていて欲しい。
以上は、私の勝手な推測に過ぎませんが、
どうしてA列にカーソルが存在するのかを説明しないと判らないという輩も多いと思うし、
昨日質問なされた http://q.hatena.ne.jp/1256761276 のように、
そこまで考えずに適当に答える輩も多いので、面倒ではありますが、
予防策として、適宜説明しておく事をお勧めします。
なお、
本件に関しては数分前に質問された http://q.hatena.ne.jp/1256929671 のほうで、
一度に行う方法のほうがよろしいです。
Excelに戻ってくるだけで無条件にF列がアクティブになるような仕様だと、
他の操作を行いたくなった時に面倒になりますし、
そもそもマクロを使うのであればF列をアクティブに切り替えずとも、
F列の内容を書き換える事が可能になります。
以上、質問に対する直接的回答ではありませんので、コメント欄とします。
(F1 でも F2 でも良いとゆう事でしょうか?)
それとも F列の入力されたデータの最後の行の下が良いとかですか?
現在、色々試行錯誤しておりますので今しばらくお待ちくださいませ。
ちなみに後者の方のご質問ですが
例えばA5できりかえればF5にカーソルがくるようにしたいと考えております。