Есть несколько проблем с вашим кодом, но ни одна из них не должна вызывать несоответствие типов, если в ваших данных нет ошибок рабочего листа (например, # N / A, # DIV / 0 !, и т. Д.).
Вы должны знать, на каком рабочем столе находится ваша таблица; не полагайтесь на активный лист.
1-D массив по умолчанию имеет нулевое значение, а не единичное значение.
Вы должны удалить лишние (пустые) элементы в вашем массиве после его заполнения. Используйте окно Locals или установите Watch на вашем массиве, чтобы увидеть, как он заполняется и изменяет размер при переходе по функции с помощью F8.
Option Explicit
Sub main()
Dim n As Variant, i As Long
n = FilterTable("table1")
For i = LBound(n) To UBound(n)
Debug.Print n(i)
Next i
End Sub
Function FilterTable(tableName As String) As Variant
Dim table As Range, names As Range, cell As Range
Dim i As Long, j As Long
Dim names_2 As Variant
i = 0
j = 1
ReDim names_2(100)
Set table = Worksheets("Sheet3").Range(tableName).Columns(1)
Set names = Worksheets("Sheet3").Range(tableName).Columns(2)
For Each cell In table.Cells
If Not IsError(cell) Then
If cell = 3 Then
names_2(i) = names.Cells(j, 1).Value
i = i + 1
End If
End If
j = j + 1
Next cell
ReDim Preserve names_2(i - 1)
FilterTable = names_2
End Function