【问题标题】:Excel: Putting together two different complex formulas (Unique distinct list & Split)Excel:将两个不同的复杂公式放在一起(唯一不同的列表和拆分)
【发布时间】:2009-12-16 00:48:54
【问题描述】:

大家好,你们这些了不起的人

我想做两件事

  • 从一长串重复值中填充一个唯一的不同列表
  • 提取用连字符分隔的文本的组成部分

我在不同的地方找到了解决这些问题的方法。

此处的唯一不同列表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)。

感谢任何帮助。谢谢一百万!

斯里拉姆

【问题讨论】:

  • 真的是用户要求在没有帮助列的情况下执行此操作吗?您可以随时隐藏该列。为这样一个特定的问题编写一个 UDF 非常简单......但是抽象这样一个独特的问题真的有用吗?
  • 这些答案有帮助吗?
  • 大家好,对不起,我还没来得及应用这些。我必须经历一个学习曲线才能检查这些。这些是我在工作中做的一些平行项目。因此,延迟。我真的很感谢你的帮助。我试图在没有帮助列的情况下完成所有这些工作的原因是因为这将是一项重复性工作,我想确保尽可能少地涉及重复性手动工作。

标签: vba excel split unique


【解决方案1】:

使用 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

【讨论】:

    【解决方案2】:

    您的问题中有一些有用的链接 - 谢谢。

    我使用您的示例数据执行以下操作 香蕉 - 黄色 - 水果 太阳 - 黄色 - 星星 血 - 红色 - 液体 出口 - 红色 - 标牌

    第 1 步 将其复制到记事本中并在 excel 中打开并运行向导以提取分隔符“”和“-”。这将数据作为文本放置在 3 个相邻列中,然后我在 A、B 和 C 列中命名为 list1、list2 和 list3(分别位于 A2:A5、B2:B5、C2:C5 的范围内)。最好在工作簿中使用单独的工作表来执行此操作。我保持第一行清晰。

    第 2 步 使用从单元格 D2 开始的以下公式将步骤 1 中的列表合并为一列(在我的情况下为 D 列):

    {=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)),"")))}
    

    这是一个数组公式,应该使用 CTRL + SHIFT + ENTER 输入,然后向下复制。 这个范围我称之为 ListSource (d2:d13)。同样,我没有使用第一行。

    第 3 步 要仅提取从单元格 E2 开始的 E 列中的重复项,此公式可以解决问题

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

    这又是一个数组公式,应该使用 CTRL + SHIFT + ENTER 输入并向下复制到列中的其他单元格中。 尽管您可以添加一些标题,但第 1 行仍然没有任何内容。

    这产生了所需的输出 黄色的 红色

    您可能决定在步骤 1 中使用导入向导并不是严格意义上的编程解决方案,因此可以自动执行此步骤。

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      对于您所展示的特定情况,我修改了您的公式以使用公式而不是使用 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 列中的值,如果唯一值增加,您可能需要将公式复制到更多单元格。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-12
        • 1970-01-01
        • 2011-05-28
        • 1970-01-01
        • 1970-01-01
        • 2021-12-02
        相关资源
        最近更新 更多