仅连接可见的行

我正在使用下面的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 

当运行时,这将创build汽车,章。

但是,这是一个带有filter的表格,一旦过滤到这个表格:

 ID | Date | Purchase | Concat Value 1 | 3/4/16 | Car | Car, Cap 2 | 5/2/12 | Cat | Cat 

它仍然显示Car,Cap而不是忽略Cap不可见。

我已经看到了这个答案,但没有看到如何使它与我目前的VBA工作:

Excel VBA只连接过滤列的可见单元格。 包括testing代码

更新:使用此我只获取可见项join,但我需要它返回列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 

这工作。 在你原来的代码中有一个错误/错误是a=rng.value ,所以在考虑隐藏行时a应该是rng

  Function JoinAll3(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 And rng(i, 1).EntireRow.Hidden = False Then JoinAll3 = JoinAll3 & IIf(JoinAll3 = "", "", delim) & a(i, 3) End If Next End Function 

你有没有试过类似的东西:

 For each val in rng.Columns(3).Cells If val = BaseValue And val.EntireRow.Hidden = False Then JoinAll = JoinAll & IIf(JoinAll = "", "", delim) & val End If Next val