我正在尝试从一个包含12个工作表(每月1个)的项目中收集数据,每月大约有1000行。每行都有一个上市公司和一个销售公司列。 我希望为每个唯一的字符串过滤两列,最后以每个公司的列表/行的形式列出它们被列出的次数。这些行然后按降序排列。 即:
CENTURY 15
CENTRAL 4
CIR 4
PROFESSIONALS 3 etc.
SUTTON 3
HOUSE 1
URBAN 1
Listing Firm 1 Selling Firm 1 Name
CENTURY CIR
MOUNTAINVIEW CENTURY
CENTRAL CENTURY
CIR SUTTON
CENTRAL CENTRAL
PLINTZ DIRECT
CENTURY CIR
CENTURY CENTURY
DIRECT CENTURY
SUTTON CIR
CENTURY HOUSE
CENTURY PROFESSIONALS
REALTY CENTURY
CENTRAL CENTURY
WALLER HOUSE
PROFESSIONALS CENTURY
PROFESSIONALS CENTURY
CENTURY URBAN
CENTURY SUTTON
我认为我需要执行此VBA。不知道是不是这种情况。:
我能以某种方式将2列合并为一个数组吗
然后遍历数组以获取唯一的字符串。
并将该数组分配给变量(尽管不确定如何将其用于下一步)。我仍然需要遍历原始的2000个左右的条目(第1列和第2列),以及每个公司的总数。
我希望这对某人有意义。我正在尽我所能组织有限的活动。
如果我的逻辑是正确的,那么我希望获得一些指导。
谢谢。 geddeca
答案 0 :(得分:0)
字典可以为您提供唯一的列表并同时计数。信息返回到工作表后,即可进行快速排序。
以下内容从单个工作表中收集并处理信息。遍历十几个工作表并进行处理应该相对容易。
代码:
Option Explicit
Sub macro()
Dim i As Long, j As Long, w As Long
Dim arr As Variant, dict As Object
Set dict = CreateObject("scripting.dictionary")
dict.comparemode = vbTextCompare
For w = 1 To 1
With Worksheets(w)
'collect values from worksheet
arr = .Range(.Cells(2, "A"), .Cells(.Rows.Count, "B").End(xlUp)).Value2
'process dictionary of list and count
dict.RemoveAll
For i = LBound(arr, 1) To UBound(arr, 1)
For j = LBound(arr, 2) To UBound(arr, 2)
dict.Item(arr(i, j)) = dict.Item(arr(i, j)) + 1
Next j
Next i
'return new values to worksheet
.Cells(1, "D").Resize(1, 2) = Array("list", "count")
.Cells(2, "D").Resize(dict.Count, 1) = Application.Transpose(dict.keys)
.Cells(2, "E").Resize(dict.Count, 1) = Application.Transpose(dict.items)
'sort values by count descending then name ascending
With .Range(.Cells(1, "D"), .Cells(.Rows.Count, "E").End(xlUp))
.Sort key1:=.Columns(2), order1:=xlDescending, _
key2:=.Columns(1), order2:=xlAscending, _
Header:=xlYes
End With
End With
Next w
End Sub