• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロ ボタンと同じ名前のシートをアクティブにする)

マクロボタンと同じ名前のシートをアクティブにする

kagakusukiの回答

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

 回答No.1の改良案です。 Sub QNo8986361_マクロ_ボタンと同じ名前のシートをアクティブにする_改() Dim ButtonText As String ButtonText = ActiveSheet.Shapes(Application.Caller) _ .TextFrame.Characters.Text If IsError(Evaluate("ROW('" & ButtonText & "'!A1)")) Then MsgBox "押されたボタンのテキストにある" & vbCrLf _ & vbCrLf & ButtonText & vbCrLf & vbCrLf & _ "という名前と同名のシート名を持つシートが見つかりません。" _ , vbExclamation, "無効なシート名" Exit Sub Else Sheets(ButtonText).Activate End If End Sub  因みに、上記のマクロや回答No.1のマクロでは、万が一、ボタンのテキストに入力されている文字列を間違えた場合(どのシート名とも異なる文字列としてしまった場合)や、ボタンのテキストにシート名を入力した後で該当するシート名が変更されてしまった場合であっても、「シートが見つかりません」という御知らせが表示されるだけで、「マクロ自体がエラーとなってVBAのウィンドウで対処しなければならない」様な羽目にはなりませんので、ボタンのテキストやシート名を変更する際にも、「ボタンを押してみて間違っていたら直せば良い」とい考えで気楽にボタンのテキストやシート名を変更する事が出来ます。  尚、回答No.2様のマクロでも、上記の点は同様の仕様になっている様です。

tanpopopoketto5
質問者

お礼

失礼いたします。 補足コメントで書かせていただいたことは、こちらのミスでした。 回答者様に教えていただいた方法で、無事作業を実行することができました。 本当にありがとうございます。 そこで、重ねての質問になり大変恐縮なのですが、 今回はボタンが28個ですが、5個の時もあれば、10個の時もあります。 回答者様に教えていただいた「ボタンを複数選択して、マクロの登録」 の一連の流れをマクロに登録し、他のブック(例えばボタンが5個のシート)でも適応させたいと 考えています。 『アクティブになっているシートにあるボタンをすべて選択し、「QNo8986361_マクロ_ボタンと同じ名前のシートをアクティブにする_改()」をボタンにマクロ登録する』 といったようなことはできないでしょうか? 説明がわかりづらく失礼いたします。 分かったらでいいので教えていただければと思います。 重ね重ねすみませんが、よろしくお願いいたします。

tanpopopoketto5
質問者

補足

ご回答、また改良案までご教授いただき、ありがとうございます。 回答者様のマクロを行ってみたところ、 ButtonText = ActiveSheet.Shapes(Application.Caller) _ .TextFrame.Characters.Text のところでエラーになります。 「指定した名前のアイテムが見つかりませんでした。」 と表示されます。 申し訳ありませんが、原因が分かれば教えていただきたいです。

関連するQ&A

  • マクロ 戻るボタンを押したらシートの1枚目に戻る

    各シートに「戻る」というボタンを作りましたが、 「ボタンを押したらシートの1枚目をアクティブにする」というマクロを付けたいです。 下記は、『「戻る」というマクロを2枚目のシート以降すべてに付ける』というマクロです。 このマクロの中に、各シートの「戻る」ボタンを押せば、シートの1枚目に戻るような 指示を入れたいです。 分かる方いましたら、お願いします。。。 ※下記のマクロは以前ご回答いただいたマクロを引用したものです。 /////////////////////////////////// Sub 戻るボタン設置() Dim Sht As Worksheet For Each Sht In Worksheets If Not Sht.Name = Worksheets(1).Name Then With Sht For i = 1 To 1 '幅140、高さ20のボタンを追加 .Buttons.Add(900 * i, 10, 140, 20).Text = "戻る" Next i End With End If Next Sht Sheets(1).Select End Sub

  • マクロ 各シートからシート1に戻るボタンを設置する

    各シートの同じ位置に「シート1に戻る」ボタンを付けるマクロを実行したいです。 前回教えていただいたことから、ボタンを設置するマクロはわかったのですが、 『2枚目以降のシートから、シートが終わるまで、各シートにボタンを設置する』マクロがわかりません。 1枚目は目次?的なページですので、 2枚目以降から、シートが終わるまで、決められた位置に「戻る」ボタンをつける。 という作業をマクロに記憶させたいと考えています。 ※下記は、こちらで教えていただいたものを参考にしたマクロです。 「戻る」という言葉をどこに入れてよいかもわからりません。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・ Sub 戻るボタン設置() With ActiveSheet For i = 1 '幅140、高さ20のボタンを追加 .Buttons.Add(145 * i, 120, 140, 20).Text = i Next i End With End Sub

  • マクロ ボタンに名前をつける

    ☆シート1にボタンが29個あり、 ボタンを押すとシート2やシート3のページをアクティブにして表示するマクロを作っています。 その過程で、シート1にボタンを29個作成するところまでは終わりました。 そして、次にボタン1つ1つに名前を付けたいと思うのですが、 シート2、3、4...のI2のテキストを引用してボタンの名前を付けたいです。 (各シートのタイトルはI2に記入しているため。) シート2のI2のテキストを引用してボタンに名前を付けるマクロを作ってみましたが、 ”広告事業収入”がシート2だとは限らないので、”広告事業収入”を引用せず、 ”シート2のI2”を引用してボタンの名前にするマクロにしていただきたいです。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ Sub シート2のボタン作成() ' Sheets(2).Select Range("I2").Select ActiveCell.FormulaR1C1 = "広告事業収入" Sheets(1).Select ActiveSheet.Shapes.Range(Array("Button 1")).Select Selection.Characters.Text = "広告事業収入" With Selection.Characters(Start:=1, Length:=9).Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With End Sub ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ いらない部分も削除していただけたら幸いです。

  • Excel 全シート上のボタンを削除 VBA

    いつも大変お世話になっております。 Excelのシート上のボタンを削除したいと考えています。 ボタンはVBAで自動で作成してます。 Sub ButtonCreate() With ActiveSheet.Buttons.Add(Range("C1").Left, _ Range("C1").Top, _ Range("C1").Width, _ Range("C1").Height) .Characters.Text = "起動" .Characters.Font.Size = 8 End With End Sub シート上にはグラフ等もあるため、 まとめてオブジェクトを消すという方法は取れません。 ボタンのみを消したいと思っています。 Worksheets("テスト").Activate ActiveSheet.Buttons.Delete と削除する方法を取っていますが、 他に方法はありますか? BOOKを指定し、全シート上の ボタンを削除する方法があれば、知りたいです。 回答よろしくお願い致します。

  • マクロのシートでのコピーができません。

    ビスタ エクセル 2007を使用しています。B2~E12まで簡単な表を作り E列で昇り順に並べ替えしました。そして並べ替えからこの表を印刷するまでマクロで完成しました。 ところが、別のシートにコピーすると印刷はされますが、並べ替えがされずに印刷だけされます。同じ表を30枚作成し、それぞれ同じ操作と印刷のマクロを組みたいのですが・・・・どなたか助けてください。 Sub ボタン5_Click() ' ' ボタン5_Click Macro ' ' Columns("E:E").Select ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("E1"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Sheet1").Sort .SetRange Range("B2:E12") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With ActiveWindow.SelectedSheets.PrintOut Copies:=1 End Sub

  • VBAのボタン操作について。

    For i=0 to 3 with Range("A" & (i+1)) with ActiveSheet.Buttons.Add(.Left,.Top,.Width,.Height) .caption="テストボタン" .OnAction="テストアクション" End with End wirh Sub テストアクション() MsgBox "あなたがクリックしたボタンは上から○番目のボタンです。" End sub 上記マクロを実行すると、セルA1,A2,A3にテストボタンが配置されます。 3つのボタンのどれかをクリックしたとき、テストアクションが実行されますが、 ○番目の○を求めるにはどうすればよいのでしょうか?

  • <マクロ>シートの名前を変えたい

    いつも、教えていただきありがとうございます。 マクロを始めたばかりなので説明もうまくできるか分かりませんが 教えてください。 データ入力専用のシートがあります。(sheet1ですが、名前は「台帳原紙) そこにデータを入力した後、控えとしてシートを複製しています。 その後、入力のあるセルをクリアするマクロを自動記録しました。 複製は、シートの名前を指定してないので「台帳原紙(2)」となります。 そこで、自動記録したマクロに修正を加えて名前を変えるところまで 記録したいのです。 上記マクロは、「台帳原紙」にボタンを作りマクロを登録しています。 Sub Macro2() Sheets("台帳原紙").Copy Before:=Sheets(2) Sheets("台帳原紙").Select Range("A2:I19,A21:C30,I21:I30").Select Range("I21").Activate Selection.ClearContents ActiveWindow.SmallScroll Down:=-27 Range("A2").Select End Sub シートの名前は、今日の日付にしたいです。 台帳原紙のA2に今日の日付が入力されるのでそれを利用する方法でも良いのですが教えていただけませんか?

  • マクロの中に別なマクロを組み込むには

    よろしくお願いします。 excel2003でマクロを作っています。 Sheet2のC1、D1、E1にセルを赤く塗りつぶす、赤と入力、カラーインデックスの番号を入力するというマクロを作りボタンに割り当てたいと思います。 全部で色が17色あるので、マクロを17個作らなければならないと思うのですが、なるべく簡略化したいと思います。 そこで下記の「赤」というマクロの中に「色」というマクロを取り込みたいのですが、うまくできませんでした。 どうかマクロの中にマクロを取り込む方法を教えてください。 もし下記のマクロがもっとスマートに出来るようでしたら、それも教えていただけると嬉しいです。 VBAは初心者ですがよろしくお願いします。 Sub 赤() irobango = 3 ironamae = "赤" End Sub Sub 色() Worksheets("Sheet2").Range("C1").Select With Selection.Interior .ColorIndex = irobango .Pattern = xlSolid End With Worksheets("Sheet2").Range("D1").Value = ironamae Worksheets("Sheet2").Range("E1").Value = irobango End Sub

  • マクロの実行ボタンを削除するマクロ

    以下のようなコードを書いたのですが シート内にボタンができてそのボタンを最終的には削除したいです 資料作成のテンプレートとして下記コードを書いたのですが 資料ができた時にボタンがあるままだと見栄えがいまいちなのでマクロ実行ボタンを削除したくなりました。 シート数は30枚くらいあるので1シートずつマクロ実行ボタンを削除するのは正直しんどいです 一度にシートを全部選択してマクロ実行ボタンを削除したいです マクロ実行ボタンの箇所は全シート同じ箇所にあります Sub ボタン() Selection.Borders(xlEdgeBottom).LineStyle = xlNone Selection.Borders(xlEdgeRight).LineStyle = xlNone Selection.Borders(xlInsideVertical).LineStyle = xlNone Selection.Borders(xlInsideHorizontal).LineStyle = xlNone ActiveSheet.Buttons.Add(108, 40, 55, 15).Select Selection.OnAction = "図形挿入等倍" Selection.Characters.Text = "図形挿入" With Selection.Characters(Start:=1, Length:=4).Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = 1 End With Range("E4").Select ActiveSheet.Buttons.Add(215, 40, 55, 15).Select Selection.OnAction = "赤枠" Selection.Characters.Text = "赤枠" With Selection.Characters(Start:=1, Length:=2).Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = 1 End With Range("G4").Select ActiveSheet.Buttons.Add(323, 40, 55, 15).Select Selection.OnAction = "テキスト入り赤四角" Selection.Characters.Text = "テキスト" With Selection.Characters(Start:=1, Length:=4).Font .Name = "MS Pゴシック" .FontStyle = "標準" .Size = 11 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = 1 End With Rows("12:12").Select ActiveWindow.FreezePanes = True End Sub

  • このマクロを少し修正したい

    先日、こちらのサイトで下記のマクロを作っていただきました。 エクセルの置換えシートを使って、別のエクセルシートを一括置換えするマクロです。 ただ、置換えしたいシートのセルが結合していたり、文字の前に空欄が入っていると変換されません。 上記も認識しての置換えは、下記のマクロを修正して可能でしょうか? 修正したマクロを教えていただけると助かります。  With ThisWorkbook   If ActiveSheet Is .Worksheets(1) Then Exit Sub   For i = 1 To .Worksheets(1).Range("A65536").End(xlUp).Row    ActiveSheet.Cells.Replace _      What:=.Worksheets(1).Range("A" & i).Value, _      Replacement:=.Worksheets(1).Range("B" & i).Value, _      LookAt:=xlPart, SearchOrder:=xlByColumns   Next  End With End Sub