• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:別ブックのセルをSelectionで操作する方法)

別ブックのセルをSelectionで操作する方法

このQ&Aのポイント
  • Excel2010のVBAで別ブックのセルをSelectionやActiveCellで操作する方法について説明します。
  • 具体的なコード例として、MYBOOKに記述したVBAコードを使用して、OTHERBOOKのSHEET4シートの選択されているセルに対してSelectionまたはActiveCellでRowを取得する方法を紹介します。
  • ただし、SelectionやActiveCellではなくOTHERBOOKのSHEET4の選択セルの行番号を取得するためには、適切な記述が必要です。

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

  • ベストアンサー
  • dogs_cats
  • ベストアンサー率38% (278/717)
回答No.3

新規ブックがactiveにならない原因は、Set OTHERBOOK = oApp.Workbooks.AddのoAppのようです。 Set OTHERBOOK = Excel.Workbooks.Addとすると新規ブックがactiveにする事が可能になりました。 Set oApp = CreateObject("Excel.Application") oApp.Visible = True はexcel以外のソフトからexcelを起動させてるのでしょうから、上記方法で走るかは不明です。 私はVBAは独学なので、これ以上の回答は出来ないと思います。 yahoo知恵袋や、VBAのサンプルコード利用しているモーグの掲示板等で質問されると、ご希望の回答が得られるかもしれません。 モーグ掲示板 http://www.moug.net/faq/

yam2012
質問者

お礼

dogs_catsさん CreateObject()は、 Excel以外のソフトからExcelを起動させる時に使うもので、 今回のように、 Excelから新規にExcelブックを作成する場合には、 CreateObject()を使わなくても、 dogs_catsさんのようなコードで十分ということですね。 このことが分かっただけでもよかったです。 ありがとうございました。

その他の回答 (2)

  • dogs_cats
  • ベストアンサー率38% (278/717)
回答No.2

新規ブックオープン及び新規シート挿入と同じsubプロシージャ内で処理させてるのでしょうか? どのような選択をさせてるのか不明なのですが、inputboxを使用してセル選択をユーザーにさせれば行番号取得は出来ますよね。 Dim Target As Range Set Target = Application.InputBox("セルを1つ選択してください", Type:=8) MsgBox Target.Row Set oApp = CreateObject("Excel.Application") oApp.Visible = True Set OTHERBOOK = oApp.Workbooks.Add 上記3行の影響なのか最前面に表示されず、コードを記載したブックに表示されてしまいます。 下記のような新規ブック作成だとinputboxは最前面に表示されます。 Sub test() Dim OTHERBOOK As Excel.Workbook Dim row_no As Integer Dim Target As Range '新規ブック追加時のシート枚数を変更 Application.SheetsInNewWorkbook = 4 '新規ブックを追加し、シート数を確認 Set OTHERBOOK = Workbooks.Add OTHERBOOK.Worksheets(4).Name = "SHEET" Set Target = Application.InputBox("セルを選択してください", Type:=8) MsgBox Target.Row End Sub データを呼び込み 値検索セル又は、最終行をアクティブにさせてからというのでしょうか? OTHERBOOK.Worksheets("SHEET4").Activateの後であれば (1)でも可能のはずですよね。 セル選択が出来ていないから、行番号の返り値が無いという事は考えられませんか? セル選択方法のコードが無いので何とも言えなのですが。 駄文を長々書きましたが、参考になれば幸いです。

yam2012
質問者

補足

dogs_catsさん 回答ありがとうございます。 >新規ブックオープン及び新規シート挿入と同じsubプロシージャ内で処理させてるのでしょうか? 新規ではなく元のブックのプロシージャで処理をしています。 >どのような選択をさせてるのか不明なのですが SQLの実行結果を新規ブックのシートに貼り付けて、 検索を実行して1つのセルを選択しています。 >セル選択が出来ていないから、行番号の返り値が無いという事は考えられませんか? 実際に1つのセルが選択状態になっていることを ステップ実行で確認しながら実行しています。 >OTHERBOOK.Worksheets("SHEET4").Activateの後であれば >(1)でも可能のはずですよね。 可能ですが、新規ブックではなく、 元のブックの方のセルの行が返されます。 >上記3行の影響なのか最前面に表示されず、コードを記載したブックに表示されてしまいます。 >下記のような新規ブック作成だとinputboxは最前面に表示されます。 の部分ですが、 今回の現象と関係しているようで少し気になっています。 以下のような簡単なサンプルを作成して実行してみたのですが 理由はよく分からないのですが、 Selectionの実行結果が違っています。 最初の質問のコード(test1)では駄目なのですが、 dogs_catsさんのコード(test2)では、 私が意図した挙動になっているのです。 なぜこのような違いが起きるのか この理由がよく分からないのですが 何か分かりますでしょうか。 ----------------------------------------------------------- Sub test1() Dim OTHERBOOK As Excel.Workbook Dim row_no As Integer  '自ブックのシートのA1を選択(区別のため)  Worksheets("Sheet1").Cells(1, 1).Select  Set oApp = CreateObject("Excel.Application")  oApp.Visible = True  Set OTHERBOOK = oApp.Workbooks.Add  '他ブックのシートのC3を選択  OTHERBOOK.Worksheets("Sheet1").Cells(3, 3).Select  ThisWorkbook.Activate  row_no = Selection.Row ' 1 (自ブックが対象になっている)  OTHERBOOK.Activate  row_no = Selection.Row ' 1 (自ブックが対象になっている) End Sub ----------------------------------------------------------- Sub test2()  Dim OTHERBOOK As Excel.Workbook  Dim row_no As Integer  '自ブックのシートのA1を選択(区別のため)  Worksheets("Sheet1").Cells(1, 1).Select  Set OTHERBOOK = Workbooks.Add  OTHERBOOK.Activate  '他ブックのシートのC3を選択  OTHERBOOK.Worksheets("Sheet1").Cells(3, 3).Select  ThisWorkbook.Activate  row_no = Selection.Row ' 1 (自ブックが対象になっている)  OTHERBOOK.Activate  row_no = Selection.Row ' 3 (他ブックが対象になっている) End Sub -----------------------------------------------------------

回答No.1

row_no = oApp.Selection.Row 但し、事前に、OTHERBOOKのSHEET4がアクティブになっていないといけません。じゃないと「SHEET4じゃない、今、アクティブになっているシートの、セレクトされた範囲の先頭行」が返って来てしまいます。

yam2012
質問者

お礼

chie65535さん row_no = oApp.Selection.Row でうまくいきました。 新しく作成したブックは、 たとえアクティブにしてあったとしても、 Selectionだけでは駄目なんですね。 oAppは忘れそうなので、以下に 実行結果の違いを書いておきます。 ありがとうございました。 Sub test()  Dim OTHERBOOK As Excel.Workbook  Dim row_no As Integer  '自ブックのシートのA1を選択(区別のため  Worksheets("Sheet1").Cells(1, 1).Select  Set oApp = CreateObject("Excel.Application")  oApp.Visible = True  Set OTHERBOOK = oApp.Workbooks.Add  '他ブックのシートのC3を選択  OTHERBOOK.Worksheets("Sheet1").Cells(3, 3).Select  ThisWorkbook.Activate  row_no = Selection.Row ' 1 (自ブックが対象になっている)  OTHERBOOK.Activate  row_no = Selection.Row ' 1 (自ブックが対象になっている)  ThisWorkbook.Activate  row_no = oApp.Selection.Row ' 3 (他ブックが対象になっている)  OTHERBOOK.Activate  row_no = oApp.Selection.Row ' 3 (他ブックが対象になっている) End Sub

関連するQ&A

専門家に質問してみよう