[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『セルの値と同じ名前のシートをアクティブにする』(franny)
度々お世話になります。
”結果”という名前のシートのA1セルに入力した値と同じ名前のシート
(単純に1,2,3と12まで連番にしてあります)をアクティブにしたいのですが
変数=ActiveSheet.Range("A1").Value
Worksheets(変数).Activete
でうまくいかず、助言を得て
変数=WorkSheets(”結果”).Range("A1").Value
Worksheets(変数).Activete
にしましたがエラー9が出ます。
VBAを学び始めて日が浅いので基本的なことがまだおろそかですが
どこが間違っているか教えていただければ助かります。
よろしくお願いいたします。
< 使用 Excel:Office365、使用 OS:Windows10 >
返信ありがとうございます。
(franny) 2021/11/18(木) 15:11
(マナ) 2021/11/18(木) 15:17
シートは全部マクロを入力したブック上にあるのだろうか? (ねむねむ) 2021/11/18(木) 15:48
ならば、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
VBAはじめたばかりで拙いことが多いです、ご丁寧に説明してくださりありがとうございます。
(franny) 2021/11/25(木) 15:32
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.