2009-12-16 13 views
2

你好你讓人歎爲觀止的Excel:把​​在一起的兩個不同的複雜的公式(唯一不同的列表和斯普利特)

我想要做的兩件事情

  • 從重複一長串填充唯一不同的列表值分隔的連字符

文本的

  • 提取物成分,我發現這些問題在不同的地方每一個解決方案。

    唯一不同的位置列表http://www.get-digital-help.com/2009/03/30/how-to-extract-a-unique-list-and-the-duplicates-in-excel-from-one-column/

    的公式是

    `{=INDEX(A2:A65000,MATCH(0,COUNTIF($B$1:B1,A2:A65000),0))}` 
    

    其中列B是唯一列表被填充


    而且提取(分割文本)從這裏開始http://spreadsheetpage.com/index.php/tip/the_versatile_split_function/

    Function ExtractElement(str, n, sepChar) 
    ' Returns the nth element from a string, 
    ' using a specified separator character 
        Dim x As Variant 
        x = Split(str, sepChar) 
        If n > 0 And n - 1 <= UBound(x) Then 
         ExtractElement = x(n - 1) 
        Else 
         ExtractElement = "" 
        End If 
    End Function 
    

    下面的公式表明ExtractElement函數如何在公式中使用。

    =ExtractElement("546-339-909-944",3,"-") 
    

    該公式返回909,即字符串中的第三個元素(使用「 - 」作爲分隔符)。


    這些都是偉大的,解決了很多我想做的事情。但我也試圖將這兩個功能一起做到另一列。

    我有一個值,如列:

    香蕉 - 黃色 - 水果
    太陽 - 黃色 - 星
    血 - 紅 - 液體
    退出 - 紅 - 標牌

    我試圖得到結果爲


    我希望這樣做所有公式和不想使用的輔助列。我不介意VBA(正如你所看到的,這裏的第二個鏈接是vba)。

    任何幫助表示讚賞。太感謝了!

    Sriram

  • +0

    這是否真的是一個用戶需求,而不需要幫助列?你總是可以隱藏欄目。爲這樣一個特定的問題編寫一個UDF非常簡單......但抽象這樣一個獨特的問題真的很有用嗎? – 2009-12-17 01:44:48

    +0

    是否有任何這些幫助的答案? – Andrew 2009-12-22 15:13:53

    +0

    嘿傢伙,對不起,我沒有去應用這些。我必須經歷一段學習曲線才能完成檢查。這些是我在工作中進行的一些平行項目。因此,延遲。我非常感謝你的幫助。我試圖在沒有幫助列的情況下完成所有這些工作的原因是因爲這將是一件重複的工作,我想確保儘可能少的重複性手動工作。 – Sriram 2009-12-23 22:42:16

    回答

    0

    一個使用ADO的例子。

    Dim cn As Object 
    Dim rs As Object 
    Dim strFile As String 
    Dim strCon As String 
    Dim strSQL As String 
    Dim i As Integer 
    
    ''http://support.microsoft.com/kb/246335 
    
    strFile = ActiveWorkbook.FullName 
    strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _ 
        & ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";" 
    
    Set cn = CreateObject("ADODB.Connection") 
    Set rs = CreateObject("ADODB.Recordset") 
    
    cn.Open strCon 
    
    ''The connection string is set up for 
    ''headers, so you can use column names 
    ''You can substitute a named range 
    ''for [Sheet8$] 
    strSQL = "SELECT DISTINCT " _ 
    & "Mid(ColName,Instr(ColName,""-"")+1," _ 
    & "InStrRev(ColName,""-"")-Instr(ColName,""-"")-2) " _ 
    & "FROM [Sheet8$]" 
    
    rs.Open strSQL, cn, 3, 3 
    
    ''Copies the results to a worksheet 
    Worksheets("Sheet7").Cells(2, 1).CopyFromRecordset rs 
    
    0

    在你的問題中有一些有用的鏈接 - 謝謝。

    我這樣做是使用您的樣本數據 香蕉如下 - 黃色 - 水果 太陽 - 黃色 - 星 血 - 紅 - 液體 退出 - 紅 - 標牌

    第1步 它複製到記事本並在Excel中打開它,並通過嚮導運行以提取分隔符「」和「 - 」。這將數據作爲文本放置在3個相鄰列中,然後我在列A,B和C中分別命名爲list1,list2和list3(分別在範圍A2:A5,B2:B5,C2:C5中)。在工作簿中使用單獨的工作表來執行此操作會更好。我保持第一行清晰。

    {=IFERROR(INDEX(List1,ROWS($D$1:D1)),IFERROR(INDEX(List2,ROWS($D$1:D1)-ROWS(List1)),IFERROR(INDEX(List3,ROWS($D$1:D1)-ROWS(List1)-ROWS(List2)),"")))} 
    

    其是陣列式應該是:

    步驟2 通過使用以下公式中的電池D2開始合併從步驟1列表成一列(在我的情況現在柱d)使用CTRL + SHIFT + ENTER輸入,然後複製下來。 這個範圍我調用了ListSource(d2:d13)。我再次不使用第一行。

    步驟3 爲了僅提取在列E中的重複開始於細胞E2該公式沒有特技

    {=IFERROR(INDEX(ListSource,MATCH(0,COUNTIF($E$1:E1,ListSource)+IF(COUNTIF(ListSource,ListSource)>1,0,1),0)),"")} 
    

    這又是一個應該使用CTRL + SHIFT + ENTER和被輸入的陣列式複製到列內的其他單元格中。 再次,第1行沒有任何內容,但您可以添加一些標題。

    這產生所需的輸出 黃 紅

    您可以決定使用在步驟1中導入嚮導是不是嚴格意義上的編程解決方案,因此有可能自動此步驟。

    希望這會有所幫助。

    0

    對於您已經顯示的特定情況,我修改了公式以使用公式來提取顏色,而不是使用VBA代碼。

    =INDEX(RIGHT(LEFT(SUBSTITUTE(A2:A65000,"-","|",2),FIND("|",SUBSTITUTE(A2:A65000,"-","|",2))-1),LEN(LEFT(SUBSTITUTE(A2:A65000,"-","|",2),FIND("|",SUBSTITUTE(A2:A65000,"-","|",2))-1))-FIND("-",LEFT(SUBSTITUTE(A2:A65000,"-","|",2),FIND("|",SUBSTITUTE(A2:A65000,"-","|",2))-1))),MATCH(0,COUNTIF($B$1:B1,RIGHT(LEFT(SUBSTITUTE(A2:A65000,"-","|",2),FIND("|",SUBSTITUTE(A2:A65000,"-","|",2))-1),LEN(LEFT(SUBSTITUTE(A2:A65000,"-","|",2),FIND("|",SUBSTITUTE(A2:A65000,"-","|",2))-1))-FIND("-",LEFT(SUBSTITUTE(A2:A65000,"-","|",2),FIND("|",SUBSTITUTE(A2:A65000,"-","|",2))-1)))),0)) 
    

    像你的這是一個數組公式;所以按Ctrl-Enter。

    然後,您可以複製&從B2向下粘貼此公式,當您獲得#VALUES時,不再有唯一身份。此外,如果您修改列A中的值,則可能需要將公式複製到更多單元格(如果唯一值增加)。