Извлечь значение из столбца C, если столбец F содержит определенный текст - PullRequest
0 голосов
/ 25 декабря 2018

Итак, я хотел бы извлечь данные из строки, если столбец содержит определенное слово.Поэтому, если в столбце F содержится слово «FITNESS», я бы хотел, чтобы имена, числа, время начала и окончания соответствующих строк были скопированы на другую вкладку.

Состав - вкладка "ROSTER"

enter image description here

Количество сотрудников - "HEADCOUNT"TAB

enter image description here

Таким образом, в основном я хочу извлечь номер, имя, время начала и окончания каждого человека в правильную часть вкладки численности персонала.Таким образом, в A3 я получу Ila Yokum и O3 ее номер, P3 ее время начала и Q3 ее время окончания.В А4 Черри Эррико и О4 ее номер.В A10 я бы закончил с Карлосом Бигамом.И т. Д. И т. Д.

Я попробовал следующее, но не все правильно копирует.

=if(ROSTER!A:A="ACCESSOIRES";ROSTER!B2;"")

Работает для A3-A5, но не для A10?

Список будет меняться ежедневно, и в реестре может присутствовать больше или меньше людей из каждого раздела, а также разное время начала / окончания.Тем не менее, раздел и номер всегда связаны с человеком.

Любая помощь приветствуется и заранее спасибо,

1 Ответ

0 голосов
/ 28 декабря 2018

Вы можете попробовать:

Option Explicit

Sub test()

    Dim i As Long
    Dim LastRowSR As Long, LastRowSH1 As Long
    Dim strSection As String, strNumber As String, strStart As String, strEnd As String, strName As String

    'Sort Table in Roster Sheet
    With ThisWorkbook.Worksheets("ROSTER")
        .Sort.SortFields.Clear
        .Sort.SortFields.Add2 Key:=Range("F1"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

        LastRowSR = .Cells(.Rows.Count, "A").End(xlUp).Row

        With .Sort
            .SetRange Range("A2:F" & LastRowSR)
            .Header = xlNo
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With

    'Headers Formating
    With ThisWorkbook.Worksheets("HEADCOUNT")
        .Cells.Clear

        With .Range("A1")
            .Value = "Headcount"
            .Font.Bold = True
            .Font.Color = -16776961
            .HorizontalAlignment = xlLeft
            .VerticalAlignment = xlBottom
        End With

        .Range("B1").Value = "06:00"
        .Range("C1").Value = "07:00"
        .Range("D1").Value = "08:00"
        .Range("E1").Value = "09:00"
        .Range("F1").Value = "10:00"
        .Range("G1").Value = "11:00"
        .Range("H1").Value = "12:00"
        .Range("I1").Value = "13:00"
        .Range("J1").Value = "13:30"
        .Range("K1").Value = "14:00"
        .Range("L1").Value = "15:00"
        .Range("M1").Value = "16:00"
        .Range("N1").Value = "17:00"

        With .Range("B1:N1")
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
        End With

        With .Range("E1,J1,N1")
            .Font.Bold = True
        End With

        .Range("J1").Font.Color = -65281

        With .Range("O1:Q1")
            .Merge
            .Value = "Shift"
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
        End With

        With .Range("O2")
            .Value = "Number:"
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlBottom
        End With

        With .Range("P2")
            .Value = "Start"
            .HorizontalAlignment = xlLeft
            .VerticalAlignment = xlBottom
        End With

        With .Range("Q2")
            .Value = "End"
            .HorizontalAlignment = xlLeft
            .VerticalAlignment = xlBottom
        End With

        .Range("P2:Q2").Interior.Color = 65535

    End With

    'Loop Roster
    With ThisWorkbook.Worksheets("ROSTER")

        For i = 2 To LastRowSR

            strName = .Range("A" & i).Value
            strNumber = .Range("B" & i).Value
            strStart = Format(.Range("D" & i).Value, "hh:mm")
            strEnd = Format(.Range("E" & i).Value, "hh:mm")
            strSection = .Range("F" & i).Value

            With ThisWorkbook.Worksheets("HEADCOUNT")

                LastRowSH1 = .Cells(.Rows.Count, "A").End(xlUp).Row

                If LastRowSH1 = 1 Then
                    With .Range("A" & LastRowSH1 + 1)
                        .Value = strSection
                        .Font.Bold = True
                    End With
                    .Range("A" & LastRowSH1 + 2).Value = strName
                    .Range("O" & LastRowSH1 + 2).Value = strNumber
                    .Range("P" & LastRowSH1 + 2).Value = strStart
                    .Range("Q" & LastRowSH1 + 2).Value = strEnd
                ElseIf strSection = .Range("A" & LastRowSH1 - 1).Value Then
                    .Range("A" & LastRowSH1 + 1).Value = strName
                    .Range("O" & LastRowSH1 + 1).Value = strNumber
                    .Range("P" & LastRowSH1 + 1).Value = strStart
                    .Range("Q" & LastRowSH1 + 1).Value = strEnd
                Else
                    With .Range("A" & LastRowSH1 + 2)
                        .Value = strSection
                        .Font.Bold = True
                    End With
                        .Range("A" & LastRowSH1 + 3).Value = strName
                        .Range("O" & LastRowSH1 + 3).Value = strNumber
                        .Range("P" & LastRowSH1 + 3).Value = strStart
                        .Range("Q" & LastRowSH1 + 3).Value = strEnd
                End If

                .UsedRange.Columns.AutoFit

            End With

        Next i

    End With

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