这是我想解决的问题。
首先,我需要运行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是我用来计算列中存在的唯一值的数量的函数。
答案 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