4

У меня есть лист с множеством строк. Некоторые строки имеют общие ссылочные номера (например, в столбце A). Я хотел бы сделать так, чтобы, когда строка разделяла ссылочный номер с другой строкой, я хотел бы объединить данные, содержащиеся, скажем, в столбце B, из обеих этих строк в новую ячейку, скажем, в столбце C ,

Пример:

Col A Col B Col C
12345 Роберт Роберт, Дэвид
12345 Дэвид Крис
54321 Крис                             

2 ответа2

2

Вот подход VBA. Предполагая Excel 2007 или более поздней версии; Первые несколько шагов будут отличаться, если вы используете предварительную версию Excel.

  1. Включить вкладку разработчика

  2. Нажмите "Visual Basic" на вкладке "Разработчик" на ленте.

  3. Щелкните правой кнопкой мыши на «VBAProject (независимо от того, что ваш лист называется.xls *)» и выполните Вставить -> Модуль в контекстном меню.

  4. Вставьте в этот код

    Option Explicit
    
    Function allquixotic(param As Variant, search As Range, values As Range, Optional absolute As Boolean = False) As String
    
    Dim sep As String, retval As String
    Dim i As Integer, rownum As Integer
    Dim look As Range, j As Range
    
    sep = ", "
    retval = ""
    For i = 1 To search.Rows.Count
    Set look = search.Cells(i, 1)
    If absolute Then
            rownum = look.Row
    Else
            rownum = i
    End If
    
    If look.Value = param Then
            If absolute Then
                    Set j = values.Worksheet.Cells(rownum, values.Column)
            Else
                    Set j = values.Cells(i, 1)
            End If
            retval = IIf(retval = "", retval & j.Value, retval & sep & j.Value)
    End If
    
    Next
    
    allquixotic = retval
    
    End Function
    
  5. Используйте функцию рабочего листа (не стесняйтесь переименовать ее) с помощью формулы

    =allquixotic(A1,$A$1:$A$15,$B$1:$B$15,true)
    
  6. Используйте маркер заполнения, чтобы поместить формулу во все ячейки

Параметры следующие:

=allquixotic(look_cell, key_range, value_range, absolute)

look_cell: первый параметр, должен быть отдельной ячейкой или литералом значения. Допустимый ввод включает в себя такие вещи, как 3 , $6.25 , "Hello" и т.д. Это значение, которое вы пытаетесь найти в key_range .

key_range: это должен быть диапазон ячеек (более одной ячейки); если absolute - true, тогда вы получите очень странные результаты, если только это не непрерывный диапазон (все значения в последовательных строках).

value_range: это должен быть диапазон ячеек (более одной ячейки); если absolute - true, тогда вы получите очень странные результаты, если только это не непрерывный диапазон (все значения в последовательных строках).

absolute: если true, то мы будем использовать абсолютный номер строки (относительно количества строк во всей электронной таблице) каждой "найденной" строки в key_range чтобы определить, для какой строки извлечь значение из value_range . Если false, мы будем использовать относительные числа; например, если мы найдем совпадение в третьей строке key_range , мы извлечем значение из третьей строки value_range . Рекомендуемое значение - ЛОЖЬ, или вы можете не указывать его по умолчанию.

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

Кроме того, если вы укажете несколько столбцов в key_range или value_range, будет использоваться только самый левый столбец.

-1

Будет ли это работать для вас? Установите формулу в C2 как

=IF(A2=A3,B2 & ", " & B3,B3)

Предполагается, что ваши данные отсортированы по ColA, поэтому ссылочные номера сгруппированы вместе.

ВОПРОС: Может ли быть более 2 имен с одинаковым номером ссылки в ColA?

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