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

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

kagakusukiの回答

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

>『アクティブになっているシートにあるボタンをすべて選択し、「QNo8986361_マクロ_ボタンと同じ名前のシートをアクティブにする_改()」をボタンにマクロ登録する』 >といったようなことはできないでしょうか?  やってやれない事はないとは思いますが、それですともし他のマクロを登録して使用しているボタンがあった場合、そのボタンのマクロの登録が上書きされて、それまで使っていた別のマクロを一々、登録し直さなければならない羽目になりかねませんから、その様なやり方は止めておかれた方が無難だと思います。  そこで別の方法として、回答No.3様が提案されておられた方法と同様に、 「『QNo8986361_マクロ_ボタンと同じ名前のシートをアクティブにする_改()』のマクロが登録済みで、尚且つ、各シート名に合わせた文字列をテキストに入力済みとなっているボタンを、Workbook内に存在している全シート枚数分作成する」 というマクロを組んでみました。  ただ、回答No.3様のマクロでは、シートのレイアウトには関係なく、ボタンが配置される場所が固定となっていて、ボタンの配置を変更する際にはマクロの構文に記されている数値を変更せねばならない様でしたので、その点を改良しております。(改良と書きましたが、別に回答No.3様のマクロをベースにしている訳ではなく、新規に組んだものです)  使い方は、まず先に「QNo8986361_マクロ_ボタンと同じ名前のシートをアクティブにする_改()」のマクロをExcelファイルの標準モジュールに保存しておきます。  その上で、今回のマクロを起動させた際に現れるダイアログボックスの指示に従って、1つ目のボタンを配置したいセル(結合セル、或いはセル範囲も可)を選択し、次に2つ目のボタンを配置したいセルを選択しますと、1番目のセルと2番目のセルの行番号と列番号の差を読み取って、1番目のセルを基点として一定の行間隔と列間隔で、各セル又はセル範囲の中心と、ボタンの中心が一致する様にボタンを配置して行く様になっております。(縦横どちらの方向にも並べる事が出来ます。縦横どちらでも可となる様にした結果、ついでに斜め方向に並べる事も出来る様になってしまっております)  途中に行の高さや列幅が異なるセルが存在していた場合でも、各セル又はセル範囲の中心に合わせてボタンが配置されます。  但し、ボタンのサイズは各シートの中で最も長いシート名に合わせて調整されますので、行の高さや列幅が不足している場合には、ボタンがセルからはみ出してしまいますので、このマクロを使用する前に予めセルの高さや幅を調整しておく事を御勧め致します。  後それから、上記のマクロを使った結果、ボタンが増え過ぎてしまう様な事になった場合に備えて、「選択したセル範囲と重なっている図形(ボタンも含む)を全て削除するマクロ」が掲載されているサイトへのリンクを貼っておきます。 【参考URL】  インストラクターのネタ帳 > エクセルマクロ・Excel VBAの使い方 > マクロのサンプル > 選択したセル範囲に含まれる図形を削除するExcelマクロ   http://www.relief.jp/itnote/archives/018407.php Sub テキストに表示されている名前のシートを開くボタンを自動作成() Dim MaxName As String Dim myOnAction As String Dim i As Long Dim myBox As Variant Dim myTemp As Variant Dim FirstCell As Range Dim PasteCell As Range Dim myInfo(1) As String Dim XPitch As Integer Dim YPitch As Long Dim CoordX As Single Dim CoordY As Single Dim ShapeH As Single Dim ShapeW As Single Dim FirstShepe As Object Dim PasteShepe As Object 'ボタンに登録するマクロ myOnAction = _ "QNo8986361_マクロ_ボタンと同じ名前のシートをアクティブにする_改" label1: myInfo(0) = "ボタン配置開始位置の指定" myInfo(1) = "最初" GoSub label3 If myBox.MergeCells Then Set FirstCell = myBox.Resize(1, 1).MergeArea Else Set FirstCell = myBox End If FirstCell.Parent.Select FirstCell.Activate label2: myInfo(0) = "ボタン配置間隔の指定" myInfo(1) = "2つ目" GoSub label3 YPitch = myBox.Row - FirstCell.Row XPitch = myBox.Column - FirstCell.Column If YPitch = 0 And XPitch = 0 Then MsgBox "その設定では全てのボタンが同じ位置で重なってしまいます。" _ & vbCrLf & "ボタンを配置する間隔の設定をやり直して下さい。" _ , vbExclamation, "無効な設定" Goto label2 End If myTemp = Empty myTemp = FirstCell.Row + YPitch * (Sheets.Count - 1) If myTemp < 1 Or myTemp > Rows.Count Then GoTo label4 myTemp = FirstCell.Column + XPitch * (Sheets.Count - 1) If myTemp < 1 Or myTemp > Columns.Count Then GoTo label4 For i = 1 To Sheets.Count If Application.Evaluate("LENB(""" & Sheets(i).Name & """)") > _ Application.Evaluate("LENB(""" & MaxName & """)") Then _ MaxName = Sheets(i).Name Next i With FirstCell CoordX = .Left + .Width / 2 CoordY = .Top + .Height / 2 Set FirstShepe = .Parent.Buttons.Add(1, 1, 1, 1) End With With FirstShepe .Characters.Text = MaxName .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .Placement = xlMove .PrintObject = Falsel .AutoSize = True .AutoSize = False ShapeH = .Height ShapeW = .Width CoordX = CoordX - ShapeW / 2 CoordY = CoordY - ShapeH / 2 If CoordX < 1 Then CoordX = 1 With .Parent.Columns(Columns.Count) If CoordX + ShapeW > .Left + .Width Then _ CoordX = .Left + .Width - ShapeW End With If CoordY < 1 Then CoordY = 1 With .Parent.Rows(Rows.Count) If CoordY + ShapeH > .Top + .Height Then _ CoordY = .Top + .Height - ShapeH End With .Left = CoordX .Top = CoordY .Characters.Text = Sheets(1).Name .OnAction = myOnAction End With  ※ まだ途中なのですが、このサイトの回答欄は4000文字までしか入力出来ないため、残りは又後で投稿致します。

tanpopopoketto5
質問者

お礼

何度も質問したにも関わらず丁寧なご回答ありがとうございます! 無事作業が完了したのでお礼申し上げます。 今後もよろしくお願いいたします。 本当にありがとうございました。

関連する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