[[20211118144119]] 『セルの値と同じ名前のシートをアクティブにする』(franny) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『セルの値と同じ名前のシートをアクティブにする』(franny)

度々お世話になります。

”結果”という名前のシートのA1セルに入力した値と同じ名前のシート
(単純に1,2,3と12まで連番にしてあります)をアクティブにしたいのですが

変数=ActiveSheet.Range("A1").Value
Worksheets(変数).Activete

でうまくいかず、助言を得て

変数=WorkSheets(”結果”).Range("A1").Value
Worksheets(変数).Activete

にしましたがエラー9が出ます。

VBAを学び始めて日が浅いので基本的なことがまだおろそかですが
どこが間違っているか教えていただければ助かります。
よろしくお願いいたします。

< 使用 Excel:Office365、使用 OS:Windows10 >


Dim 変数 As String
(マナ) 2021/11/18(木) 15:03

あるいは
Worksheets(Cstr(変数)).Activete
(マナ) 2021/11/18(木) 15:09

Dim 変数 As stringはかいてあります

返信ありがとうございます。
(franny) 2021/11/18(木) 15:11


Worksheets(Cstr(変数)).Activate
にしてもエラー9が出てしまいました…
(franny) 2021/11/18(木) 15:14

では、その名前のシートがないだけではありませんか。
全角、半角の違い、スペースの有無とか。

(マナ) 2021/11/18(木) 15:17


シートはあります
全角・半角も見直しました。
Worksheets(Cstr(変数)).Activateにデバックがでます。
(franny) 2021/11/18(木) 15:30

 シートは全部マクロを入力したブック上にあるのだろうか?
(ねむねむ) 2021/11/18(木) 15:48

>Dim 変数 As stringはかいてあります

ならば、Cstrは不要です。もとのままでOK。

>全角・半角も見直しました。

念のため、A1をコピーして、シートタブに貼り付けてください。

(マナ) 2021/11/18(木) 16:15


 変数=ActiveSheet.Range("A1").Text
に変えると、どうなるのかな?
(どん) 2021/11/18(木) 16:44

横からですが。

■1
VBAの世界では基本的に、対象のシートやセルを明示すれば、いちいちアクティブにしたり選択したりする必要はありません。
よって、質問の答えではありませんが、そもそもシートをアクティブにする処理が必要なのかは再考されたほうがよいと思います。

■2

 Worksheets(1).Activate
 Worksheets("1").Activate

Excel君にとって↑は意味合いが異なります。

 前者は【1番目】のシートをアクティブにしなさい
 後者は【「1」という名前】のシートをアクティブにしなさい

という意味になります。
そして、上記で何が違うのかというと前者は1という【数値】であり、後者は1という【文字列】であるかの違いです。

■3
上記を踏まえると↓ですから、後者の【文字列】(シート名)としてExcel君に伝えればよいことになります。
>単純に1,2,3と12まで連番にしてあります
数値を文字列として扱う(変換する)には

 ・一旦String(文字列)型の変数に格納する ←マナさんがはじめに提示された方法
 ・Cstr関数をつかう方法          ←マナさんが2番目に提示された方法
 ・""を文字列結合する方法   

などがあります。
これを踏まえると↓のようにしてもOKです。(上記の3番目の方法)

    Sub さんぷる()
        Worksheets(ActiveSheet.Range("A1").Value & "").Activate
    End Sub

■4
なお、実際のコードでは正しく書いていると思いますが、Activ【a】teです。

 誤 〜〜.Activete
 正 〜〜.Activate

■5
>デバックがでます。
細かい話ですが、デバッグが出ているのではなく【実行時エラー】が発生しています。
エラーが発生したので、直ぐにデバッグ(プログラム修正作業)するか、とりあえずプログラムを強制終了するのか聞かれているのです。

■6
インデックスが有効範囲にありません。(エラー番号:9) が出ると言うことは、その指定されたシートが無いということになります。
既に皆さんがアドバイスされているところではありますが、シート名の一覧を提示してみてはどうでしょうか?
↓を実行すると【イミディエイト】にシート名を列挙したものを出力しますので、それをそのままコピペして提示してみるとよいとおもいます。
Sub 検証()

    Dim SH As Worksheet
    Dim buf As String

    For Each SH In Worksheets
        buf = buf & SH.Name & ","
    Next

    Debug.Print Left(buf, Len(buf) - 1)
End Sub

(もこな2 ) 2021/11/18(木) 16:59


もこな様
丁寧に解説ありがとうございます。
まず1の意味合いをまだ理解していないので調べます。
2,3は理解しました。
4はすみません、スペルミスです。
5について、用語についてまだ漠然としか理解していないのでもう一度教科書としている本を確認します。
6シート名変更したら計算されるようになりました。

VBAはじめたばかりで拙いことが多いです、ご丁寧に説明してくださりありがとうございます。
(franny) 2021/11/25(木) 15:32


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.