Можно сделать вот так
Option Explicit
Sub Check_Firmware()
Dim ArrPK() As String, SearchString As String 'Declare ArrPk as string array
Dim Firmware As Range, aCell As Range
Dim ws As Worksheet
Dim PkCounter As Long
Dim LstBox As msforms.ListBox
Set ws = ThisWorkbook.Sheets("Sheet1")
SearchString = "Controller Firmware Version"
Set LstBox = UserForm1.ListBox1
PkCounter = 1
With ws
'set range that will be source for searching
Set Firmware = .Range("F1:F" & .Cells(.Rows.Count, "F").End(xlUp).Row)
For Each aCell In Firmware 'loop each cell of desired range
If aCell.Value2 = SearchString Then 'if match found
ReDim Preserve ArrPK(1 To 2, 1 To PkCounter) 'redimension array.
ArrPK(1, PkCounter) = aCell.Offset(1, 0) 'firmware
ArrPK(2, PkCounter) = aCell.Offset(1, -2) 'serial no
PkCounter = PkCounter + 1 'increase counter for next match found
End If
Next
End With
With LstBox
.Clear
.ColumnCount = 2
.Width = 105
.ColumnWidths = "50;50"
For PkCounter = LBound(ArrPK(), 2) To UBound(ArrPK(), 2)
.AddItem 'add new item to listbox
'put values to newly added row
.List(PkCounter - 1, 0) = ArrPK(1, PkCounter) 'new row/column 0
'PkCounter - 1 because listbox is counted from 0
.List(PkCounter - 1, 1) = ArrPK(2, PkCounter)'new row/column 1
Next PkCounter
End With
UserForm1.Show
End Sub
РЕДАКТИРОВАТЬ:
ReDim Preserve ArrPK(1 To 2, 1 To PkCounter)
Это устанавливает новые измерения для массива
Так что теперь у вас есть 2 массива измерения.
Preserve
означает, что все значения, которые уже находятся в массиве, останутся там
1 To 2 and 1 to PkCounter
- новые размеры для массива. Когда вы найдете больше совпадений, то PkCounter будет расти, как и массив.
Установите точку останова на With LstBox
, откройте окно «Местные жители». Вы увидите там свой массив ArrPK
и сможете проверить, что внутри него.
Вы можете прочитать больше о массивах в Интернете.