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

このQ&Aのポイント
  • 各シートの同じ位置に「シート1に戻る」ボタンを付けるマクロを実行したいです。
  • 2枚目以降のシートから、シートが終わるまで、各シートにボタンを設置するマクロがわかりません。
  • 「戻る」という言葉をどこに入れてよいかもわからりません。
回答を見る
  • ベストアンサー

マクロ 各シートからシート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

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

#2です。 参考までに、その後に思いついたものを、記します。 出来れば、見出しを選択したいだけのためなら、ボタンをシートに張り付けるのは賛成でないので。 ーー 一番左に目次的なシートを作って配置しておけば、 シート画面の一番下の(シート名タブの左の)◀と▶の、◀を「CTRLキーを押しながらクリックする」と 一番左に移動するようだ。 VBAなどでボタン化する必要はないのでは。 ーー マクロの記録では Sub Macro1() ActiveWindow.ScrollWorkbookTabs Sheets:=-15 End Sub のようになる。マイナスは左移動のようなので、 ActiveWindow.ScrollWorkbookTabs Sheets:=-Worksheets.Countも可能のようだ。 ーー 見出しシートをいつも一番左に持ってくるのは Sub test01() Worksheets("見出し").Move Before:=Worksheets(1) End Sub ブックを開いた最初などに、このステップを入れておくと、見出しシートのTAB位置が、再左の位置になる。 ーー ほかに見出しシートのTABの色を目立つように変えておくと使いやすいかも。

tanpopopoketto5
質問者

お礼

ご丁寧にご回答いただき、ありがとうございます。 今回、マクロの作業の指示をくださった上司から、 「戻るボタンを付けるように」という指示でしたので、 このような質問をさせていただきました。 今回教えていただいたことは、今後の参考にさせていただきます。 ご回答本当にありがとうございます。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

 エクセルを使っての課題解決のためには (1)構想・仕組み・発想を決める段階・ステップ (2)関数や、VBAコードを考える・判らなければ学ぶ段階 初学者だと(1)の段階で、自分が思いついた(またはそれしか知らない)発想になってしまう場合が多い。 どんな分野の課題解決でもそうだろう。  本当は質問に、現状(や今後作る)「データ」と、「したいこと」(できれば「結果データ」も)を「文章で!!」書いて、経験豊富な(という前提の)回答者のアイデアを回答してもらって、それを学ぶべきだと思う。相当に学が進んでもこの心がけは必要と思う。 ーーー 最初の質問をみて、回答者の回答コードが出て、早々と締め切っているのを見て、その後、これを判っただけで、どうするのだろうと思った。案の定この質問がでた。 (余談。私の個人経験から、質問者は、お礼はすぐしても、回答の締め切りは、土日を挟む3日ぐらいおいておくのが、他のよい回答がつくかもしれず、よいように思う。) たくさんコントロールを張り付けた場合、同質のイベントの処理の場合が多く、「クラス」という仕組みを使ったり、コントロール配列などという、VBAとして高等な課題に直面することが多いようだ。前問では、どういう使い方をするかも書いておらず、質問者には判っているのかな、と思っていた。 ーー 1枚目(Sheet1とする)のシート(目次的なシートなら)には、「目次シート」などをシート名にして、シートタブをクリックすればすむ。 シートが沢山あってSheet1のタブが出ていない場合は、シートタブ上で、「右クリック」、「移動またはコピー」「Sheet1をクリック」で済む話。 ーー これで満足しないなら、VBAの話だが、各ボタンのクリックイベントに (ボタン5はシートと場合で変わる) Sub ボタン5_Click()  Sheets("Sheet1").Activate Range("A1").Select End Sub すべてのシートのボタンのイベント・プロシージュアーについてこれを入れる必要がある。 これをしないで達成するやり方(前述)は初心者の域でない。 各ボタンのクリックイベントのほかにも、使えそうだが。 そもそも初心者がイベントをつかうのは経験から無理があると思う。 また質問者以外の人にこのブックを使ってもらおうとする場合は、よほどVBAに上達してからにしたほうがよい。使用者の制限、シートの保護や、誤り入力や、余分な入力への対抗、VBA作成者の不十分や誤りの対応が大変だから。これらはプロに任せるべき。

tanpopopoketto5
質問者

お礼

ご回答ありがとうございます。 私自身初めてのマクロであること、また、仕事の関係で急いで作らなくてはならない という点から、稚拙な質問ばかりで大変失礼いたしました。 本来なら、1からきちんと学び質問するべきなのですが、マクロをマスターしたいわけではなく、 「日頃マクロでの作業を行っている上司の代わりに今回のみマクロを作成する」 といった状況なので、時間が一番に優先されます。 今回私が作ったブックは、マクロ経験者の上司が扱うため、問題はないと思います。 ご心配いただき、ありがとうございます。 質問の仕方もご指摘いただき、大変参考になりました。 すべてをふまえ、ありがとうございます。

  • dogs_cats
  • ベストアンサー率38% (278/717)
回答No.1

一番左にあるシート以外にボタンを設置する方法の一例です。 各シートで複数ボタン作成するのですか?for~next使用するようですが。 必要箇所を修正下さい。 Sub 戻るボタン設置() Dim Sht As Worksheet 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(145 * i, 120, 140, 20).Text = i Next i End With End If Next Sht End Sub VBAで作業後にシート1に戻りたいのならコードで戻れば済む話しですが、 シート毎にボタン配置が本当に必要なのか考えた方が良いと思いますが。

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シート目に28個並んでいます。 ボタンには、「あああ」「いいい」など、名前が表記されており、まだ「マクロの登録」を行っていません。 「ボタンをクリックすると、ボタンと同じ名前のシートをアクティブにする」 というマクロを、ボタンに登録したいです。 また、常に28個ボタンがあるというわけではありません。25個や、26個になる場合もあります。 ※1シート目にボタンを作り、そのボタンに名前を付ける作業は、   前回教えていただいた下記のマクロを行いました。 Sub ボタン設置() With Worksheets(1) For i = 1 To (Worksheets.Count - 1) nX = 145 * (1 + ((i - 1) Mod 8)) nY = 30 * (1 + Int(i / 8)) .Buttons.Add(nX, nY, 140, 20).Text = Worksheets(i + 1).Range("I2").Value Next i 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を指定し、全シート上の ボタンを削除する方法があれば、知りたいです。 回答よろしくお願い致します。

  • 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つのボタンのどれかをクリックしたとき、テストアクションが実行されますが、 ○番目の○を求めるにはどうすればよいのでしょうか?

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

    以下のようなコードを書いたのですが シート内にボタンができてそのボタンを最終的には削除したいです 資料作成のテンプレートとして下記コードを書いたのですが 資料ができた時にボタンがあるままだと見栄えがいまいちなのでマクロ実行ボタンを削除したくなりました。 シート数は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

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

    ☆シート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 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ いらない部分も削除していただけたら幸いです。

  • シート上のボタン、オブジェクト名取得 or 変更

    探してみたのですが、 良い方法が見当たらないため質問させて頂きます。 Excel2003を使用しています。 UserForm上で、シートにボタンを追加し、 マクロを登録するプログラムを組みました。 -------------------------------------- With ActiveSheet.Buttons.Add(Range("H1").Left, _ Range("H1").Top, _ Range("H1:I1").Width, _ Range("H1").Height) .OnAction = "HiddenDataOpenMacro" .Characters.Text = "表示" .Characters.Font.Size = 8 End With --------------------------------------- この場合、H1の部分に新しいボタンが登録されます。 作成したボタンのオブジェクト名が知りたいのですが、 どのようにしたら分かるでしょうか? もしくは、HiddenDataOpenMacro上に どういうプログラムを組めばいいのか教えて頂きたいです。 --------------------------------------- Sub HiddenDataOpenMacro() If ActiveSheet.Commandbuton1.Caption = "表示" Then ActiveSheet.CommandButton1.Caption = "非表示" ActiveSheet.Rows.Hidden = False ElseIf ActiveSheet.Commandbuton1.Caption = "非表示" Then ActiveSheet.CommandButton1.Caption = "表示" ActiveSheet.Rows("2:20").Hidden = True Else MsgBox "違うよ!" End If End Sub ------------------------------------------ ためしに、上記マクロを考えてみました。 シート上には、マクロ登録してあるボタンがもう1つあります。 やりたいことはシンプルでして、 ボタンに表示されている文字列が”表示”だった場合、 ボタンに表示されている文字列を”非表示”に変更 また、非表示にしていたデータを表示にします。 ボタンの文字列が”非表示”だった場合には、 文字列を”表示”に変更し、 指定部分を非表示にします。 標準モジュールでの操作ではできませんでした。 (メソッドをサポートしてませんとエラーが出ます。) シートは毎回新しく作り直すため、 シートにプログラムを書くのはもったいない?気がします。 どうにか方法は無いでしょうか? ボタンを作成するときに、オブジェクト名まで指定できれば 良いかと思うのですが・・・ 話がごちゃごちゃになってきましたので、 やりたいことをまとめます。 ●シートにある、指定文字列が書いてあるボタンのオブジェクト名を取得 ●ボタン作成時にオブジェクト名を設定する方法 ●If ActiveSheet.Commandbuton1.Caption = "表示" Then ではない他の書き方 以上、よろしくお願い致します!

  • エクセルのマクロでシートの選択について

    よろしくお願いします WinXP SP3でEXCEL 2003を使用しています ブック名がtest.xls シートが("目次", "1", "2", "3", "4", "5") とあります ここでは仮に"5"までシートがありますが本来は変数であり、n + 1のように扱いたいです 以下のマクロで"目次"以外の全てのシートを選択しました ~~~~~ Sub Macro1() Dim i As Integer i = 2 Sheets(i).Select For i = i To 6 Sheets(i).Select False Next i End Sub ~~~~~ このマクロですとArrayを使わずとも、"目次"以外のシートを選択できますが For i = i To 6 の6を7以上にするとエラー終了します そこで以下の条件にてシートの選択を行いたいのですが方法がわからず困っております 1・シートの数が多くても"目次"以外のシートを全て選択したいです 2・iがシートの数を超えた場合はエラー終了せず、マクロを終了させたいです 3・Sheets(Array( "1", "2", "3", "4", "5")).Select のようなマクロは組みたくないです 大変恐縮ですが、教えていただけますでしょうか できればマクロをVBEにコピー&ペーストするだけで実行できるような 状態にしていただきますと非常に幸いです 何卒、よろしくお願いいたします

  • Excel マクロで使用済みのボタンを消したい。

    マクロで使用済みのボタンを削除したいと考えています。 毎回ボタンの数が同じ場合は作れたのですが、 ボタンの数が場合によって異なります。 具体的にはD5セルより下にあるボタンを削除したいと考えています。 ボタンを作る時のマクロは Set ws1 = Workbooks("ブックA").Worksheets("Sheet1") Set ws2 = Workbooks("ブックB").Worksheets("Sheet1") i = 2 j = 5 Do Until ws1.Range("B" & i) = "" ws2.Range("D" & j).Value = ws1.Range("B" & i).Value With ActiveSheet.Buttons.Add(Cells(j, 4).Left + 1, Cells(j, 4).Top + 1, _ Cells(j, 4).Width - 1, Cells(j, 4).Height - 1) .Name = "いの" & i - 1 .OnAction = "Select" .Characters.Text = Range("D" & j) End With i = i + 1 j = j + 1 Loop といった感じで、ブックAのB列のデータ数だけ、 ブックBのD5から下に値をコピーし、 その上にセルサイズに合わせてボタンを作り、 Nameを上から順に「いの1」「いの2」・・・、表示はボタンの裏に隠れている値をつけ、 ボタンにマクロ「あいうえお」を登録します。 次にボタンをクリックしたときに、 上の工程で作られたボタンを削除したいと考えています。 a = 1 Do Until ActiveSheet.Shapes("Order" & a) = "" ActiveSheet.Shapes("Order" & a).Delete a = a + 1 Loop b = 5 Do Until Range("D" & b) = "" Range("D" & b).ClearContents b = b + 1 Loop Call あいうえお End Sub ボタン裏のセルは削除できたのですが、 肝心のボタンの削除は出来ませんでした。 どなたかご教授していただければ大変助かります。 宜しくお願いします。

専門家に質問してみよう