макрос Excel для форматирования данных - PullRequest
2 голосов
/ 02 мая 2011

У меня есть формат данных, как показано ниже,

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

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 03 мая 2011

Я написал здесь небольшой сценарий для вас. Запустите 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
0 голосов
/ 02 мая 2011

Для простого отображения из A -> Индия и B -> Китай, пожалуйста, посмотрите на функцию VLOOKUP.Вот простой пример: от a8 до b11:

a China
b India
c Russia
d Brazil

, и если у вас есть «a» в a2, тогда эта функция vlookup будет делать то, что вы хотите:

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

, где a2 - этозначение поиска, $ a $ 8: $ b $ 11 - таблица, а 2 означает, что вы хотите вернуть столбец b (второй столбец).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...