2014-08-18 4 views
0

Добрый день,Excel VBA Конкатенация только видимых ячеек фильтрованной колонки. Тестовый код

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

До сих пор эта функция работает, но и присоединяет невидимые, отфильтрованные клетки:

Function test1(myRange As Range) 
Dim aOutput 
For Each entry In myRange 
    If Not IsEmpty(entry.Value) Then 
     aOutput = aOutput & entry.Value & ", " 
    End If 
Next 
test1 = Left(aOutput, Len(aOutput) - 1) 
End Function 

И это один работает хорошо, где он также будет удалить дубликаты из диапазона, но имеет ту же проблему:

Function test2(ByRef rRng As Range, Optional ByVal sDelim As String = ", ") As String 
Dim oDict As Object 
Dim rCell As Range 
Dim sTxt As String 
Set oDict = CreateObject("Scripting.Dictionary") 
With oDict 
    For Each rCell In rRng 
     If .Exists(rCell.Text) Then 
      'Do nothing 
     Else 
      .Add rCell.Text, rCell.Text 
      sTxt = sTxt & sDelim & rCell.Text 
     End If 
    Next rCell 
End With 
    test2 = Mid(sTxt, Len(sDelim) + 1) 
End Function 

Возможно ли изменить две функции, чтобы игнорировать невидимые отфильтрованные ячейки в столбце?

Спасибо за чтение,

Brian

ответ

0

Рассмотрим:

Public Function test1(myRange As Range) 
    Dim aOutput As String, entry As Range 
    For Each entry In myRange 
     If entry.EntireRow.Hidden = False Then 
      aOutput = aOutput & entry.Value & ", " 
     End If 
    Next 
    test1 = Left(aOutput, Len(aOutput) - 1) 
End Function 
+0

Спасибо, это работает! – Brian

+0

Что делать, если я хочу объединить только уникальные значения? – user2284877

+0

@ user2284877 Вы должны использовать 'Collection' для удаления дубликатов –

0

Конечно - в ваших функций и перед любой выполняемой инструкции, объявить новую переменную myRangeVisible так:

Dim myRangeVisible as Range 

и установите его для включения только видимых ячеек из insid е MyRange

Set myRangeVisible = myRange.SpecialCells(xlCellTypeVisible) 

И использовать этот диапазон в качестве исходного диапазона для всех операций в вашем коде функции

+0

Спасибо, я попытаюсь изменить функцию с помощью этой помощи! – Brian

Смежные вопросы