読者です 読者をやめる 読者になる 読者になる

或阿呆のブログ

Pythonを好んで使っているプログラマです。Ruby,Perl,PowerShell,VBAなどでもたまに書いています。おバカなことが大好きです。

Excel VBAでブックの使用者履歴を自動的に記録する。 #Excel #VBA

作ろうと思った背景

このブック最後に触ったの誰?と気になることがあります。そんなとき用に。
f:id:oneshotlife_tom:20150815211042j:plain
↑こんな風に使用者の履歴があると便利ですよね?

サンプルコード

Private Sub Workbook_Open()
    Const sheet_name = "使用者履歴"      'シート名
    Const col_username = 1               '列アドレス(ユーザー名)
    Const col_date = 2                   '列アドレス(日付)
    Const col_time = 3                   '列アドレス(時間)
    
    Dim last_row As Integer              '最終行
    
    With ThisWorkbook.Sheets(sheet_name)
        '最終行取得
        last_row = .Cells(1, col_username).End(xlDown).Row
    
        '使用者設定
        .Cells(last_row + 1, col_username).Value = Environ("USERNAME")
        .Cells(last_row + 1, col_date).Value = Date
        .Cells(last_row + 1, col_time).Value = Time
    End With
End Sub

ご自分の好きなようにシート名「使用者履歴」は変えてくださいね!

コメント

Workbook_Open

ブックを開いた際に自動的に呼ばれる特殊なプロシージャです。

Const

Const修飾子は、定数を定義する際に使います。Const修飾子を付けると、値の変更が出来ません。うっかり値を変更されたく無い場合に使うとよいと思います。

自身のブックオブジェクト

ThisWorkbookには、自身のブックオブジェクトが格納されています。

最終行取得

以下のいずれかで取得出来ます。

Cells(1, 1).End(xlDown).Row
Range("A1").End(xlDown).Row

With

同じオブジェクトを操作する場合に使うと便利です。以下は、同義です。

    With ThisWorkbook.Sheets(sheet_name)
        '最終行取得
        last_row = .Cells(1, col_username).End(xlDown).Row
    
        '使用者設定
        .Cells(last_row + 1, col_username).Value = Environ("USERNAME")
        .Cells(last_row + 1, col_date).Value = Date
        .Cells(last_row + 1, col_time).Value = Time
    End With
    '最終行取得
    last_row = ThisWorkbook.Sheets(sheet_name).Cells(1, col_username).End(xlDown).Row
    
    '使用者設定
    ThisWorkbook.Sheets(sheet_name).Cells(last_row + 1, col_username).Value = Environ("USERNAME")
    ThisWorkbook.Sheets(sheet_name).Cells(last_row + 1, col_date).Value = Date
    ThisWorkbook.Sheets(sheet_name).Cells(last_row + 1, col_time).Value = Time

比べてみればわかりますけど、同じオブジェクトを何回も書くのはあまりスマートではありません。積極的にWithを使いましょう。

ユーザー名を取得

Windows環境変数を参照するには、Environ関数を使えばよい。ユーザー名を取得する際にはUSERNAMEを使う。

参考書籍

ストーリーで学ぶ Excel VBAと業務改善のポイントがわかる本 【演習問題付き】

ストーリーで学ぶ Excel VBAと業務改善のポイントがわかる本 【演習問題付き】

  • 作者: 武藤玄,オデッセイコミュニケーションズ
  • 出版社/メーカー: オデッセイ コミュニケーションズ
  • 発売日: 2013/07/05
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログ (3件) を見る
EXCEL VBA 業務自動化 [ビジテク] 仕事の効率を劇的に上げるノウハウ 2013/2010/2007対応

EXCEL VBA 業務自動化 [ビジテク] 仕事の効率を劇的に上げるノウハウ 2013/2010/2007対応