質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

3124閲覧

別シートセルへの移動

kkk6

総合スコア15

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2019/07/08 11:28

Sheet1のA1に(Sheet2$C1$)、 A2に(Sheet2$C2$)と記述されている場合、セルをダブルクリックすると記述されているセルへ移動できるようにしたいのですが、以下のコードでは 「参照が正しくありません」というエラーが出てしまいます。
どうすればよいでしょうか?

コード

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Dim cd As Variant Dim cd2 As Variant cd = Worksheets("Sheet1").Range("A1:A2").Value For Each cd2 In cd If Not Intersect(Target, Range("A1:A2")) Is Nothing Then Application.Goto cd2 End If Next cd2 End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Sheet1のA1セルにSheet2$C1$、A2セルにSheet2$C1$と記述されている。
A1セルをダブルクリックしたら、Sheet2 の C1 セルへ移動する。
A1セルをダブルクリックしたら、Sheet2 の C2 セルへ移動する。

ということがしたいのですか。

Sheet2 の C1 へ移動する場合は、下記のコードになります。

vba

1Application.Goto Worksheets("Sheet2").Range("C1")

あなたのコードはそのようになってませんね。
これをヒントにもうすこしご自分でチャレンジしてみては。


エラーの原因は、Goto の引数には Rangeオブジェクトを渡す必要があるのに、Sheet2$C1$という文字列を渡しているからでしょう。
Sheet2$C1$を Rangeオブジェクトに変換する必要があります。
そのためには、Sheet2$C1$ から Sheet2C1を取り出す必要があります。
いろいろ方法はありますが、InStr関数、Left関数、Mid関数を組み合わせる方法と、Split関数を使う方法があります。


なかなか、苦労しているようなので、正解のコード例を出しておきます。

vba

1Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 2 If Not Intersect(Target, Me.Range("A1:A2")) Is Nothing Then 3 Dim ary As Variant 4 ary = Split(Target.Value, "$") '$ で分割して配列に変換 5 Application.Goto Worksheets(ary(0)).Range(ary(1)) 6 Cancel = True 'ダブルクリックはなかったことに 7 End If 8End Sub

A1:A2 が空欄だった場合等のエラー処理はしてないので、必要に応じて追加してください。

投稿2019/07/08 12:54

編集2019/07/10 04:25
hatena19

総合スコア33620

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/07/08 13:07 編集

このヒントでは難しくありませんか? 問題は Range が必要なところ、そうではないものを与えていることなので、Range への変換方法が肝になると思います。Worksheets("Sheet2") は必須ではありません。
iruyas

2019/07/09 04:14

シートを指定しないと、 実行時エラー '1004' 'Range' メソッドは失敗しました: '_Worksheet' オブジェクト
Zuishin

2019/07/09 04:29

私へのコメントですか? このコメントをシート不要ととるんですか。なるほど。
kkk6

2019/07/09 05:15

皆さん回答ありがとうございます。 参考にしてやってみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問