如何汇总/压缩数据并在1个单元格中显示多个答案

时间:2014-11-06 20:00:37

标签: vba excel-vba excel

所以我在这个我已经创造的宏观深处。我的同行要求的输出数量超过我原先显示的数量。我需要一个可以执行以下操作的宏。所以我的问题通常可以通过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

感谢您看看这些家伙。我试过在这上面找到了一些东西,但在同一个细胞中没有任何显示出多个结果。任何帮助是极大的赞赏!祝你有美好的一天!

1 个答案:

答案 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