Excel - объединяющие ячейки, где совпадает ссылочный номер

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

Пример:

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

2 ответа

Решение

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

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

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

  3. Щелкните правой кнопкой мыши на "VBAProject (what-your-sheet-is-named.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, будет использоваться только самый левый столбец.

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

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

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

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

Другие вопросы по тегам