【Excelマクロ】現在開いている全エクセルの全SheetのアクティブセルをA1にする【あったら便利かもしれない】
変更履歴
- 初版作成(2020/10/24)
Introduction
Excel方眼紙問題
設計書、報告書、メモ書き、テストパターンを自作する、毎朝の体温チェック記録、、、
現在は令和2年10月ですが、Excelを見ない日はありません。
世の中の全てがExcelで回っているのかと錯覚するがごとく、Excelを毎日見ます。
そんなある日、全てのエクセルのシートが左上から始まっていれば 綺麗だなと思いました。
(たまに、わけわからん場所が初期表示されてて「???」となることがあります)
というか、みんなが適切なツール(Markdownとか)使えばよいのでは
そういうやつ、自動でできる何か、ネットにないか探しました
ありませんでした。
正確には、クリティカルなものがありませんでした。
なお、参考リンクはこの記事の末尾にまとめています。
マクロ(xlsmファイル)を組んで、自分自身(xlsmファイル)のアクティブセルを「A1」にするのは見つかりましたが、
先輩、上司、過去の偉人が作成した【ネ申エクセル】の中にマクロをぶち込むのはちょっと厳しい。
あくまでも、
- 完成されたxlsxファイルに対し
- それ自身を改変することなく
- 外部からちょっとだけいじる
を達成したい。
Programming
今回作成したマクロ有効ブックと同時に、位置調整をかけたいエクセルブックを起動します。
本マクロを起動すると、ダイアログボックスが出現して、、、
「はい」を押すと実行、「いいえ」を押すと実行しません。
処理完了後、次のブックに対し再度チェックを掛けます。
仕様
対象 : 本マクロと同時に開いている全ブック
-
実行内容
- アクティブセルを「A1」へ移動
- 表示倍率を100%に設定
- アクティブシートを、先頭(一番左の)シートに? ←要検証
- 全Bookを最大化表示
実装
-
ボタンを用意しました
-
ボタン(名称
Button1
)を押すと、FixAllBooks()
を呼びます。''' ******************************************************* ''' <summary> ''' ボタンをクリック時、各マクロを実行 ''' </summary> ''' <remarks> ''' 2020/10/24 初版 ''' </remarks> ''' ******************************************************* ''' ******************************************************* ''' <summary> ''' 開いている全ブックに対し、 ''' 全シートのアクティブセルを「A1」に設定し、表示倍率を100%とする。 ''' </summary> ''' ******************************************************* Sub Button1_Click() Call FixAllBooks End Sub
-
FixAllBooks()
はFixAllSheets()
を呼び、それはFixCellPosition()
を呼びます。''' ******************************************************************************** ''' <summary> ''' 開いている全ブックに対し、 ''' 全シートのアクティブセルを「A1」に設定し、表示倍率を100%とする。 ''' </summary> ''' <remarks> ''' 開いているブックを検知し、各ブックに対して『FixAllSheets()』を実行 ''' ''' 2020/10/04 初版 ''' </remarks> ''' ******************************************************************************** Sub FixAllBooks() Dim message As String Dim rtn As Integer ' 画面更新の停止 Application.ScreenUpdating = False For Each book In Workbooks message = "『" & book.Name & "』" & vbCrLf _ & vbCrLf _ & "の全シートについて、" & vbCrLf _ & "アクティブセルをA1セルへ設定し、表示倍率を100%とします。" rtn = MsgBox(message, vbYesNo) If rtn = vbYes Then ' マクロ実行 book.Activate ' 現在処理中のブックをアクティブに Call FixAllSheets ActiveWindow.WindowState = xlMaximized 'Excelを最大化 MsgBox ("実行しました。") End If Next ' 画面更新の再開 Application.ScreenUpdating = True End Sub ''' -------------------------------------------------------------------------------- ''' <summary> ''' アクティブなブックに対し、各シートに対して『FixCellPosition()』を実行 ''' </summary> ''' -------------------------------------------------------------------------------- Sub FixAllSheets() Dim sht As Worksheet '// 処理中のワークシート Dim shtVisible '// 表示可能なワークシート Dim iRow, iCol '// 縦、横座標 Dim sHiddenSheet '// 非表示シート名 Dim oFilterStatus As AutoFilter '// オートフィルタ状態 Dim oRangeFilter As Range '// オートフィルタ設定 For Each sht In Worksheets If (IsEmpty(shtVisible) = True) And (sht.Visible = xlSheetVisible) Then Set shtVisible = sht End If '// シートが表示されている場合 If sht.Visible = xlSheetVisible Then Call FixCellPosition(sht) '// シートが非表示の場合 Else sHiddenSheet = sHiddenSheet & "、" & sht.Name sht.Visible = xlSheetVisible Call FixCellPosition(sht) sht.Visible = xlSheetHidden End If Next shtVisible.Select If (sHiddenSheet <> "") Then MsgBox sHiddenSheet, vbOKOnly, "非表示シートあり" End If End Sub ''' -------------------------------------------------------------------------------- ''' <summary> ''' 現在のシートに対し、アクティブセルを「A1」に設定して表示倍率を100%とする。 ''' </summary> ''' -------------------------------------------------------------------------------- Sub FixCellPosition(ByVal sht As Worksheet) sht.Select '// ウインドウ枠の固定がされている場合 If ActiveWindow.FreezePanes = True Then iRow = ActiveWindow.SplitRow + 1 iCol = ActiveWindow.SplitColumn + 1 Cells(iRow + 1, iCol + 1).Activate End If Set oFilterStatus = sht.AutoFilter '// オートフィルタが設定されている場合 If Not oFilterStatus Is Nothing Then '// フィルタが掛かっている場合 If oFilterStatus.FilterMode = True Then '// フィルタが掛かっている行の先頭を選択 Set oRangeFilter = Range("A1").CurrentRegion Set oRangeFilter = Application.Intersect(oRangeFilter, oRangeFilter.Offset(1, 0)) Set oRangeFilter = oRangeFilter.SpecialCells(xlCellTypeVisible) Range("A" & CStr(oRangeFilter.Row)).Select End If End If sht.Range("A1").Select ActiveWindow.Zoom = 100 ActiveCell.Activate ' Excel97対策 ' スクロール列の設定 ActiveWindow.ScrollColumn = 1 ' スクロール行の設定 ActiveWindow.ScrollRow = 1 End Sub
参考情報
Author And Source
この問題について(【Excelマクロ】現在開いている全エクセルの全SheetのアクティブセルをA1にする【あったら便利かもしれない】), 我々は、より多くの情報をここで見つけました https://qiita.com/Takuro_K/items/a76399cf723fe0421c21著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .