ママのスキンケアのお悩みにおすすめアイテム

VBAでシートAのセルが選択された時シートBにある同じ値の場所に移動させたいと思い、
Microsoft Excel ObjectsのSheet1(A)のところに下記のようなコードを書いているのですが、
実行時エラー '1004':
RangeクラスのSelectメソッドが失敗しました。
と出てしまいます。
仮に、
Set rg = Workbooks("一覧.xlsm").Worksheets("B").Cells.Find(what:=Id)

Set rg = Workbooks("一覧.xlsm").Worksheets("A").Cells.Find(what:="123")
とすると、ちゃんと123のところに移動します。
シートをまたいで移動することが出来ていないように思えるのですがどうしていいか分かりません。
どうすればいいか、ご教示お願い致します。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Id As String
Dim rg As Range
With Target
If colmus = 8 And .Row >= 5 And .Row <= Workbooks("一覧.xlsm").Worksheets("A").Cells(Rows.count, "H").End(xlUp).Row Then
Id = Target.Value
End If
Set rg = Workbooks("一覧.xlsm").Worksheets("B").Cells.Find(what:=Id)
If rg Is Nothing Then
MsgBox "見つかりませんでした。"
Else
rg.Select
End If
End With
End Sub

質問者からの補足コメント

  • うーん・・・

    先ほどお礼の中でAJ1のセルが選択されるといったのですが、
    AJ1のセルはシートBの1行目に記述している「データの見出し」が終わったセルの1つ右隣りのセルです。

    No.3の回答に寄せられた補足コメントです。 補足日時:2020/09/20 13:54
  • うーん・・・

    13:54の補足への補足です

    Id = Target.Value
    の次の行で、
    Msbbox(Id)

    Debug,Print Id
    としてやっても何も表示されない(値がない)
    から1行目の最初の空欄のセルに飛んでるようです。

      補足日時:2020/09/20 14:14
  • HAPPY

    ママチャリ様、tom04様ありがとうございました。
    無事、正常動作するようになりました。

      補足日時:2020/09/20 14:40
  • HAPPY

    ママチャリ様、tom04様ありがとうございました。
    無事、正常動作するようになりました。

      補足日時:2020/09/20 14:40

A 回答 (5件)

シートを跨いで移動する場合、Application.Goto メソッドを使えば良いと思います。


こんな感じです。

Application.Goto Reference:=rg, scroll:=True


「what:="123"」にしたら、ちゃんと移動したとのことですが、「実行時エラー '1004' RangeクラスのSelectメソッドが失敗」とは無関係だと思いますよ!!
それから、SelectionChangeイベントプロシジャに書いちゃって大丈夫ですか?とっても使いにくいと思うのですが・・・。ダブルクリックや右クリックにした方が使いやすいと思いますよ。実際に動くようになって、使ってみれば分かると思いますが・・・。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございます。
rg.Select

Application.Goto Reference:=rg, scroll:=True
にしたところ、シートBに移動することが出来ました。
しかしシートAのHの列にあるどのIdを選択してもAJ1のセルに飛びます。
what:="123"としてやるとシートBのIdが123のセルに飛ぶのですがなぜだかお分かりになりますか??

>>「what:="123"」にしたら、ちゃんと移動したとのことですが、「実行時エラー '1004' RangeクラスのSelectメソッドが失敗」とは無関係だと思いますよ!!

すみません、同じシート内だったらちゃんと移動してくれるかなと試したくてやってみました。

>>ダブルクリックや右クリックにした方が使いやすいと思いますよ。

ありがとうございます、ダブルクリックで移動するように修正します。

お礼日時:2020/09/20 13:49

If colmus = 8



colmus って何ですか?
.Column が正しいような気がします。

Option Explicitを指定していないから、単純なミスに気が付かないんだと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
おかげさまで正常に動作するようになりました。

すみません、Option Explicitというものを知りませんでした。
さっそく設定しました。

お礼日時:2020/09/20 14:37

No.1・2です。



>Workbooks("一覧.xlsm").Worksheets("B").Range(ads).Select

With Workbooks("一覧.xlsm")
.Activate
.Worksheets("B").Activate
.Worksheets("B").Range(ads).Select
End With

だとどなりますか?

※ こちらも未検証なので、エラーの場合はごめんなさい。

※ No.3がおっしゃっているように
Changeイベントよりダブルクリックの方が良いと思います。m(_ _)m
    • good
    • 0
この回答へのお礼

同じく
コンパイルエラー:
オブジェクトが必要です。
となりました。

Set ads = rg.address
のaddressの「a」が小文字のままなのが気になります。
普段は自動で大文字になるのですが・・。

>>Changeイベントよりダブルクリックの方が良いと思います。
ありがとうございます。
修正しました。

お礼日時:2020/09/20 13:58

No.1です。



実は投稿後気になっていたのですが、
>rg
とは単にセルの値になりますよね。

一つ変数を追加(文字列型の変数)し
Set 変数=rg.Address
とセル番地を取得後

>Worksheets("B")..Range(変数).Select
とする方が確実のような気がします。

※ 変数は適当にご自身で決めてください。m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございます。
下記のように修正してみたのですが、
コンパイルエラー:
オブジェクトが必要です。
となりました。
ご教示頂いたとおりにに修正出来ていませんか?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Id As String
Dim rg As Range
Dim ads as String
With Target
If colmus = 8 And .Row >= 5 And .Row <= Workbooks("一覧.xlsm").Worksheets("A").Cells(Rows.count, "H").End(xlUp).Row Then
Id = Target.Value
End If
Set rg = Workbooks("一覧.xlsm").Worksheets("B").Cells.Find(what:=Id)
Set ads = rg.Address
If rg Is Nothing Then
MsgBox "見つかりませんでした。"
Else
Workbooks("一覧.xlsm").Worksheets("B").Range(ads).Select
End If
End With
End Sub

お礼日時:2020/09/20 13:39

こんにちは!



別シートのあるセルを選択したい!というコトですね。
単に別シートを「Select」しただけではお示しのようなエラーになると思います。
Selectする前にそのシートをアクティブにする必要があるはずです。

>rg.Select
の前に
>Worksheets("B").Activate
を追加してみてください。

※ 未検証なのでお望みどおりにならなかったらごめんなさい。m(_ _)m
    • good
    • 0
この回答へのお礼

うーん・・・

ありがとうございます。
Worksheets("B").Activate
を追加してみたのですが、
実行時エラー'438':
オブジェクトは、このプロパティまたはメソッドをサポートしていません。
となります。
Workbooks("一覧.xlsm").Worksheets("B").Active

sheet(2).Active
としてみても同じ実行時エラーが表示されてしまいます。

お礼日時:2020/09/20 13:17

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング