У меня есть список имен, с одним столбцом далее с числовыми данными, для аргумента, как показано ниже:

Dave    1
Bob     2
Frank   1
Dennis  3

Я хотел бы иметь другую таблицу на другом листе, который выбирает и отображает имена в зависимости от номера рядом с именем.

Так, например, столбец 1 будет иметь имена Дейв и Фрэнк, перечисленные ниже

Это возможно?

2 ответа2

1

Вот решение с использованием VBA:

Public Sub columns()
    Dim wks, wks1 As Worksheet
    Set wks = ThisWorkbook.Sheets(1)
    Set wks1 = ThisWorkbook.Sheets(2)
    firstrowsource = 1
    wks1.Application.ScreenUpdating = False
    wks1.Cells.Clear
    Last = wks.Cells(Rows.Count, "A").End(xlUp).Row
    For i = firstrowsource To Last
        Name = wks.Cells(i, 1)
        Position = wks.Cells(i, 2)
        j = 1
        looking = True
            While looking
                If wks1.Cells(j, Position) = "" Then
                    If j <> 1 Then
                        wks1.Cells(j, Position) = Name
                    Else
                        wks1.Cells(j, Position) = Position
                        wks1.Cells(j + 1, Position) = Name
                    End If
                    looking = False
                Else
                    j = j + 1
                End If
            Wend
    Next i
    wks1.Application.ScreenUpdating = True
    Final = MsgBox("Finished", vbInformation)
End Sub

Вам нужно перейти к Macros / Visual Basic, в ThisWorkbbok вставить новый модуль и вставить код с правой стороны.

Предполагается, что исходный лист - Sheet1, а пункт назначения - Sheet2. Если ваша исходная рабочая таблица имеет заголовки, измените значение переменной firstrowsource .

1

Вы можете сделать это с помощью формулы массива. Сделайте следующее:

  1. Поставьте свой стол на новый лист. Создать заголовки столбцов 1 , 2 , 3 и т.д.
  2. Под заголовком 1A2) введите следующее.

    = IFERROR (INDEX (Лист1!$ A $ 1:$ A $ 5, МАЛЫЙ (IF (Лист1!$ B $ 1:$ B $ 5 = Лист2!A $ 1, СТРОКА (Лист1!$ B $ 1:$ B $ 5)), ЧСТРОК (B $ 2:В2))), "")

    где Sheet1 - это лист с исходными данными, A1:A5 - список имен в исходных данных (включая заголовок столбца), а B1:B5 - список чисел в исходных данных (включая заголовок столбца).

  3. После ввода формулы поместите курсор на панель формул и нажмите Ctrl+Shift+Enter. Это введет формулу в виде формулы массива. Формула будет отображаться в строке формул в фигурных скобках.

  4. Теперь заполните эту формулу для всех столбцов в новой таблице. Затем заполните формулу настолько, насколько вам нужно, чтобы все имена отображались.

Пояснение формулы:

SMALL(IF(Sheet1!$B$1:$B$5=Sheet2!A$1,ROW(Sheet1!$B$1:$B$5)),ROWS(B$2:B2)) просматривает исходные данные для записей, которые соответствуют числу, указанному в заголовке столбца. Если совпадение найдено, номер строки каждого совпадения возвращается по мере заполнения.

INDEX(Sheet1!$A$1:$A$5, ...) часть формулы возвращает имя из найденного номера строки.

Часть IFERROR(..., "") проверяет, что возвращается INDEX для ошибки. Если обнаружена ошибка, формула ничего не возвращает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .