String excel宏来格式化数据

String excel宏来格式化数据,string,excel,formatting,String,Excel,Formatting,我的数据格式如下所示 Date User Time Status Domain 2011Apr18 ID:user1) 10:26:55.078> loggedinto A 2011Apr18 ID:user1) 14:09:31.010> loggedout A 2011Apr18 ID:user1) 14:10:37.473> loggedinto A 2011Apr18 ID:us

我的数据格式如下所示

Date User Time Status Domain 2011Apr18 ID:user1) 10:26:55.078> loggedinto A 2011Apr18 ID:user1) 14:09:31.010> loggedout A 2011Apr18 ID:user1) 14:10:37.473> loggedinto A 2011Apr18 ID:user1) 15:59:55.899> loggedinto A 2011Apr18 ID:user1) 16:22:05.335> loggedout A 2011Apr18 ID:user2) 16:59:00.769> loggedinto A 2011Apr18 ID:user2) 17:14:52.169> loggedout A 2011Apr19 ID:user1) 10:05:44.102> loggedinto A 2011Apr19 ID:user3) 11:54:27.713> loggedinto C 日期用户时间状态域 2011Apr18 ID:user1)10:26:55.078>LoggeDina 2011Apr18 ID:user1)14:09:31.010>日志数据A 2011Apr18 ID:user1)14:10:37.473>LoggeDina 2011Apr18 ID:user1)15:59:55.899>LoggeDina 2011Apr18 ID:user1)16:22:05.335>日志数据A 2011年1月18日ID:user2)16:59:00.769>LoggeDina 2011Apr18 ID:user2)17:14:52.169>日志数据A 2011Apr19 ID:user1)10:05:44.102>LoggeDina 2011Apr19 ID:user3)11:54:27.713>loggedinto C 我需要有以下格式的数据使用excel宏..这里再次基于域,国家需要像(A->印度,B->中国)地图…请帮助跨越

Date user Logged into Logged out Domain Country 2011Apr18 ID:user1) 15:59:55.899> 16:22:05.335> A India 2011Apr18 ID:user1) 16:22:05.335> 17:14:52.169> A India 2011Apr18 ID:user2) 16:59:00.769> 10:05:44.102> A India 2011Apr18 ID:user2) 17:14:52.169> 15:59:55.899> A India 2011Apr19 ID:user1) 10:05:44.102> 17:14:52.169> B China 用户登录注销域国家/地区的日期 2011Apr18 ID:user1)15:59:55.899>16:22:05.335>A印度 2011Apr18 ID:user1)16:22:05.335>17:14:52.169>A印度 2011Apr18 ID:user2)16:59:00.769>10:05:44.102>A印度 2011Apr18 ID:user2)17:14:52.169>15:59:55.899>A印度 2011Apr19 ID:user1)10:05:44.102>17:14:52.169>B中国
提前感谢

提供了a->India和B->China的简单映射,请查看VLOOKUP函数。这里有一个简单的例子:a8到b11是

a China
b India
c Russia
d Brazil
如果a2中有一个“a”,那么这个vlookup函数将满足您的要求:

=VLOOKUP(A2,$A$8:$B$11,2)

其中a2是查找值,$a$8:$b$11是表,2表示要返回b列(第二列)。

我在这里为您编写了一个小脚本。启动ReFormat()以创建新表。它读取活动工作表中的当前数据并将其放入数组中。然后我在同一张表中从G1开始创建新表

请给我一个反馈,这是一个小的工作。(如果对你有用,接受答案就好了)


您必须使用VBA,尤其是处理用户在同一域上登录两次而未注销的情况,例如,示例的第3行和第4行。在这种情况下,您希望结果是什么?@corbett:那么让那些记录的注销时间字段为空。但无论如何,我需要这种格式。
Option Explicit

Dim DataArray() As String
Dim lngRow As Long, lngLastRow As Long
Dim intColumn As Integer

Sub ReFormat()

    Dim ResultTable As Range
    Dim CurrentResultRow As Long
    Dim i As Long

    FillSourceArray

    Set ResultTable = ActiveSheet.Range("G1")
    CurrentResultRow = 0

    ResultTable.Offset(CurrentResultRow, 0).Value = "Date"
    ResultTable.Offset(CurrentResultRow, 1).Value = "user"
    ResultTable.Offset(CurrentResultRow, 2).Value = "Logged into"
    ResultTable.Offset(CurrentResultRow, 3).Value = "Logged out"
    ResultTable.Offset(CurrentResultRow, 4).Value = "Domain"
    ResultTable.Offset(CurrentResultRow, 5).Value = "Country"

    CurrentResultRow = CurrentResultRow + 1

    For i = 1 To lngLastRow - 1
        If (DataArray(i, 3) = "loggedinto") Then
            ResultTable.Offset(CurrentResultRow, 0).Value = DataArray(i, 0)
            ResultTable.Offset(CurrentResultRow, 1).Value = DataArray(i, 1)
            ResultTable.Offset(CurrentResultRow, 2).Value = DataArray(i, 2)
            ResultTable.Offset(CurrentResultRow, 3).Value = SearchLogOut(DataArray(i, 1), i + 1)
            ResultTable.Offset(CurrentResultRow, 4).Value = DataArray(i, 4)
            ResultTable.Offset(CurrentResultRow, 5).Value = SearchCountry(DataArray(i, 4))
            CurrentResultRow = CurrentResultRow + 1
        End If

    Next i

End Sub

Function SearchLogOut(user As String, Start As Integer) As String
    Dim i As Long

    For i = Start To lngLastRow - 1
        If ((DataArray(i, 1) = user) And (DataArray(i, 3) = "loggedout")) Then
            SearchLogOut = DataArray(i, 2)
            Exit For
        ElseIf ((DataArray(i, 1) = user) And (DataArray(i, 3) = "loggedinto")) Then
            SearchLogOut = ""
            Exit For
        End If
    Next i

End Function

Function SearchCountry(Country As String) As String
    Select Case Country
        Case "A"
            SearchCountry = "India"
        Case "B"
            SearchCountry = "China"
    End Select

End Function

Sub FillSourceArray()

    'Read the Source Data
    lngLastRow = Cells(Rows.Count, 1).End(xlUp).Row
    ReDim DataArray(lngLastRow - 1, 4)

    For lngRow = 1 To lngLastRow
      For intColumn = 1 To 5
        DataArray(lngRow - 1, intColumn - 1) = Cells(lngRow, intColumn)
      Next intColumn
    Next lngRow

End Sub