Я использую следующий VBA для конкатенации строк с общим IDСоединить только видимые Ряды
Function JoinAll(ByVal BaseValue, ByRef rng As Range, ByVal delim As String)
Dim a, i As Long
a = rng.Value
For i = 1 To UBound(a, 1)
If a(i, 1) = BaseValue Then JoinAll = JoinAll & _
IIf(JoinAll = "", "", delim) & a(i, 3)
Next
End Function
В качестве примера:
ID | Date | Purchase | Concat Value
1 | 3/4/16 | Car | Car, Cap
2 | 5/2/12 | Cat | Cat
1 | 6/2/13 | Cap | Cap
При запуске, это создает автомобиль, Cap.
Однако это таблица с фильтром, и как только он фильтруется на это:
ID | Date | Purchase | Concat Value
1 | 3/4/16 | Car | Car, Cap
2 | 5/2/12 | Cat | Cat
Он все еще показывает автомобиль, Cap вместо того, чтобы игнорировать, что крышка не видно.
Я видел этот ответ, но не понимаю, как заставить его работать с моим текущим VBA:
Excel VBA Concatenate only visible cells of filtered column. Test code included
UPDATE: С помощью этого я получаю только видимые элементы соединены, но я нужно возвращать значения в столбце 3. Это возвращает только значения в столбце 1:
Function JoinAll(ByVal BaseValue, ByRef rng As Range, ByVal delim As String)
For Each a In rng
If a = BaseValue And a.EntireRow.Hidden = False Then
JoinAll = JoinAll & IIf(JoinAll = "", "", delim) & a
End If
Next a
End Function
Непонятно, что именно вы пытаетесь объединить. Это поможет: сброс структуры ваших данных с помощью пары строк фиктивных данных (минимальный пример). Идентификация именно того, что вы пытаетесь конкатенировать, то есть, какие ячейки в строке, которую вы котали, и какие результаты вы ожидаете ... и т. Д. И т. Д. Увидев, что у вопроса было какое-то время/усилия, , и многое другое. –
Я пересмотрел свой вопрос, чтобы иметь более подробную информацию о структуре – Kode
ОК. Формат все еще вонючий, но я могу работать с этим :-) –