如何从Excel存储的Active Directory csvde导出数据中提取CN值
Excel提取AD导出字段中所有CN值的实现方案
以下三种方案可适配不同版本的Excel环境,按需选择即可:
方案1:Excel 365/2021及以上版本(单公式直接输出)
直接在A2单元格输入如下公式:
=TEXTJOIN(";",TRUE,TEXTBEFORE(TEXTAFTER(TEXTSPLIT(A1,";"),"CN="),","))
公式逻辑说明:
- 先用
TEXTSPLIT(A1,";")把A1的内容按分号拆分为多个独立的DN字符串 - 再用
TEXTAFTER(..., "CN=")提取每个DN中CN=后面的内容 - 接着用
TEXTBEFORE(..., ",")截掉第一个逗号之后的多余内容 - 最后用
TEXTJOIN把所有提取到的CN值拼接,分隔符可自行修改,比如替换为CHAR(10)后开启单元格自动换行,即可实现每行显示一个CN值
方案2:旧版本Excel(无动态数组函数)
采用辅助列+拼接的方式实现:
- 从B1单元格开始输入如下公式,下拉填充到足够多的行(行数大于等于A1中包含的CN数量即可):
=IFERROR(MID(LEFT(SUBSTITUTE(MID(";"&A1,FIND(";CN=",";"&A1,ROW(A1)),999),",",REPT(" ",999)),999),4,999),"")
- 回到A2单元格输入拼接公式,把辅助列的非空结果合并:
=TEXTJOIN(";",TRUE,B:B)
如果是2016及更早、没有TEXTJOIN函数的Excel版本,可以直接手动复制辅助列的非空值,或使用PHONETIC函数拼接(仅适配纯文本内容,当前场景可用)。
方案3:VBA自定义函数(全版本适配,可反复调用)
适合需要频繁处理同类AD导出数据的场景:
- 按
Alt+F11打开VBA编辑器,右键当前工作簿选择「插入-模块」 - 粘贴如下代码后保存:
Function ExtractCN(rng As Range) As String Dim arr As Variant, i As Integer, cn As String arr = Split(rng.Value, ";") For i = LBound(arr) To UBound(arr) If InStr(arr(i), "CN=") > 0 Then cn = Mid(arr(i), InStr(arr(i), "CN=") + 3) cn = Left(cn, InStr(cn, ",") - 1) ExtractCN = ExtractCN & IIf(ExtractCN <> "", ";", "") & cn End If Next End Function
- 回到Excel界面,在A2单元格输入
=ExtractCN(A1)即可直接得到结果。
示例数据输出结果
你提供的A1内容经上述方案处理后,输出如下:
Organization Management;Discovery Management;VPN Users;Debugger Users;Wireless Users;Users;Exchange Public Folder Administrators;Exchange Organization Administrators
内容的提问来源于stack exchange,提问作者user3569698
相关产品推荐
相关产品推荐

