Vba 仅连接可见行
我使用以下VBA将行与公共ID连接起来Vba 仅连接可见行,vba,excel,Vba,Excel,我使用以下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
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
当运行时,这将创建汽车、帽子
但是,这是一个带有筛选器的表,一旦筛选到此表:
ID | Date | Purchase | Concat Value
1 | 3/4/16 | Car | Car, Cap
2 | 5/2/12 | Cat | Cat
它仍然显示汽车,而不是忽略帽子是不可见的
我已经看到了这个答案,但不知道如何使用我当前的VBA:
更新:
使用这个函数,我只得到连接的可见项,但我需要它返回第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
你有没有试过这样的方法:
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
这很有效。您的原始代码中有一个输入错误/错误,如
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
它声明“编译错误参数非可选”。这是我的当前代码:函数JoinAll(ByVal BaseValue,ByRef rng作为Range,ByVal delim作为String)Dim a,i只要a=rng.Value,如果Val=BaseValue和Val.EntireRow.Hidden=False,那么JoinAll=JoinAll&IIf(JoinAll=“”,delim)&Val End如果下一个Val End函数可以删除
Dim a,只要a=rng.Value
几乎可以工作,我就需要它来返回第3列中的值。这就是a(i,3)出现的地方。@Kode如果将a(i,3)更改为a(1,3),您的代码将按照您的意愿工作。不是最有效的代码,但可行。当a.EntireRow
被rng.EntireRow
替换为a=rng.value
并将rng
作为范围对象时,我怀疑I只是一个输入错误。这会有帮助:用几行伪数据转储数据结构(最简单的示例)。准确确定您要连接的内容-即,您要分类的行中的哪些单元格以及您希望得到什么样的结果…等等。看到一个问题已经花费了一些时间/精力,这会鼓励回答,并鼓励回答更多。我已经修改了我的问题,以获得关于结构的更多细节OK。格式仍然很难闻,但我可以使用它:-)如果我添加了另一行,ID=1,DATE=blah,Purchase=Car,这与第1行完全相同。你想让猫汀表演什么?两辆车(即车,盖,车)或(车(2),盖)或(车,盖),即不计算/不关心重复值。回答如下。检查为工作状态。你有a.EntireRow.Hidden=False
,我想应该是rng.EntireRow.Hidden=False