はじめに
それなりの規模の会社様ではActive Directoryでユーザーの管理をされているのではないでしょうか?最近ではEntra IDとIntuneですべての管理される会社様も一定数出てきてますが、まだまだActive Directoryに依存している会社様は多いと思います。Active Directoryのユーザーは会社に所属するユーザーになりますので、当然入退社処理が発生します。入退社処理は人事部門が極秘に持っているものであり、Active Directoryを管理する情報システム部門には入退社日の当日にしか情報が出てこず、入退社日当日に今すぐ対応してくれと言われることも良くある話と思います。
Active Directoryのユーザー情報は、ドメインのユーザーであれば管理者権限を持たない一般ユーザーであったとしても情報を取得することは可能です。つまり、既存の情報を取得する、入退社情報を入力する、登録情報をアップロードするまでは人事部がやってもらえる仕組みを作ってしまえば、入退社の極秘情報がいつ出てきても情報システム部門では夜間のタスク実行などで自動化処理が可能になります。

世の中にはActive Directoryのユーザーやグループを管理するためのサポートがついたツールがありますので、この記事みたいに独自に作成することはお勧めしてません。トラブルが起きたときに誰も対応できないなどの問題が起こる場合があります。
前提条件
Active Directoryの設計次第でVBAは変更が必要になります。汎用的なソースコードにはどうしてもならないため、Active DirectoryおよびVBAのある程度知識がある方向けの記事となります。
Excel VBAを使って処理を行いますので、VBA実行が許可された環境でご利用をお願いいたします。
【準備する環境】
- ドメイン参加済みのパソコン
- Domain Usersグループに所属するユーザー
- Excel(マクロ有効可能な環境)
ActiveDirectoryからユーザー情報を取得する
まずはActiveDirectoryユーザーのどの情報が必要かを整理しましょう。
代表的な属性値を参考までに記載します。その他属性についてはこの辺りをご参考にしていただければと思います。
ActiveDirectoryユーザーのGUI上表示 | 属性値 |
---|---|
姓 | sn |
名 | givenName |
表示名 | displayName |
説明 | description |
事業所 | physicalDeliveryOfficeName |
電話番号 | telephoneNumber |
メールアドレス | |
Webページ | wWWHomePage |
国 | co |
郵便番号 | postalCode |
都道府県 | st |
市区町村 | l |
私書箱 | postOfficeBox |
番地 | streetAddress |
ユーザーログオン名 | userPrincipalName |
ユーザーログオン名(Windows2000より前) | sAMAccountName |
Excelでの事前準備
最初にExcelでデータを取得した時の表示部分を作成します。一旦イメージを貼っておきますが、必要な情報に合わせて修正してください。

今回はADOを使って情報を取得する前提としています。まず最初に利用するExcelファイルでライブラリを追加していただく必要があります。今回追加するライブラリは以下の通りです。この記事では不要なものも追加している可能性があります。この先編集されたリストをエクスポートする記事で利用するものになります。
- Microsoft ActiveX Data Objects 6.1 Library
- Active DS TypeLibrary
- Microsoft Scripting Runtime
- Microsoft Forms 2.0 Object Library
ユーザーリストを取得するためのVBA
下記にサンプルコードを貼っておきます。各社様の環境に合わせて修正して使ってください。
Private Sub 情報取得_Click() Dim con As ADODB.Connection Dim cmd As ADODB.Command Dim rs As ADODB.Recordset Dim i As Long Set con = CreateObject("ADODB.Connection") Set cmd = CreateObject("ADODB.Command") con.Provider = "ADSDSOObject" con.Open "ADs Provider" Set cmd.ActiveConnection = con cmd.Properties("Page Size") = 1000 cmd.Properties("Searchscope") = 2 'ユーザ情報取得 Set rs = con.Execute( _ "<LDAP://ou=00000,dc=engineer-base,dc=local>;" _ & "(objectCategory=user);sAMAccountName,cn,sn,givenName,mail,title,department,physicalDeliveryOfficeName,l;subtree") i = 5 Do Until rs.EOF On Error Resume Next Cells(i, 2) = rs.Fields(0).Value Cells(i, 4) = rs.Fields(2).Value Cells(i, 5) = rs.Fields(3).Value Cells(i, 6) = rs.Fields(4).Value Cells(i, 7) = rs.Fields(5).Value Cells(i, 8) = rs.Fields(6).Value rs.MoveNext i = i + 1 On Error GoTo 0 Loop Set rs = Nothing Set com = Nothing Set cmd = Nothing End Sub
まとめ
この方法は一般ユーザーの権限で実行可能である点が一番のメリットです。ITリテラシーのそこまで高くない人事部のメンバーでもExcel上でユーザー情報を追加・編集などは容易に対応できるものと思います。この後、作られたExcelのリストからCSVをサーバーにアップロードする処理とアップロードされたCSVをタスクスケジューラーを使ってAcrtive Directory のユーザーを登録・変更・削除する処理を書くことで、なんちゃって自動化が完成します。
どうしても会社を説得できなかった場合を除いてサポート付きのツールを契約しましょう。この記事みて参考にしていただけるのはありがたいですが、誰も仕様がわからない闇のツールが爆誕する可能性があります。