从大型,宽,无标题,混合格式表中提取唯一文本单元格列表

时间:2011-08-13 07:33:56

标签: excel

这应该是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的格式化,现在我学会了一个新技巧

2 个答案:

答案 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类似的方法

虽然大部分功能都是以欺骗为目标,但它包括提取选项

  1. 唯一身份证明(至少发生一次的数据)或
  2. True Uniques(仅发生一次的数据)
  3. 它可以找到uniques作为单个单元格(你的情况),完整的行,或作为列的混合

    最后它有

    的选项
    • 忽略所有空格(包括CHAR 160)
    • 忽略案例
    • 应用TRIM和/或CLEAN函数
    • Regexp string substitions