Если вы используете Excel 2016, то вы можете использовать PowerQuery для очень удобного удаления этого набора данных.Кит имеет очень полезную ссылку для вас в комментариях.Отфильтруйте нули, и вы почти в своем решении.Небольшая сложность входит в игру с возможностью повторения этих строк.Функция List.Numbers может помочь вам, если вы хотите немного разобраться в интуиции языка М.
Однако в VBA это не так уж и сложно.Я бы предложил немного другую стратегию, которая заключается в том, чтобы просто перебирать диапазон вашей кросс-таблицы, убирая заголовки строк и столбцов, когда вы набираете число больше 0.
Sub foo()
Dim outputRow As Integer
'start your output at whatever row is best
outputRow = 1
'set your range to cover the counts in your crosstab
For Each c In Range("A1:Z99")
If c.Value > 0 Then
For i = 1 To c.Value
'write the values off the current row headers over to comparable positions in your output row
Worksheets("test2").Cells(outputRow, 3).Value = Cells(c.Row, 1).Value
Worksheets("test2").Cells(outputRow, 4).Value = Cells(c.Row, 2).Value
.
.
.
'write the values off the current column headers into output row
Worksheets("test2").Cells(outputRow, 8).Value = Cells(1, c.Column).Value
outputRow = outputRow + 1
Next i
End If
Next c
End Sub
Удачи, надеюсь, этопомогает