从大,宽,无标题的混合格式表中提取独特文本单元格的列表
对VBA / Excel专家来说,这应该是一个快速的过程。 我有一个大的60到2000行,宽10000个列,在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联合国| 1.065 | GE联合国| 1.0654 | + --------- + ---------------- + ------------------ + --- ------- +
问题是如何从整个表中获得一个独特的文本单元列表,我一直在玩先进的自动filter,但它并没有给我想要的东西。 我正在寻找像下面那样的水手
╔═════════╗ ║AA UN║ ║AXP UN║ ║BA UN║ ║BAC UN║ ║CAT UN║ ║CSCO UW║ ║CVX UN║ ║DD UN║ ║DIS UN║ ║GE UN║ ╚═════════╝
顺便说一句,感谢GSerg的格式化,现在我学到了一个新的窍门
一种解决scheme是将整个范围转储到一个variables数组中,然后在其中循环添加不是数字的条目到一个字典对象中。 这将消除所有愚蠢和非数字数据。 拿字典键并将它们重新放在表格上。
更新 :这是你可以使用的代码。
它是如何工作的 :你可以调整范围(现在它是所有使用的单元格),但它会将每个单元格转储到一个变体数组中。 然后它通过数组(比通过单元格快得多),并且如果条目不是空的,也不是数字的,它将其添加到字典对象。 既然你不能把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
我的重复主插件使用Issun类似的方法
虽然这些function的大部分function都是针对这些function的,但它包含了提取选项
- 唯一身份(至less出现一次的数据)或
- 真正的唯一(数据只出现一次)
它可以find唯一的单元格(你的情况),完整的行,或混合的列
最后它有select
- 忽略所有的空格(包括CHAR 160)
- 忽略情况
- 应用
TRIM
和/或CLEAN
function - 正则expression式stringreplace