基于左侧单元格值将数据分类到不同存储桶的快速方法

时间:2017-04-03 13:54:40

标签: vba excel-vba excel

这是我想解决的问题。

首先,我需要运行SQL查询。此查询返回最多包含12个类别的数据,每个类别都依赖于前一个类别。例如,如果我对查询的输入是“美国”,那么第1列将是“美国”,第2列将具有50个状态中的每一个。第三列将拥有所有主要城市。因此,我们最终得到大约1000行,左边是“美国”,中间是州,第三列是州所在的城市,如下所示:

 United States   Texas   Austin
 United States   Utah    Salt Lake City
 United States   Nevada  Las Vegas

我需要做的是根据以前的列值以编程方式为每个类别创建数据验证。

我目前的想法是获取原始数据,一次将它分成两列不同的表格,然后删除重复数据。然后,我将从A列中获取唯一值并将它们粘贴到顶部,并将B列中的数据分配到正确的列中。然后我将它作为一个表,并使我的数据验证查看表中的标题。

问题出在这里:我不知道如何快速将B列数据分发到正确的列中。

为清楚起见,这是我的数据在每个页面上的样子,除了在A和B列中有数千对,我需要快速将它分配到三列。

                           Texas     Utah     Nevada
 Texas   Austin
 Utah    Salt Lake City
 Nevada  Las Vegas

到目前为止,这是我正在使用的内容:

Num = 1
Col = 6
EndRow = Columns(Col).Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
For Col = 6 To 19
    Set rng = Range(Cells(2, Col), Cells(EndRow, Col))
    Unique = CountUnique(rng)
    If Unique > 1 Then
     Set rng2 = Sheets("SQL Dump").Range(Cells(2, Col), Cells(EndRow, Col + 1))
     rng2.Copy
     Set ws = Sheets.Add
     ws.Name = "List" & Num
     Num = Num + 1
     ws.Activate
     Cells(1, 1).PasteSpecial xlPasteAll
     'MsgBox ("Do Stuff")
     os.Activate
    End If

Next Col

根据需要,根据需要将其拆分为唯一的工作表。 如果有人知道快速排序的方法,那将非常感激!

或者,如果您知道一种更有效地解决问题的方法,我也很乐意听到这一点 - 谢谢!

编辑:CountUnique是我用来计算列中存在的唯一值的数量的函数。

1 个答案:

答案 0 :(得分:0)

这很容易转换范围。这就是你要找的东西吗?

Sub TransposeRangeValues()
    Dim TmpArray() As Variant, FromRange As Range, ToRange As Range

    Set FromRange = Sheets("Sheet1").Range("a1:c4")
    Set ToRange = ThisWorkbook.Sheets("Sheet1").Range("a1")

    TmpArray = Application.Transpose(FromRange.Value)
    FromRange.Clear
    ToRange.Resize(FromRange.Columns.Count, FromRange.Rows.Count).Value2 = TmpArray
End Sub