- ベストアンサー
エクセルVBAシートの選択方法
- Windows XPでエクセル2000を使用している場合、特定のセルの値をもとにシートを選択するVBAマクロを作成したいです。
- 最初のマクロでは、指定したセルに入力された値をもとに該当するシートを選択することができます。
- しかし、2番目のマクロではシートの選択が機能せず、エラーが発生してしまいます。解決策を教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
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
その他の回答 (4)
- mu2011
- ベストアンサー率38% (1910/4994)
>Sheets(b).Select ⇒エクセル2007でしか検証していませんので何とも云えませんが、Sheets(b)がactiveでないからだと思う。 Sheets(b).Activateでお試しください。
お礼
ご回答有難う御座います!! 解決致しました。後ほどこちらでも 試してみます。
- Wendy02
- ベストアンサー率57% (3570/6232)
基本的なことですが、モジュールの親オブジェクトは何かということを理解していませんね。仮に、シートモジュールで動かすとすれば、 >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
お礼
ご回答有難う御座います!! <<基本的なことですが、モジュールの親オブジェクトは <<何かということを理解していませんね。 はい。全く理解してません。 上記の命令分は、ほぼコピペで作ってます。 <<そのコードはB11からB683のセルにシート名があり、 <<そのシート名のセルをクリックしたらそのシート <<名のシートを選択するという意味 この意味ではどのように記載するのが簡潔でしょうか。 (例えばAというシートのB11からB683のセルクリックで他のシートを選ぶ場合) 解りやすくお助け下さい。
補足
こちらの方法もやってみましたが解決しました!! Private Sub Worksheet_SelectionChangeについて 理解がないという事ですね。 Application.Goto を使うのもポイントなんでしょうか。 勉強になります!!
- merlionXX
- ベストアンサー率48% (1930/4007)
お書きになったコードでは Sheets(b).Selectの前に、 b = Range("C2).value の部分でエラーになると思います。 ("C2”)が("C2).になってますので。 それはともかく そのコードはB11からB683のセルにシート名があり、そのシート名のセルをクリックしたらそのシート名のシートを選択するという意味のですが、それが正しいですか? そうだとしたらB11からB683のセルをクリックしたところ、そのセルに書かれた名前のシートが存在しなかったのではないでしょうか?
お礼
ご回答有難う御座います!! <<そのコードはB11からB683のセルにシート名があり、 <<そのシート名のセルをクリックしたらそのシート <<名のシートを選択するという意味のですが、それが正しいですか? その通りです!! <名前のシートが存在しなかったのではないでしょうか? 私もそう思ったのですが、同様の文字列で最初に挙げた例だと選択して IF以下の文章を入れると選択しません。 助けて下さい。
- GOCHISOUda
- ベストアンサー率34% (50/144)
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の値がなしになっているのでは?
お礼
ご回答有難う御座います!! C2に値はあります。 最初に挙げたセルと同様のものを記載しても エラーが出ます。
お礼
たびたびのご回答有難う御座います。 上記にて解決致しました。 助かりました!!