Vlookup для дублированного статуса - PullRequest
0 голосов
/ 19 марта 2020

Я искал различные подходы, чтобы решить мою проблему, будь то с помощью vlookup, index, index / match, но пока не мог понять это.

Я пытаюсь перечислить тех же самых арендаторов та же квартира на той же линии, как показано на рисунке. спасибо за помощь!

a

Ответы [ 4 ]

2 голосов
/ 20 марта 2020

Подход VBA

Sub list()

    Dim wb As Workbook, ws As Worksheet
    Dim iRow As Long, iHeaderRow As Long
    Dim sApt As String, sStatus, sName As String

    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")

    Set wb = ThisWorkbook
    Set ws = wb.Sheets("Sheet1")

    iRow = 4  'start
    sApt = CStr(ws.Cells(iRow, 1))
    Do While Len(sApt) > 0

        sStatus = ws.Cells(iRow, 2)
        sName = ws.Cells(iRow, 3)

        If Not dict.exists(sApt) Then
            dict.Add sApt, ""
        End If

        If LCase(sStatus) = "main" Then
            dict(sApt) = sName & dict(sApt) ' add to front
        Else
            dict(sApt) = dict(sApt) & ";" & sName ' add to back
        End If

        iRow = iRow + 1
        sApt = CStr(ws.Cells(iRow, 1))

    Loop

    ' result header
    iHeaderRow = iRow + 1
    ws.Cells(iHeaderRow, 1) = "Apt"
    ws.Cells(iHeaderRow, 2) = "Main"
    iRow = iRow + 2

    ' result table
    Dim k As Variant, ar As Variant, n As Integer, m As Integer
    For Each k In dict.keys
        ws.Cells(iRow, 1) = k
        ar = Split(dict(k), ";")
        n = UBound(ar)
        ws.Cells(iRow, 2).Resize(1, n + 1) = ar
        If n > m Then m = n ' max for n
        iRow = iRow + 1
    Next

    ' complete header row
    For n = 1 To m
        ws.Cells(iHeaderRow, n + 2) = "Co-tenant"
    Next
    MsgBox "Done"

End Sub
1 голос
/ 19 марта 2020

Вы говорите ive been looking for different approaches, поэтому если вы используете office365, это всего лишь небольшое предложение, тогда вы можете использовать filter function для этого.

Вот формула:

=TRANSPOSE(FILTER($B$3:$B$9,$A$3:$A$9=D3))

enter image description here

1 голос
/ 19 марта 2020

Вот метод без вспомогательного столбца:

Чтобы получить «Джона» в ячейке B21, вы можете использовать формулу массива *, которая объединит столбцы A и B, чтобы вы могли сопоставить оба критерия одновременно (с помощью "&"). Формула будет выглядеть следующим образом:

=INDEX($C$4:$C$8,MATCH($A21&B$20,$A$4:$A$8&$B$4:$B$8,0))

Чтобы получить «Саймон» в ячейке C21, вы можете просто скопировать предыдущий, поскольку знаки доллара будут следить за корректностью критериев поиска.

Чтобы получить "Алекса" в D21, это немного сложнее, так как вы пытаетесь получить второй матч. Способ получения второго соответствия подробно описан в этой статье . В этом контексте это будет выглядеть так:

=INDEX($C$4:$C$8,SMALL(IF($A21&$D20=$A$4:$A$8&$B$4:$B$8,ROW($A$4:$A$8)-ROW($A$4)+1),2))

*: необходимо нажать Ctrl + Shift + Ввести в более старых версиях Excel (2010 и ранее).

0 голосов
/ 19 марта 2020

Предполагая, что ваши данные находятся в столбцах A2: C ?, обозначьте столбцы справа в качестве получателей ваших переставленных данных. Введите точно такие же описания в их заголовки (в строке 1), которые используются в столбце «Состояние». Я использовал столбцы D: H и подписи «Основной» и «Со-Арендатор» во всех остальных столбцах. Таким образом, у меня было 4 колонки для Со-Арендаторов. Вам нужно столько столбцов, сколько может быть максимальное число со-арендаторов.

Теперь введите формулу ниже в первую ячейку нового столбца Main (в моем примере это был D2) и скопируйте его на весь диапазон, в моем примере D2: H6. Это одинаковая формула для всех ячеек.

= IF (OFFSET ($ B2, COLUMN () - 4,0) = D $ 1, OFFSET ($ B2, COLUMN () - 4,1), "" )

Заметьте, что 4 в моей формуле - это номер столбца, в котором вы вводите формулу. В моем тесте это был столбец D, четвертый столбец). Если вы используете другой столбец, замените оба вхождения 4 номером выбранного вами столбца. То же самое касается ссылки формулы на D $ 1. В ячейке указывается заголовок нового Main столбца.

Теперь выберите весь диапазон с формулой (D2: H6 в моем тесте), Copy and Paste Special> Values. Это заменит все формулы на значения, которые они сгенерировали. Теперь вы можете удалить столбцы B: C.

Выберите весь диапазон (я еще не удалил B: C. Так что для меня это был A2: H6) и нажмите Удалить дубликаты на вкладке Данные . Укажите столбец A для дубликатов. Это действие сохранит только первую строку каждого идентификатора квартиры, удалив все остальные, особенно те, которые оказались неверными после применения формул. Если вы не удалили столбцы B: C, они определенно избыточны.

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