用户权限数据转换为用户组列表(1/3) - VBA

82 篇文章 6 订阅
56 篇文章 4 订阅

实例需求:如下是AD用户的列表,每个用户拥有该应用程序的只读或读写权限,现在需要创建新的AD用户组,并根据用户当前的权限,将这些用户添加到相应的组中。

当前数据集:

SafeUserNameRead permissionsRW permissions
Safe1User1YesYes
Safe1User2YesNo
Safe1User3YesYes
Safe1User4YesNo
Safe2User1YesYes
Safe2User2YesNo
Safe2User3YesYes
Safe2User4YesNo

整理后输出数据集:

SafeADGroup Userlist
Safe1Safe1-ReadGroupUser1,User2,User3,User4
Safe1Safe1-RWGroupUser1,User3
Safe2Safe2-ReadGroupUser1,User2,User3,User4
Safe2Safe2-RWGroupUser1,User3
Sub demo()
    Dim aData, Dic, sPerm, sKey, i
    Dim oSht As Worksheet, sShtName As String
    aData = Sheets("Sheet1").[a1].CurrentRegion.Value
    Set Dic = CreateObject("scripting.dictionary")
    For i = 2 To UBound(aData)
        If aData(i, 3) = "Yes" Then
            sKey = aData(i, 1) & "-ReadGroup"
            If Dic.Exists(sKey) Then
                Dic(sKey) = Dic(sKey) & "," & aData(i, 2)
            Else
                Dic(sKey) = aData(i, 2)
            End If
        End If
        If aData(i, 4) = "Yes" Then
            sKey = aData(i, 1) & "-RWGroup"
            If Dic.Exists(sKey) Then
                Dic(sKey) = Dic(sKey) & "," & aData(i, 2)
            Else
                Dic(sKey) = aData(i, 2)
            End If
        End If
    Next i
    sShtName = "Output" 
    On Error Resume Next
    Set oSht = Sheets(sShtName)
    On Error GoTo 0
    If oSht Is Nothing Then
        Set oSht = Sheets.Add
        oSht.Name = "Output"
    Else
        oSht.Cells.Clear
        oSht.Select
    End If
    [a1:c1] = Array("Safe", "AD Group", "UserList")
    aData = Dic.keys
    Range("B2").Resize(Dic.Count, 1).Value = Application.Transpose(aData)
    Range("C2").Resize(Dic.Count, 1).Value = Application.Transpose(Dic.items)
    For i = 0 To UBound(aData)
        aData(i) = Split(aData(i), "-")(0)
    Next
    Range("A2").Resize(Dic.Count, 1).Value = Application.Transpose(aData)
    Columns("A:C").EntireColumn.AutoFit
End Sub

【代码解析】
第4行代码将原始数据读取到数组中。
第5行代码创建字典对象以保存数据。
第6~23行循环处理每行数据。
第7~14行代码根据Read permissions列,并将用户名添加到对应键的值中。
第8行代码判断用户是否具备读Read permissions权限。
第9行代码判断字典对象中是否已经有相应的用户组。

  • 如果存在,第10行代码将用户追加到用户列表中。
  • 如果不存在,第10行代码将创建新用户组,并将用户添加到用户列表中。.

与此类似,第15~22行代码根据RW permissions列,并将用户名添加到对应键的值中。
第24行代码设置输出工作表名称。
第25~34行代码查结果输出表是否存在,不存在则创建新表。
第35行代码向结果表写入表头。
第36行代码获取字典的键列表。
第37行代码将键列表写入结果表AD列。
第38行代码将字典的值列表写入结果Group Userlist列。
第39~41行代码从字典键值中提取Safe列信息。
第42行代码将Safe列写入输出表。
第43行代码设置自动列宽。


小结:
当需要对数据进行分组处理时,字典对象是一个很好的选择。使用字典对象可以方便地按照键值存储分组信息,通过拼接键的方式可以灵活生成不同的分组。


相关系列博文链接:

用户权限数据转换为用户组列表(1/3) - VBA
用户权限数据转换为用户组列表(2/3) - Power Query
用户权限数据转换为用户组列表(3/3) - Excel PY公式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值