问题:
我在 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 甚至是一个好主意吗?
谢谢