LoginSignup
6
4

More than 5 years have passed since last update.

Excelでのドキュメント作成作業を効率化していく(VBA)

Last updated at Posted at 2017-06-13

どうでもいい話

最近ドキュメント作成をすることが増えたので、日中はExcelを使います。
少しでも面倒な作業を減らしたいのでマクロ作成するようになってきたので
使ったものは残しておこうと思います。

作ったもの(※ 随時更新)

▼ 直前に居たページに戻る機能を作る

※ ひとつ前にしか戻れないです。

下記から拝借 + ボタンクリックで移動としたかったのでカスタムしました。
Excelで直前に参照していたシートに戻る(シートの参照履歴を保持する)

ThisWorkbook
'PERSONAL.XLSB ThisWorkBook

'WithEventsにてApplicationオブジェクト(Excel全体を示すオブジェクト)に発生するイベントを拾える様にする

'PERSONAL.XLSBに記述することで、全てのExcelファイルに適用される。

Public WithEvents xlAPP As Application



'Excelブックが開いた時に自動実行する。

Private Sub Workbook_Open()

    'アプリケーションオブジェクトを取得

    Set xlAPP = Application



    '標準モジュールの初回呼出し

    '直接呼び出すとエラーになるため、実行時間をずらして呼び出す。

    Application.OnTime Now + TimeSerial(0, 0, 1), "appFirst"



End Sub



'シートがアクティブになった時に自動実行する。

'(ブック内)シート間での参照履歴を保持する。

Private Sub xlAPP_SheetActivate(ByVal Sh As Object)

    oldBook = nowBook

    oldSheet = nowSheet

    nowBook = ActiveWorkbook.Name

    nowSheet = Sh.Name



End Sub



'Excelウインドウがアクティブになった時に自動実行する。

'以下によりExcelファイルを跨いでも、参照履歴が保持される。

Private Sub xlAPP_WindowActivate(ByVal Wb As Workbook, ByVal Wn As Window)

    oldBook = nowBook

    oldSheet = nowSheet

    nowBook = Wb.Name

    nowSheet = Wb.ActiveSheet.Name



End Sub
モジュール
'PERSONAL.XLSB 標準モジュール goBackSheet
'前に参照していたファイル.シートへ戻る(アクティブにする)
'マクロの実行メニューにPublicプロシージャが表示されないようにする。

Option Private Module

'参照履歴
Public oldBook  As String  '前に参照していたブック
Public oldSheet As String  '前に参照していたブック
Public nowBook  As String  '現在参照しているブック
Public nowSheet As String  '現在参照しているブック



'前に参照していたシートに戻る(Activeにする)マクロ

' ここはボタンを作ったときに生成されたファンクションです
Sub 戻る()

    'エラー発生した場合は無視する
    On Error Resume Next
    Workbooks(oldBook).Worksheets(oldSheet).Activate

End Sub


'Excel起動時に自動呼出しされるモジュール

Public Sub appFirst()

    'ファイル読込みに時間がかかるとエラーになるためスキップする
    On Error GoTo nextProc

    'ブック名・シート名を取得
    nowBook = ActiveWorkbook.Name
    nowSheet = ActiveSheet.Name

nextProc:


End Sub

▼ 選択されたセルの値を名前としたシートを作成する(範囲指定も対応)

Sub セルからタブ生成()
'
' セルからタブ生成 Macro
'
' Keyboard Shortcut: Ctrl+t
'
  Dim 項目 As Range
  For Each 項目 In Selection
        ' 「tmp」という名前のシートを複製する
        Worksheets("tmp").Copy Before:=Worksheets("tmp")
        ' 「項目」の値をシートのD8に書き込む
        Range("D8").Value = 項目.Value
        ' 「項目」の値をシートの名前にする
        ActiveSheet.Name = 項目.Value
   Next 項目
End Sub

参考

6
4
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4