Excel 如何从单元格中字符串的中间提取文本

Excel 如何从单元格中字符串的中间提取文本,excel,vba,Excel,Vba,所以我将一个日志从服务器导出到一个.csv文件。我将其转换为.xlsm文件以获取内容。我想提取从给定单元格登录的用户名。我要从中提取的所有单元格都具有以下格式: An account was successfully logged on. Subject: Security ID: NULL SID Account Name: - Account Domain: - Logon ID: 0x0 Logon Type

所以我将一个日志从服务器导出到一个.csv文件。我将其转换为.xlsm文件以获取内容。我想提取从给定单元格登录的用户名。我要从中提取的所有单元格都具有以下格式:

An account was successfully logged on.

Subject:
    Security ID:        NULL SID
    Account Name:       -
    Account Domain:     -
    Logon ID:       0x0

Logon Type:         3

New Logon:
    Security ID:        ZZZ\username
    Account Name:       username
-----------------------------
我想从这个单元格中提取用户名,并将其放入相邻的单元格中,以创建所有登录者的透视表

如何仅提取用户名?

试试以下方法:

Option Explicit

Public Sub getUserName()

    Const COL   As Long = 1
    Const AN    As String = "Account Name:"

    Dim ur As Range, v As Variant, i As Long, x As String

    Set ur = ActiveSheet.UsedRange

    v = ur.Columns(COL).Resize(ur.Row + ur.Rows.Count - 1, 2)
    For i = 1 To ActiveSheet.UsedRange.Rows.Count
        x = Right(v(i, 1), Len(v(i, 1)) - (InStrRev(v(i, 1), AN) - 1))
        x = Trim(Mid(x, Len(AN) + 1))
        v(i, 2) = Left(x, InStr(x, vbLf) - 1)
    Next
    ur.Columns(COL).Resize(ur.Row + ur.Rows.Count - 1, 2) = v
End Sub


当前设置为从A列提取到B列

问题是所有用户名的长度不同…使用InStr()获取边界字段的位置,然后您应该知道mid()调用的长度,然后执行
mid([cell],5,len([cell])
或者你可以一直作弊并使用任何数字,比如100。如果真的只有一个,那么尝试使用第二个结果。
split
by\并使用第二个结果。这个用户名在固定的行数(比如9、18、27或t)后重复吗?它是写哪一列的?例如C或D等。你能将文件的快照上载到一些加载站点(比如D)吗rop箱。