У меня есть словарь, который я заполнил информацией, которую я извлек из основной таблицы с примерно 65 000 уникальных строк. Затем я хотел бы отфильтровать словарь и извлечь элементы, только если они содержат определенное значение. Ниже приведен мой код для создания словаря из исходных данных, который я заимствовал из других методов, которые я нашел в Интернете:
Sub dict_extract()
Dim cell As Range
Dim Data As Variant
Dim Dict As Object
Dim Item As Variant
Dim Key As Variant
Dim rng As Range
Dim RngBeg As Range
Dim RngEnd As Range
Dim Wks As Worksheet
Dim x As Long
Dim y As Long
Dim i As Long
'Speed Up
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.EnableEvents = False
Set Wks = ThisWorkbook.Worksheets("FullCarriers")
Set RngBeg = Wks.Range("A2:G2")
Set RngEnd = Wks.Cells(Rows.Count, RngBeg.Column).End(xlUp)
If RngEnd.Row < RngBeg.Row Then Exit Sub
Set rng = Wks.Range(RngBeg, RngEnd)
Set Dict = CreateObject("Scripting.Dictionary")
Dict.CompareMode = vbTextCompare
For Each cell In rng.Columns(1).Cells
Key = Trim(cell)
Item = cell.Resize(1, rng.Columns.Count).Value
If Not Dict.Exists(Key) Then
Dict.Add Key, Item
Else
' To increase the rows in the 2-D array it must first be transposed.
' Only the last dimension of an array can be resized.
Data = Application.Transpose(Dict(Key))
x = UBound(Data, 1)
y = UBound(Data, 2) + 1
ReDim Preserve Data(1 To x, 1 To y)
' Transposing the array a second time restores the original order.
Data = Application.Transpose(Data)
' Load the new data.
For x = 1 To UBound(Item, 2)
Data(y, x) = Item(1, x)
Next x
' Save the Data.
Dict(Key) = Data
End If
Next cell
Теперь, когда я go, чтобы напечатать элементы в словаре для мои рабочие листы, у меня есть следующие строки:
For i = 2 To 14
Set rng = ActiveWorkbook.Sheets("Level " & i).Range("A2")
For Each Item In Dict.items
x = UBound(Item, 1)
y = UBound(Item, 2)
rng.Resize(x, y).Value = Item
Set rng = rng.Offset(x, 0)
Next Item
Next i
Что я хотел бы сделать, так это когда я перебираю элементы словаря, проверяю, содержат ли они определенный символ, и печатает на моем листе, если они содержат этот персонаж, и ничего не делать, если они этого не делают. «Код», который мне нужно отфильтровать, выглядит примерно так:
If Mid(Item,13,2) = Format(i, "00") Then
{Print to Worksheet i}
Else
{Do Nothing}
Единственная проблема в том, что я понятия не имею, как это сделать sh. Любая помощь приветствуется. Приветствия