从大,宽,无标题的混合格式表中提取独特文本单元格的列表

对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的,但它包含了提取选项

  1. 唯一身份(至less出现一次的数据)或
  2. 真正的唯一(数据只出现一次)

它可以find唯一的单元格(你的情况),完整的行,或混合的列

最后它有select

  • 忽略所有的空格(包括CHAR 160)
  • 忽略情况
  • 应用TRIM和/或CLEANfunction
  • 正则expression式stringreplace