• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル VBA シートの選択 )

エクセルVBAシートの選択方法

このQ&Aのポイント
  • Windows XPでエクセル2000を使用している場合、特定のセルの値をもとにシートを選択するVBAマクロを作成したいです。
  • 最初のマクロでは、指定したセルに入力された値をもとに該当するシートを選択することができます。
  • しかし、2番目のマクロではシートの選択が機能せず、エラーが発生してしまいます。解決策を教えてください。

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

No2 merlionXXです。 そのコードはどのシートモジュールに書きましたか? こう書いたらどうなりますか? Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Intersect(Target, Range("B11:B683")) Is Nothing Then Exit Sub Worksheets("Sheet1").Range("C2").Value = Target.Value Dim b As String b = Worksheets("Sheet1").Range("C2").Value Sheets(b).Select Sheets(b).Range("A1").Select End Sub

mogurayama
質問者

お礼

たびたびのご回答有難う御座います。 上記にて解決致しました。 助かりました!!

その他の回答 (4)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.5

>Sheets(b).Select  ⇒エクセル2007でしか検証していませんので何とも云えませんが、Sheets(b)がactiveでないからだと思う。   Sheets(b).Activateでお試しください。

mogurayama
質問者

お礼

ご回答有難う御座います!! 解決致しました。後ほどこちらでも 試してみます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

基本的なことですが、モジュールの親オブジェクトは何かということを理解していませんね。仮に、シートモジュールで動かすとすれば、 >Sheets(b).Select >Range("A1").Select シートモジュールでは、ここで親オブジェクトに相違が出てしまい、エラーが出ます。 どこのシートモジュールか分かりませんが、このようになります。 しかし、なぜ、クリック範囲が、"B11:B683" となっているのか、想像の範囲でしかありません。また、Sheetsとするのは、Cellのないシートもあるのですから、少し乱暴なコードですが、そのままにします。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)  Dim ShName As String  If Intersect(Target, Range("B11:B683")) Is Nothing Then Exit Sub  If Target.Count > 1 Then Exit Sub  If Target.Value = "" Then Exit Sub  ShName = Target.Value  On Error Resume Next  Application.Goto Sheets(ShName).Range("A1")  If Err.Number = 0 Then  'エラーがなければ、C2に書きこむ   Worksheets("Sheet1").Range("C2").Value = Target.Value   End If  On Error GoTo 0 End Sub

mogurayama
質問者

お礼

ご回答有難う御座います!! <<基本的なことですが、モジュールの親オブジェクトは <<何かということを理解していませんね。 はい。全く理解してません。 上記の命令分は、ほぼコピペで作ってます。 <<そのコードはB11からB683のセルにシート名があり、 <<そのシート名のセルをクリックしたらそのシート <<名のシートを選択するという意味 この意味ではどのように記載するのが簡潔でしょうか。 (例えばAというシートのB11からB683のセルクリックで他のシートを選ぶ場合) 解りやすくお助け下さい。

mogurayama
質問者

補足

こちらの方法もやってみましたが解決しました!! Private Sub Worksheet_SelectionChangeについて 理解がないという事ですね。 Application.Goto を使うのもポイントなんでしょうか。 勉強になります!!

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

お書きになったコードでは Sheets(b).Selectの前に、 b = Range("C2).value の部分でエラーになると思います。 ("C2”)が("C2).になってますので。 それはともかく そのコードはB11からB683のセルにシート名があり、そのシート名のセルをクリックしたらそのシート名のシートを選択するという意味のですが、それが正しいですか? そうだとしたらB11からB683のセルをクリックしたところ、そのセルに書かれた名前のシートが存在しなかったのではないでしょうか?

mogurayama
質問者

お礼

ご回答有難う御座います!! <<そのコードはB11からB683のセルにシート名があり、 <<そのシート名のセルをクリックしたらそのシート <<名のシートを選択するという意味のですが、それが正しいですか? その通りです!! <名前のシートが存在しなかったのではないでしょうか? 私もそう思ったのですが、同様の文字列で最初に挙げた例だと選択して IF以下の文章を入れると選択しません。 助けて下さい。

回答No.1

If Intersect(Target, Range("B11:b683")) Is Nothing Then Exit Sub Worksheets("Sheet1").Range("C2").Value = Target.Value がなければ動きますよ。 Worksheets("Sheet1").Range("C2").Value = Target.Value でC2の値がなしになっているのでは?

mogurayama
質問者

お礼

ご回答有難う御座います!! C2に値はあります。 最初に挙げたセルと同様のものを記載しても エラーが出ます。

関連するQ&A