Excel中重复条目的组出现

时间:2019-07-16 22:17:27

标签: excel excel-formula

enter image description here

我有一个表,其中包含来自不同域的重复用户。我想在特定的单元格中包含特定用户所属的所有域。

研究并尝试查看如何实现这一目标,我发现TEXTJOIN和IF是可能的选择,但是由于某些原因,它无法按预期运行。该公式不仅显示所有绑定域,而且还显示所有域,并检查其工作原理,好像将返回结果。

我想知道你是否知道我在这里想念什么?

正如您将在屏幕截图中看到的那样,对于admin来说,它显示了整个结果数组;对于operator而言,它什么也不显示。不知道为什么会这样。

按照预期的结果,考虑到所附的屏幕快照,我希望在单元格F2中仅看到帐户管理员所属的域,因此仅为“ aaa”。对于运算符,为“ ccc”。

提前感谢支持。

3 个答案:

答案 0 :(得分:0)

这应该是一个数组公式。使用 Ctrl + Shift + Enter 输入。

enter image description here

答案 1 :(得分:0)

尝试此宏

Option Explicit
Sub Give_data()
Dim Dict As Object
Dim first As Worksheet
Dim Itm, K, i%: i = 2

 Set Dict = CreateObject("Scripting.Dictionary")
 Set first = Sheets("Sheet1")
 first.Range("E2").CurrentRegion.Offset(1).Resize(, 2).ClearContents
 Do Until first.Range("A" & i) = vbNullString
  K = first.Range("A" & i): Itm = first.Range("B" & i)
     If Not Dict.Exists(K) Then
       Dict.Add K, Itm
       Else
        Dict(K) = Dict(K) & ";" & Itm
      End If
    i = i + 1
  Loop
  With first.Range("E2").Resize(Dict.Count)
    .Value = Application.Transpose(Dict.Keys)
    .Offset(, 1).Value = Application.Transpose(Dict.Items)
  End With
  Dict.RemoveAll: Set Dict = Nothing
  first.Columns("E:F").AutoFit

End Sub

答案 2 :(得分:0)

要列出所有要发送给管理员的内容,此宏可以为您提供帮助

Sub My_data()

Dim Dict As Object
Dim first As Worksheet
Dim Itm, K, i%: i = 2
Dim My_String$
 Set Dict = CreateObject("Scripting.Dictionary")
 Set first = Sheets("Sheet1")

 With first
      .Range("E2").CurrentRegion.Offset(1).Resize(, 2).ClearContents
      .Range("E2") = .Range("A2")
     '===============================
     Do Until .Range("B" & i) = vbNullString
      My_String = My_String & ";" & .Range("B" & i)
       i = i + 1
     Loop
       .Range("F2") = Mid(My_String, 2, Len(My_String) - 1)
     '============================
     i = 3
    Do Until .Range("A" & i) = vbNullString
     If .Range("A" & i) = .Range("A2") Then GoTo Next_I
     K = .Range("A" & i): Itm = .Range("B" & i)
        If Not Dict.Exists(K) Then
          Dict.Add K, Itm
          Else
           Dict(K) = Dict(K) & ";" & Itm
         End If
Next_I:
       i = i + 1
     Loop
       With .Range("E3").Resize(Dict.Count)
           .Value = Application.Transpose(Dict.Keys)
           .Offset(, 1).Value = Application.Transpose(Dict.Items)
       End With
  End With
  Dict.RemoveAll: Set Dict = Nothing
  first.Columns("E:F").AutoFit

End Sub