excelmacros来格式化数据

我有如下的数据格式,

date用户时间状态域
 2011Apr18 ID:user1)10:26:55.078> loggedinto A
 2011Apr18 ID:user1)14:09:31.010>已注销A
 2011Apr18 ID:user1)14:10:3​​7.473> loggedinto A
 2011Apr18 ID:user1)15:59:55.899> loggedinto A
 2011Apr18 ID:user1)16:22:05.335>注销A
 2011Apr18 ID:user2)16:59:00.769> loggedinto A
 2011Apr18 ID:user2)17:14:52.169>注销A
 A)
 2011Apr19 ID:user3)11:54:27.713> loggedinto C

我需要使用Excelmacros以下格式的数据…再次基于域,国家需要像(A->印度,B->中国)映射…请帮助跨

date用户login到注销的域国家
 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>印度
 2011Apr18 ID:user2)17:14:52.169> 15:59:55.899> A印度
 B,中国。2011年1月19日ID:user1)10:05:44.102> 17:14:52.169>

提前致谢

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

请给我一个反馈,这是一个工作。 (如果它正在为你工作,接受答案就好)。

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函数。 这里有一个简单的例子: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(第二列)。