Ya te había preparado la macro para eso. Solamente faltaba la condición de no cargar las hojas que estuvieran vacías.
En esta condición:
If LCase(sh.Range("E5").Value) = LCase("Marca") ThenHay que agregar la condición si la celda está vacía:
If LCase(sh.Range("E5").Value) = LCase("Marca") And _
Sh. Range("E6").Value <> "" Then
Los valores a mostrar en el Listbox azul serian en este orden:
1º columna en que hoja se encuentra ... nombre
2º columna submaquina... en las sheets columna B
3º columna nombre en Excel Mto... en las sheets columna C
4º columna ·Referencia Almacen Mto... en las sheets columna D
5º columna Marca... en las sheets columna E
6º columna Cantidad... en las sheets columna F
Eso hace esta parte:
For i = 1 To UBound(a, 1)
k = k + 1
'Acumula en la matriz b, todas las marcas de todas las hojas
'Orden: 1-hoja, 2-colB, 3-colC, 4-colD, 5-colE, 6-colF
b(k, 1) = sh.Name
For j = 1 To UBound(a, 2)
b(k, j + 1) = a(i, j)
Next
Next
En la matriz 'b' tendrás todos los datos de las hojas con las columnas que solicitaste.
Si tienes duda con el código, con gusto lo revisamos.