- ベストアンサー
EXCELのシート名を指定してそのシートを開くマクロ、VBA?
いつもお世話になります。 次々とシートを追加していくブックがあります。 Sheet1にマクロボタンを作成して、例えばSheet1のA1に「5」と入力すればSheet5が、「8」と入力すればSheet8が、開くようにしたいのですがそのようなマクロは可能でしょうか? (シートのハイパーリンクを利用した目次ではありません。) 初心者ですがよろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 私もフォーム・ボタンにしてみました。フォーム・ボタンは、マクロの設定が自動で出来るからです。ボタンを付けたら、「ボタン作成」のマクロは、削除して構いません。 両方とも、「標準モジュール」に登録してください。 現在は、ボタンは、Sheet1 の H1 につけるようになっています。 '<標準モジュール> Sub ボタン作成() Dim Lp As Double, Tp As Double, Wd As Double, Ht As Double ' Const ボタン場所 As String = "H1" With Worksheets("Sheet1") .Select With .Range(ボタン場所) If Not IsEmpty(Range(ボタン場所).CurrentRegion) Then _ MsgBox "空いている場所に設定してください": Exit Sub Lp = .Left: Tp = .Top + 1: Wd = .Width: Ht = .Height * 2 End With With .Buttons.Add(Lp, Tp, Wd, Ht) .OnAction = "ジャンプ" .Caption = "ジャンプ" .Visible = True End With End With End Sub '------------------------------------------------- '<標準モジュール> Private Sub ジャンプ() Dim num As String With Worksheets("Sheet1") If IsEmpty(Range("A1")) Then MsgBox "シート番号を、A1 に入力してください", vbInformation Exit Sub End If num = StrConv(Range("A1").Value, vbNarrow) On Error Resume Next Application.Goto Worksheets("Sheet" & num).Range("A1") If Err() > 0 Then If Err.Number = 9 Then MsgBox "シートが見つかりません。", vbCritical Exit Sub Else '非表示シートに対して、こういう反応があります。 MsgBox "シートにアクセスできる状態ではないようです。", vbCritical End If End If On Error GoTo 0 num = vbNull End With End Sub
その他の回答 (3)
こちらの利用は初めてです。どうぞよろしく。 ほかの方も回答されていますが、自分のも参考にどうぞ。 手順: 1.マクロ用のボタンをフォームツールバーから1つ作ってください 2.ツールバーはツールバーの上で右クリックし、フォームを選んでください 3.表示されたツールバーからボタンを選択し、適当なところへ配置します 4.「マクロの登録」ダイアログが表示されたら新規作成を押し、以下のコードを貼り付けます 5.フォームツールバーを閉じます 6.セルA1に適当な番号を入力します 7.ボタンを押します 入力するコード: Sub ボタン1_Click() ' Sheet1のA1セルに入力された番号のシートに切り替えます Dim SheetName As String On Error GoTo ErrMsg ' シート切り替えに失敗したときのメッセージ SheetName = "Sheet" & StrConv(Sheets("Sheet1").Range("A1").Value, vbNarrow) Sheets(SheetName).Activate ' 該当するシートに切り替える Exit Sub ' 抜ける ErrMsg: ' エラーが発生した際にメッセージを表示する MsgBox "該当するシートが見つからないため、切り替えに失敗しました", vbCritical + vbOKOnly, "切り替え失敗" End Sub
お礼
ありがとうございます。 思い通りにできました!
- hana-hana3
- ベストアンサー率31% (4940/15541)
こんなとろころでしょうか。 Sub test1() Dim Num As String Num = Range("A1") On Error GoTo Err Sheets("Sheet" & Num).Select Err: End Sub
お礼
ご回答ありがとうございます。 参考になりました。
- TTak
- ベストアンサー率52% (206/389)
コントロールツールボックスのコマンドボタンを使った例です。 クリックしたらセルA1の値をインデックス値(シートの配列順)にとるシートをアクティブにします。全角数字や数値オーバーの場合は無視されます。 Private Sub CommandButton1_Click() On Error Resume Next ActiveCell.Activate Sheets(Range("a1").Value).Activate End Sub
お礼
早速のご回答ありがとうございました。 大変参考になりました。
お礼
詳細なご回答大変ありがとうございました。 完璧にできました。