2014-08-27 45 views
1

我有一大组数据(40,000+行),它都是多个ID号码。他们列在第1列。然后在第10列中,我为他们有资格的多个职位发布了SsoftGroup名称。我想拿走我应得拉至一个单独的标签,我需要的数据...消除重复并列出单个单元格中的第二列

我有什么...

Column 1 Column 10 
EmplNum SsoftGroup 
1   Assembly 
1   Assembly 
1   Cleaning 
2   Bakery 
2   Assembly 
2   Assembly 
2   Bakery 
3   Cleaning 
3   Cleaning 
3   Bakery 
3   Assembly 
3   Assembly 
4   Bakery 
4   Bakery 

我需要在另一个选项卡

什么
Column 1  Column 2 
1    Staff Assembly:Staff Cleaning 
2    Staff Assembly:Staff Bakery 
3    Staff Assembly:Staff Bakery:Staff Cleaning 
4    Staff Bakery 

我不知道如何做到这一点,因为我不是很熟悉宏的VBA。我知道一个连接可以用于我需要的第2列;由于存在可变数组大小,我只是不确定如何去做。

+0

对于VBA解决方案的集合或字典将要走的路。对于标准的Excel功能,这是数据透视表的理想用例。我发布的答案包括屏幕截图 – 2014-08-27 22:06:07

+0

对于VBA功能见下面 – 2014-08-27 23:34:50

+0

参数2是您的数据范围(在我的答案屏幕截图:F5:G18)。假设您为arg 2选择的范围是J5:M18。这是共4 Cols。如果您想通过名称来引用此范围,则必须在Excel中将此范围命名为'J5:M18',作为'SsoftGroup',或者您想要的任何名称。该函数假定作业列始终是数据范围的最后一列。所以它会忽略K和L列中的数据,只用Col J找到Col M中的数据。只有第1行和最后一行很重要。看到我附加到我的答案显示功能工作的新截图。 – 2014-08-28 15:36:49

回答

0

数据透视表。由此,您可以使用简单的excel countifsum函数获得您想要的任何信息。这就是说,如果关键点不能提供你想要的信息。

pivot

如果你想实现一个VBA函数在工作表中使用,您可以使用此:

Function JobCat(ByVal BaseValue, ByRef rng As Range, ByVal delim As String) As String 
Dim a, i, k As Long 
Dim last_col As Integer 


Set jobs = New Collection 
last_col = rng.Columns.Count 

a = rng.Value 
    On Error Resume Next 
    For i = 1 To UBound(a, 1) 
     If Val(a(i, 1)) = Val(BaseValue) Then 
      jobs.Add "Staff " & a(i, last_col), "Staff " & a(i, last_col) 
     End If 
    Next 


    For k = 1 To jobs.Count 
     JobCat = JobCat & IIf(JobCat = "", "", delim) & jobs.Item(k) 
    Next 
End Function 

随着参数1是EmplNum,参数2是整个范围(包括列),参数3是文本分隔符(如“:”或“,”等)。正如在这个截图

enter image description here

更新,以显示其与命名工作范围:

named_range

+0

如果我将参数命名为ssoftlink并将其用作参数2 – 2014-08-28 13:11:06

+0

我已经使用它,但是当我向下拖动功能输出列,它不是一致的,例如,不是所有的功能输出都是相同的,因为它的工作原理是givin empl number – 2014-08-28 14:51:06

+0

。但是您必须先创建一个命名范围,并且此命名范围的第一个Col必须是EmpNum数据,并且最后一个Col必须是SoftGroup数据。之间的任何内容都将被忽略。 – 2014-08-28 15:42:39

1

您可以使用一个Dictionary对象,它将数据存储在键/值对中。该Value部分可以是任何类型的数据,所以我们只需要使用一个字符串&拼接从B列的各个项目中,列A

关于词典唯一的ID值...

一字典创建键/值两种方法,要么明确地通过.Add方法,

dict.Add "key", "value" 

或隐含地引用关键尚不存在:

dict("key") = "value" 

后者将覆盖如果键已经存在的现有值。所以我们可以使用返回布尔值的.Exists方法来查看该项是否已经存在。

If dict.Exists("key") then 
    dict("key") = dict("key") & " some other text!" 
Else 
    dict.Add "key", "value" 
End If 

在你的情况,我们只需要使用Instr功能检查,看看是否列B该值已经被附加到Value从A列

未经检验的每个ID,但我认为这应该这样做:

Sub foo() 
Dim dict as Object 
Dim rng as Range 
Dim r as Range 
Dim val as String 
Dim id as String 
Dim key as Variant 
Dim i as Long 

Set rng = Range("A1", Range("A1").End(xlDown)) 'Modify as needed 
Set dict = CreateObject("scripting.dictionary") 

'iterate the range.rows: 
For each r in rng.Rows 
    ' 
    id = r.Value 

    'get the value from the same row, cell in column 10 and prefix with "Staff " 
    val = "Staff " & r.Offset(0,9).Value 

    'Add this item if it doesn't already exist: 
    If Not dict.Exists(id) Then 
     dict.Add id, val 
    Else 
     'avoid printing duplicate "values" in the dictionary using some string functions: 
     If Instr(1, dict(id), val) = 0 Then 
      dict(id) = dict(id) & ":" & val 
     End If 
    End If 

Next 

'Print the data to another sheet in columns A, B: 
With Worksheets("Sheet2")   '<~~ MODIFY AS NEEDED TO USE YOUR SHEET NAME 
    For each key in dict.Keys() 
     .Range("A1").Offset(i).Value = key 
     .Range("B1").Offset(i).Value = dict(key) 
     i = i + 1 
    Next 
End With 

End Sub 
0

如果您不熟悉或舒服VBA和上面的解决方案是恐吓,你也可以只用几个Excel函数和大量的额外列的达成你的目标。

基本上,您将创建一个表,统计与每个唯一工作组匹配的唯一员工ID的每个实例。您只需将表格的最左列中的员工标识清单重复删除,并在最顶端的行中使用重复列表的工作组(使用转置命令)。

下面是它应该是什么样子使用例如数据的样本:

Column 1 Assembly Cleaning Bakery  ...  Column 2 
1             
2 
3 
4 
... 

然后你可以使用COUNTIFS(...)在表格的每个单元格中放置一个逻辑值,这些值可以在IF(...)语句中使用,以返回空白单元格或字符串...然后您只需将最后一行中的每个单元格连接起来柱。

我在表格单元格中使用这个公式和它工作得很好(很明显,你必须改变工作表名称,调整单元格引用):

=IF(COUNTIFS(Sheet1!$A:$A, $B4, Sheet1!$B:$B, D$2) > 0, "Staff " & D$2 & ":", "") 

你知道有多少独特工作组在整个数据集的第10列中?连续连接大量细胞可能非常繁琐,所以如果它超过50个,您可能应该只使用VBA路线。

+0

第10列中有153个唯一值,第1列中有553个唯一值,但它会定期更新 – 2014-08-27 21:19:15

相关问题