繁体   English   中英

excel 宏来格式化数据

[英]excel macro to format data

我有如下数据格式,

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

我需要使用 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

提前致谢

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

请给我一个反馈,这有点工作。 (如果它对您有用,接受答案就可以了)。

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

有关从 A -> 印度和 B -> 中国的简单映射,请查看 VLOOKUP function。 这是一个简单的例子:a8 到 b11 是

a China
b India
c Russia
d Brazil

如果您在 a2 中有一个“a”,那么这个 vlookup function 将满足您的需求:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM