问题:
我在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是不是一个好主意?
谢谢
答案 0 :(得分:2)
我已经为一些相当大的文件(50k行)做了这个,我只需要提取唯一的元素。我所做的很简单:使用数据透视表。这样你甚至不需要VBA,但如果你想进一步处理它,更新表和提取数据仍然非常简单。
我真正喜欢这种方法的原因之一是它同时非常容易和强大。你没有循环或算法来编写,它在Excel功能中就可以了。