Excel / VBA:如何保持第一行包含var的第一行并删除其余的并重复?

时间:2012-09-11 00:22:01

标签: excel excel-vba excel-2007 vba

问题:

我在Excel中有大约50,000行。每行包含一个单词domain = [a-Z0-9] 其中[a-Z0-9]是一堆数字的占位符和GUID之类的文本。这个域ID让我们称之为abc123它是唯一的。但是在50,000行中,它不是表的唯一键,因此我需要通过删除domain ID = abc123的所有其他行来使其唯一。但是我必须为所有域做到这一点,所以我不能具体。我需要一个脚本来解决这个问题。域ID始终位于同一列中,并且有许多不同的域ID会自行重复。

示例

第2栏 abunchofstuff3123123khafadkfh23k4h23kh *的 DOMAINID = ABC123 *

伪代码

//Whenever there is a value for domain in row i col 2    
//does it already exist in ListOfUniqueDomains?  
//if so then remove this row  
//else add to the ListOfUniqueDomains

如何使用Excel / VBA执行此操作?

更新的答案 所以我真的很喜欢使用数据透视表的想法,但我仍然需要提取域ID,所以我想我会在这里发布解决方案。我实际上在谷歌搜索时偷走了其他网站的功能,但我丢失了原来的帖子以给予适当的信任。所以请原谅我,如果那个人是你,但给自己拍拍背,如果你在我家附近,我会给你买午餐(很容易)。

所以在我的情况下,我有2个delimeters(=,&)用于字符串domain=abc123&,它嵌入在一个更长的字符串中。因此,要提取域ID,我执行了以下操作。

 Public Function extract_value(str As String) As String
    Dim openPos As Integer
    Dim closePos As Integer
    Dim midBit As String
     On Error Resume Next
    openPos = InStr(str, "=") 'get the position of the equal sign
     On Error Resume Next
    closePos = InStr(str, "&") ' get the position of the &
     On Error Resume Next

    midBit = Mid(str, openPos + 1, closePos - 1) 
   'get the string that is between equal sign and before '&' however this seems  
   'greedy and so it 'picked up the last '&'.I used split to get the first occurrence
   'of '&' because that was how my string was designed.

   Dim s As String
    s = Split(midBit, "&")(0)
    extract_value = s

    End Function

对于像这样的事情,VBA是不是一个好主意?

谢谢

1 个答案:

答案 0 :(得分:2)

我已经为一些相当大的文件(50k行)做了这个,我只需要提取唯一的元素。我所做的很简单:使用数据透视表。这样你甚至不需要VBA,但如果你想进一步处理它,更新表和提取数据仍然非常简单。

我真正喜欢这种方法的原因之一是它同时非常容易和强大。你没有循环或算法来编写,它在Excel功能中就可以了。

enter image description here