1

问题:

我在 Excel 中有大约 50,000 行。每行包含一个单词 domain=[a-Z0-9] 其中 [a-Z0-9] 是一堆数字和文本(如 GUID)的占位符。这个域 ID 让我们称之为 abc123,它是唯一的。但是,在 50,000 行中,它不是表的唯一键,因此我需要通过删除域 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 个分隔符(=,&)用于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 甚至是一个好主意吗?

谢谢

4

1 回答 1

2

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

我真正喜欢这种方法的原因之一是它既简单又强大。您无需编写循环或算法,它就在 Excel 功能中。

在此处输入图像描述

于 2012-09-11T00:26:23.693 回答