2016-03-04 73 views
1

如果我有一个电子表格中的字符串列表,有没有什么方法可以将它们结合起来,只保留它们共有的字符串?举例来说,如果我有这样的名单:结合文本字符串公共部分的代码

C- D2 Carbon steel column 1 7.58 0.47 1.15 1,096.00 
C-E1 Carbon steel column 1 7.58 0.47 1.15 1,096.00 
C- E2 Carbon steel column 1 7.58 0.47 1.15 1,096.00 
C-F1 Carbon steel column 1 7.58 0.47 1.15 1,096.00 
C-F2 Carbon steel column 1 7.58 0.47 1.15 1,096.00 
C-G1 Carbon steel column 1 7.58 0.47 1.15 1,096.00 
C-G2 Carbon steel column 1 7.58 0.47 1.15 1,096.00 
C-H1 Carbon steel column 1 7.58 0.47 1.15 1,096.00 

...我想它合并到

Carbon steel column  8 7.58 0.47 1.15 1,096.00 

这样的数字是没有问题的,但我怎么抢共同要素的文本字符串?

编辑:澄清,目的是找到共同的元素,不只是将它们分开。不幸的是,事先并不知道结束语。

回答

1

在B11:B12,因为这些SUMIF functions之一,

=SUMIF($A$2:$A$9, "*Carbon steel column", B$2:B$9)  '◄ B11 
=SUMIF($A$2:$A$9, "*"&$A12, B$2:B$9)     '◄ B12 

注意通配符作序星号。这意味着列A将在碳钢柱中结束。填写正确的额外列总数。用AVERAGEIF function或其他一些聚合函数代替以达到所需的结果。

carbno_steel_column

+0

谢谢 - 有没有什么方法可以找到共同的元素本身?恐怕我的问题有点不清楚;我特别指的是如何确定那些具有相同尺寸的列表项目中的常见文本元素,然后将它们放在一起。这是甚至可能的,你觉得呢? –

+0

是“** C-E1碳钢柱**”两列还是一列?可以检查频率,整理唯一列表等。SUMIFS或COUNTIFS可以用于唯一项目列表,但是您开始进入数组公式区域。我认为你可能最好确保C-E1碳钢柱**分成两列并创建一个数据透视表。 – Jeeped

+0

这只是一列;本质上它是一个货物清单,并且我试图找到一种合并清单项目的方法,当客户发送清单列表中列出的几十个相同的清单项目时。我想我最终可能会说“在导入之前手动解决这个问题”... ;-) –

0

你可以尝试将拆分其组件的第一个单元格(假设是空间),并添加所有单词的收藏。然后,对于每个其他单元格,将其拆分并检查该集合是否已有单词。如果不是,请从集合中删除它。

Dim MyCollection As Collection 
Dim i As Integer 
Dim j As Integer 
Dim k As Integer 
Dim bIsInArray As Boolean 
Dim sFinalString As String 


Private Sub CommandButton1_Click() 
lLastRow = Cells(Rows.Count, 1).End(xlUp).Row 'get the number of rows with data 
Set MyCollection = New Collection 
ReDim MyArray(1 To 1) As String 
For i = 2 To lLastRow 'Assuming your data starts in A2 (A1 being titles) 
    If i = 2 Then 'The first data cell 
     MyArray = Split(Worksheets("Data").Cells(i, 1).Value, " ") 'split the cell using spaces as spliting character 
     For j = 0 To UBound(MyArray) 
      MyCollection.Add (MyArray(j)) 'add all words to collection 
     Next 
    Else 'if is not the first cell of data 
     ReDim MyArray(1 To 1) As String 'set a "new" array 
     MyArray = Split(Worksheets("Data").Cells(i, 1).Value, " ") 

     For j = MyCollection.Count To 1 Step -1 
      bIsInArray = False 
      For k = 0 To UBound(MyArray) 
       If MyCollection.Item(j) = MyArray(k) Then 
        bIsInArray = True 
       End If 
      Next 
      If bIsInArray = False Then 
       MyCollection.Remove (j) 
      End If 
     Next 

    End If 
Next 
'Now MyCollection contains all common words 

sFinalString = "" 
For j = 1 To MyCollection.Count 
    sFinalString = sFinalString & " " & MyCollection.Item(j) 
Next 
Worksheets("Data").Cells(lLastRow + 2, 1).Value = sFinalString 
End Sub