• 締切済み

ExcelVBAで選択シートを真ん中にする

ExcelのVBAで、選択されているシートの前後を選択するマクロとして、下記のようなものを作成してメニューボタンに割り付けて使っています。で、質問は、選択されたシートがシート見出しの真ん中になるようにすることって出来ますか?どなたか?詳しい方いらっしゃったら教えてください。宜しくお願い致します。(シートの総数は100ぐらいはあります) Sub Sheet_Move_Right() On Error Resume Next ActiveSheet.Next.Select On Error GoTo 0 End Sub Sub Sheet_Move_Left() On Error Resume Next ActiveSheet.Previous.Select On Error GoTo 0 End Sub

みんなの回答

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.3

何がどううまく行かないの? 何ができるかではなく 何をどうしたが、どううまく行かないのかが分らないと 回答の使用が無いけどね 因みに、補足の条件程度ならすべてクリアしていますよ 提示したマクロはイベントなので 何も考えずにthisworkbookモジュールへコピペしてごらん そして、マウスでシートタブを選択したり マクロでシートをselectしてみてごらんよ その上で分らないことなどを補足してね

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

こんな感じで 'thisworkbookモジュールへコピペ Private Sub Workbook_SheetActivate(ByVal Sh As Object) ActiveWindow.ScrollWorkbookTabs Position:=xlFirst ActiveWindow.ScrollWorkbookTabs Sheets:=Sh.Index - 5 End Sub 最後の行の「-5」をシートタブが希望の位置へ来るように変更してください 目安として、表示されているタブの半分の数値 10個のタブが表示されていれば「-4、-5、-6」辺りを設定 7個なら「-3、-4」位だと思います 参考まで

vba_minarai
質問者

補足

早速のご指導ありがとうございます。 たとえば、シート数が"Sheet1"~"Sheet200"まで、200枚ある場合にSheet50を、Worksheets("Sheet50").Select で選ぶとします。その時にシート見出しの中心に来るのでしょうか?使い方が判っていないせいか?うまく行きません! Selectを実行する前に、Sheet200を選んでいても、Sheet1を選んでいても?問題なく動きますか? 宜しくお願い致します。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

こんな感じかな? Sub Sheet_Move_Middle()  If Sheets.Count = 1 Then End  ActiveSheet.Move After:=Sheets(Int(Sheets.Count / 2)) End Sub

vba_minarai
質問者

補足

こんばんわ!! 説明が悪くてすみません。 総シート数の真ん中のシートの選択の方法ではなくって、任意のシートを選択すると選択されたシートが、シート見出しの中心に表示されるという意味です!!たとえばシートがSheet1~Sheet200まであったとすると、当然ディスプレイ上にSheet1~Sheet200まで一気に表示出来る訳ではないと思います。ディスプレイの解像度にもよると思いますが、せいぜい10シート分の表示が関の山だと思います。で、シート見出しに表示されている中で、選択シートが中心にくる方法を知りたいと思っています。まず、ディスプレイの解像度と、windowオブジェクトの関係を計算しないと駄目だと考えますが?あさはかな考えでしょうか?再度、ご指導のほど宜しくお願いいたします。

関連するQ&A

  • シートを増やすVBA

    フィルタで隠れている場合もある列の値を シート名として増やしていくVBAで以下のようなものをつくりました (値は重複している場合もある) 雛型シートがありそれをシート名だけ増やしていくというものです Sub シートを増やす() Dim target As Range Dim h As Range On Error Resume Next Set target = Worksheets("一覧シート").Range("E10:E" & Worksheets("一覧シート").Range("E65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible) If target Is Nothing Then Exit Sub 'シートを増やしていく For Each h In target On Error GoTo errhandle Worksheets(h.Value).Select On Error GoTo 0 Next Sheets("一覧シート").Select Exit Sub errhandle: Worksheets("雛型").Copy after:=Worksheets(Worksheets.Count) ActiveSheet.Name = h.Value Resume End Sub そうすると、実行エラー1004 ”シートの名前をほかのシート、Visual Basicで参照されるオブジェクトライブラリまたはワークシートと同じ名前に変更することはできません。” というエラーがたまにおきます(シート名が数字の場合におきるようです) 解決方法及び理由をご教授ください

  • セルの値をシート名にするエクセルVBA

    件名のVBAを以下のように書きました B列の4からずっと下までのセルの値を次々とシート「ひな型」をコピーし増やしていくものです。 Sub テスト() ' ' Macro ' ' Dim target As Range Dim h As Range '見えてるセルを取得する。「全部隠れていた」場合も考える。 On Error Resume Next Set target = Worksheets("Sheet1").Range("B4:B" & Worksheets("Sheet1").Range("B65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible) If target Is Nothing Then Exit Sub 'シートを増やしていく For Each h In target On Error GoTo errhandle Worksheets(CStr(h.Value)).Select On Error GoTo 0 Next Sheets("Sheet1").Select Exit Sub errhandle: Worksheets("ひな型").Copy after:=Worksheets(Worksheets.Count) ActiveSheet.Name = h.Value Resume End Sub これだと、一応思った通りにはなるのですが B列のセルに複数同じ名前があった時に、既に作ったシートの名前がある場合 それは無視するという風に実行したいです お知恵をお貸しくださいませ

  • シート名でなくindex番号でシートの移動をしたい

    windows7 Excel2007でマクロ作成の初心者です。以下の点で困ってます。ご指導お願いします。 シートの次ページへ、およびページの前に戻るというコードをつくりましたが、文字列でなく、indexを使ってつくりたのでですが、思うようになりません。 現在のコードは Private Sub 次ページへ_Click() If ActiveSheet.Name <> "23.日本太郎" Then ActiveSheet.Next.Activate End If End Sub ---------------------------------- Private Sub 前に戻る_Click() On Error Resume Next If ActiveSheet.Name <> "1.日本花子" Then ActiveSheet.Previous.Activate End If End Sub これを Dim i As Integer For i = 1 To Worksheets.Count - 6 などを使って作りたいです、なぜかというとシートの増減で名前が変わったとき、いちいち名前を変更しなければならないからです。

  • ピボットテーブルの集計結果は「sheet1」に出力されます。集計結果を

    ピボットテーブルの集計結果は「sheet1」に出力されます。集計結果を繰り返し出力すると「sheet2」、「sheet3」・・・・と続きますが、集計結果を出力するたびに同じシートに上書きしてすることはできないでしょうか? これをVBAで行いたいのでコードを教えていただけると幸いです。 ちなみに、以下のコードをWEBで見つけシートモジュールに置きましたが、上手く動きませんでた。 'SheetModule Option Explicit '------------------------------------------------- Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _                     Cancel As Boolean)   If Me.PivotTables.Count = 0 Then Exit Sub   Dim r As Range   On Error Resume Next   Set r = Intersect(Target, Target.PivotTable.DataBodyRange)   On Error GoTo 0   If Not r Is Nothing Then     Application.OnTime Now, Me.CodeName & ".test1"     Set r = Nothing   End If End Sub '------------------------------------------------- Private Sub test1()   Const sName = "pvtDetail"   On Error Resume Next   Application.DisplayAlerts = False   Sheets(sName).Delete   Application.DisplayAlerts = True   On Error GoTo 0   ActiveSheet.Name = sName End Sub '------------------------------------------------- 私の書いたピボットテーブルの標準モジュールは以下になります。 Sub 廃止部品と使用製品一覧作成(ByVal Arg) ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "対象一覧!" & Arg).CreatePivotTable TableDestination:="", TableName:= _ "ピボットテーブル1" ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select ActiveSheet.PivotTables("ピボットテーブル1").SmallGrid = False ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:=Array("EAB品番", _ "SEB品番", "使用製品名", "生産場所"), ColumnFields:=Array("メーカー名", "メーカー品名") ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("使用数").Orientation = _ xlDataField End Sub 私のコードが悪くWEBで見つけたコードが動かないのか分かりませんが、ピボットテーブルの出力結果を常に同じシートに上書きするコードが知りたいです。 よろしくお願い致します。

  • EXCEL VBA 複数シート選択の方法

    エクセルVBAのシート選択方法について教えてください。 選択対象シート数は4つで、シート名は、「101」「102」「103追加工」「104」とします。 シート名「表紙」のセルは A1:101 A2:102 A3:103追加工 A4:104となっており、 使用者はB1~B4セルに「○」「×」を入力し、 「○」となっているシートのみ選択出来るようにしたい。 下記マクロの場合、シート名が全角文字だと使えるのですが、 シート名が「101」のように半角数字だけの場合コピーできません。 どこを修正すればよいのでしょうか? Sub TestSample2() Dim c As Range Dim flg As Boolean On Error Resume Next flg = True ThisWorkbook.Activate  With Worksheets("表紙")  For Each c In .Range("B1:B4")   If c.Value Like "○*" Then     Worksheets(c.Offset(, -1).Value).Select flg     flg = False   End If  Next c End With  With ActiveWindow.SelectedSheets  If .Count > 0 Then    .Copy  End If  End With  '元のシートに戻る場合  'Application.Goto ThisWorkbook.Worksheets("表紙").Range("A1") End Sub

  • オートシェイプの削除時のエラー回避法

    エクセルのVBで教えてほしいんですが、 以下のもので 実行時エラー'1004': 指定したコレクションに対するインデックスが境界を越えています とエラーがでます Sub delgrf() Sheets("断面図").Select For i = 1 To 1000 ActiveSheet.Shapes.Range(Array(1)).Delete On Error GoTo 10 Next i 10 Sheets("入力").Select End Sub sheet断面図に何もないときに実行すると ActiveSheet・・・でエラーします(当然だけど;^^) 「断面ありませんよ~」みたいなダイアログ表示して 実行時エラーを回避できるにはどうしたらいいですか? ご教授お願いします。

  • エクセルでマクロを使って新規シートを作成する方法を教えてください!(条件あります)

    初めて質問するのですが、エクセルで原紙シートのマクロまで全てをコピーして新規のシートを作成させるにはどうしたらいいですか? 新規のシートの特定のセルに入力した時に新規シートが作成されるようにできますか? 原紙は Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Target.Address = "$A$1" Then ActiveSheet.Name = Target.Value End If End Sub のマクロが現在できあがってます。これを残しつつできますか?よろしくお願いします!

  • Excelマクロでファイル名を任意指定したい

    下記のVBAでアクティブにしたいファイル名を任意に指定したり、新しく作成したシート名を任意に指定出来るようにしたいと思っています。ご助言を頂ければ幸いです。 Sub 名別_M() ' 名別_M Macro ' Cells.Select Selection.Delete Shift:=xlUp ' MsgBox "挿入する「ファイル」を選択してください" On Error Resume Next With CreateObject("WScript.Shell") .currentdirectory = ThisWorkbook.Path End With On Error GoTo 0 Workbooks.Open "C:\Users\user\Desktop\Excel\自己練習\Sample2.xlsx" '←パスとファイル名を分けてファイル名を任意で指定したい。 Workbooks("Sample2.xlsx").Activate '←上記で任意に指定したファイル名を入れたい。 Range("A1").Select On Error Resume Next Application.DisplayAlerts = False Sheets("名別").Delete Application.DisplayAlerts = True On Error GoTo 0 Dim NewSheetName As String NewSheetName = InputBox("元データのあるシート名を入力ください") If NewSheetName = "" Then Exit Sub '下記ではシート名を「名別」で固定しているが、これも任意に指定したい。 Sheets.Add ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "シート1!R1C1:R95C18", Version:=xlPivotTableVersion14).CreatePivotTable _ TableDestination:="Sheet1!R3C1", TableName:="ピボットテーブル2", DefaultVersion _ :=xlPivotTableVersion14 Sheets("Sheet1").Select Sheets("Sheet1").Name = "名別" Cells(3, 1).Select With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("UserName") .Orientation = xlRowField .Position = 1 End With ActiveSheet.PivotTables("ピボットテーブル2").AddDataField ActiveSheet.PivotTables( _ "ピボットテーブル2").PivotFields("作業時間"), "合計 / 作業時間", xlSum ActiveSheet.PivotTables("ピボットテーブル2").CompactLayoutRowHeader = "UserName" Rows("1:2").Select Selection.Delete Shift:=xlUp Range("C16").Select MsgBox "上書き保存します" On Error Resume Next ActiveWorkbook.Save If Err.Number > 0 Then MsgBox "保存されませんでした" End Sub

  • シ-トの先頭に(A)と付けるには

    Sub sheet1の複写() j = 1 For i = ◯ To ◯ Sheets("sheet1").Copy After:=Sheets("sheet1") On Error GoTo ERRO ActiveSheet.Name = Sheets("sheet1").Range("◯" & i).Value & "-" & j Next Exit Sub ERRO: If Err.Number = 1004 Then j = j + 1 End If Resume End Sub 上記のマクロは、以前の質問でシ-トに自動で末尾に-1.-2.-3・・・と付けるにはの質問でした。 今度は先頭に(A)と付けるにはどうしたらよいですか お教えください。 エクセル2003です。

  • 複数シートの選択

    エクセルVBAで複数シートの選択をしたいのです。 シート名やシートの位置が変更される可能性があるので オブジェクトで指定したいのですが 記述方法が分かりません。 ##シートの位置 Sub mac1() Worksheets(Array(2,5)).Select End Sub ##シート名 Sub mac2() Worksheets(Array("aaa","あああ")).Select End Sub

専門家に質問してみよう