仕事を頑張る人のおしりトラブル対策

windows XP でエクセル2000を使っています。


Sub aaa()

Sheets("Sheet1").Select
Dim a As String
a = Cells(2, 4)
Sheets(a).Select
Range("A1").Select
End Sub

というマクロだと セルに入っている値のシート名を探してくれます。

ですが

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 = Range("C2).value (←ここをcellsにしてもダメ)
Sheets(b).Select
Range("A1").Select

End Sub


これだとsheets(b)を選びません。Sheets(b).Selectのところが黄色くなります。
何処が間違えているのでしょうか。

全くの素人ですが、仕事で必要に迫られています。
わかりやすく回答・解説くれると助かります。

このQ&Aに関連する最新のQ&A

A 回答 (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
    • good
    • 0
この回答へのお礼

たびたびのご回答有難う御座います。

上記にて解決致しました。
助かりました!!

お礼日時:2010/12/20 13:44

>Sheets(b).Select


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

ご回答有難う御座います!!

解決致しました。後ほどこちらでも
試してみます。

お礼日時:2010/12/20 13:45

基本的なことですが、モジュールの親オブジェクトは何かということを理解していませんね。

仮に、シートモジュールで動かすとすれば、

>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

この回答への補足

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

補足日時:2010/12/20 13:59
    • good
    • 0
この回答へのお礼

ご回答有難う御座います!!

<<基本的なことですが、モジュールの親オブジェクトは
<<何かということを理解していませんね。

はい。全く理解してません。
上記の命令分は、ほぼコピペで作ってます。

<<そのコードはB11からB683のセルにシート名があり、
<<そのシート名のセルをクリックしたらそのシート
<<名のシートを選択するという意味

この意味ではどのように記載するのが簡潔でしょうか。
(例えばAというシートのB11からB683のセルクリックで他のシートを選ぶ場合)
解りやすくお助け下さい。

お礼日時:2010/12/20 10:00

お書きになったコードでは


Sheets(b).Selectの前に、
b = Range("C2).value
の部分でエラーになると思います。
("C2”)が("C2).になってますので。

それはともかく
そのコードはB11からB683のセルにシート名があり、そのシート名のセルをクリックしたらそのシート名のシートを選択するという意味のですが、それが正しいですか?

そうだとしたらB11からB683のセルをクリックしたところ、そのセルに書かれた名前のシートが存在しなかったのではないでしょうか?
    • good
    • 0
この回答へのお礼

ご回答有難う御座います!!

<<そのコードはB11からB683のセルにシート名があり、
<<そのシート名のセルをクリックしたらそのシート
<<名のシートを選択するという意味のですが、それが正しいですか?

その通りです!!
<名前のシートが存在しなかったのではないでしょうか?
私もそう思ったのですが、同様の文字列で最初に挙げた例だと選択して
IF以下の文章を入れると選択しません。
助けて下さい。

お礼日時:2010/12/20 09:44

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の値がなしになっているのでは?
    • good
    • 0
この回答へのお礼

ご回答有難う御座います!!

C2に値はあります。
最初に挙げたセルと同様のものを記載しても
エラーが出ます。

お礼日時:2010/12/20 09:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング