所以我在这个我已经创造的宏观深处。我的同行要求的输出数量超过我原先显示的数量。我需要一个可以执行以下操作的宏。所以我的问题通常可以通过VLOOKUP解决。但是,在这种情况下,知道是否真的有两个答案以及两者都是非常重要的,这使得VLOOKUP过时了。所以我要说我有2列。一个显示Run#,另一个显示Vertical,Curve或Lateral(它们按顺序向下进行)。让我们说Run#1是Vertical。第2跑开始垂直,但完成弯曲。运行#3是曲线,但完成横向。最后,#4运行是横向的。例如:
Run# Section
1 Vertical
1 Vertical
1 Vertical
2 Vertical
2 Vertical
2 Curve
2 Curve
3 Curve
3 Curve
3 Lateral
3 Lateral
4 Lateral
4 Lateral
4 Lateral
4 Lateral
我需要的是以下内容。基本上在我预先形成这个之前,我将使用一个带有Run#的数据透视表" Rows"然后收集其中的其他数据。然后,我会将值复制并粘贴到另一个工作表中,然后我需要添加"部分"中的值。如下图所示。
Run# Section
1 Vertical
2 Vertical & Curve
3 Curve & Lateral
4 Lateral
感谢您看看这些家伙。我试过在这上面找到了一些东西,但在同一个细胞中没有任何显示出多个结果。任何帮助是极大的赞赏!祝你有美好的一天!
答案 0 :(得分:0)
我有一个名为JOINDISTINCT
的udf(下面的代码) - 你可以将它与数组公式结合使用来做你需要的。
对于公式,假设您的运行数据在列A和B中,并且列E具有不同的运行列表,在F2中具有数组公式(使用 Ctrl + Shift输入 + 输入)
=JOINDISTINCT(IF($A$1:$A$16=E2,$B$1:$B$16,"")," & ")
请注意,我们不使用整个列,只使用填充范围,以加快执行速度。数组部分检查A列值是否与E2中的运行编号匹配,然后返回Section或空白。 JOINDISINCT接受该数组并返回不同的列表,由(在本例中)“&”分隔
功能的VBA代码
Public Function JOINDISTINCT(rng As Variant, Optional separator = ", ") As String
JOINDISTINCT = ""
Dim v As String
'Dictionary needs REFERENCE: Microsoft Scripting Runtime
Dim dict As New Dictionary
For Each c In rng
If IsObject(c) Then
v = c.Text
Else
v = c
End If
If v <> "" Then
If Not (dict.Exists(v)) Then
dict.Add v, 1
If JOINDISTINCT = "" Then
JOINDISTINCT = v
Else
JOINDISTINCT = JOINDISTINCT & separator & v
End If
End If
End If
Next c
Set dict = Nothing
End Function