这应该是VBA / Excel专家的快速。我有一个大的60到2000行,宽10,000列,Excel中没有标题的表格,具有以下格式。
+---------+----------------+------------------+----------+ | | 20110811 | 20110810 | 20110810| +---------+----------------+------------------+----------+ | AA UN | 4.0111 | AA UN | 5.0222 | | AXP UN | 3.0611 | AXP UN | 3.0217 | | BA UN | 3.997 | BA UN | 4.0532 | | BAC UN | 0.4924 | BAC UN | 0.478 | | CAT UN | 5.9259 | CAT UN | 5.8959 | | CSCO UW | 1.0813 | CSCO UW | 0.9693 | | CVX UN | 6.3891 | CVX UN | 6.3943 | | DD UN | 3.1894 | DD UN | 3.165 | | DIS UN | 2.1815 | DIS UN | 2.2267 | | GE UN | 1.065 | GE UN | 1.0654 | +---------+----------------+------------------+----------+
问题是如何从整个表中获取一个独特的文本单元列表,我一直在使用高级自动过滤器,但它确实没有给出我想要的东西。我正在寻找像下面那样的smth
╔═════════╗ ║ AA UN ║ ║ AXP UN ║ ║ BA UN ║ ║ BAC UN ║ ║ CAT UN ║ ║ CSCO UW ║ ║ CVX UN ║ ║ DD UN ║ ║ DIS UN ║ ║ GE UN ║ ╚═════════╝
顺便说一句,感谢GSerg的格式化,现在我学会了一个新技巧
答案 0 :(得分:1)
一种解决方案是将整个范围转储到变量数组中,然后循环遍历它,将不是数字的条目添加到字典对象中。这将消除所有欺骗和非数字数据。拿字典键并将它们移回到工作表上。
<强>更新强>: 这是您可以使用的代码。
工作原理:您可以调整范围(现在它是所有使用的单元格),但它会将每个单元格一次性转储到变体数组中。然后它遍历数组(比通过单元格快得多),如果条目不为空,也不是数字,则将其添加到字典对象中。由于您无法将2个相同的键放入字典中,因此它会自动跳过所有字段。然后我将唯一列表粘贴到sheet2中(您也可以调整它)。
Sub UniqueTextList()
Application.ScreenUpdating = False
Dim vArray As Variant
Dim i As Long, j As Long
Dim v As Variant
Dim dictionary As Object
Set dictionary = CreateObject("scripting.dictionary")
vArray = ActiveSheet.UsedRange.Value
For i = 1 To UBound(vArray, 1)
For j = 1 To UBound(vArray, 2)
If Len(vArray(i, j)) <> 0 Then
If IsNumeric(vArray(i, j)) = False Then
dictionary(vArray(i, j)) = 1
End If
End If
Next
Next
Sheet2.range("a1").Resize(dictionary.count).Value = _
Application.Transpose(dictionary.keys)
Application.ScreenUpdating = True
MsgBox dictionary.Count & " unique cell(s) were found and copied."
End Sub
答案 1 :(得分:0)
我的Duplicate Master addin使用与Issun类似的方法
虽然大部分功能都是以欺骗为目标,但它包括提取选项
它可以找到uniques作为单个单元格(你的情况),完整的行,或作为列的混合
最后它有
的选项TRIM
和/或CLEAN
函数