我在這裏爲你寫了一個小腳本。啓動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
也許你可以試試DTS !!。 – varadarajan 2011-05-02 13:47:47
您必須使用VBA,特別是處理用戶在同一個域上登錄兩次而不登出的情況。你的例子的第3和第4行。你想在這種情況下得到什麼結果? – 2011-05-02 15:16:49
@corbett:然後讓退出時間字段爲空的那些records.but但我需要這種格式反正。 – aln 2011-05-02 18:16:55