Добрый день. У меня имеется выгрузка отвратительнейшего формата. Она ужасна и по структуре и по виду и по частоте предоставления. Я не представляю как ее можно сделать вменяемым плоским видом. Задача - сделать плоскую таблицу по дням. Пример в приложении и на пером листе одна строчка желтого цвета желаемого результата. Файл выгружается ежедневно. Столбцы постоянно едут. Количество именно дней что-то около двух недель, но это не точно. Собирать надо данные со всех листов в один единый массив. В данный момент в папке лежит пара сотен файлов с повторяющимися данными. Я смог макросом наковырять данных, но все рушится при проверке дат, не тех столбцов и тд. Не получилось короче. Буду рад любым предложением решения. Если задача слишком сложная, то прошу перенести в платный раздел.
Валерий Кишин, PQ в помощь. Но я даже не буду пытаться это сделать бесплатно: слишком долго (не 10 минут) + много нюансов, о которых нет упоминания в вопросе.
Option Explicit
Sub FlatActiveSheet()
Dim arr As Variant
arr = FlatArray(Range("A3:AF20"))
With Workbooks.Add(1).Sheets(1).Cells(1, 1).Resize(UBound(arr, 1), UBound(arr, 2))
.Value = arr
End With
End Sub
Private Function FlatArray(rr As Range) As Variant
Dim arr As Variant
Dim yy As Long
Dim xx As Long
Dim uu As Long
Dim brr As Variant
arr = rr.Value
ReDim brr(1 To UBound(arr, 1) * UBound(arr, 2), 1 To 5)
Dim s1 As String
For yy = 2 To UBound(arr, 1)
If rr.Cells(yy, 1).Interior.Color <> 16777215 Then
s1 = arr(yy, 1)
Else
For xx = 3 To UBound(arr, 2)
uu = uu + 1
brr(uu, 1) = s1
brr(uu, 2) = arr(yy, 1)
brr(uu, 3) = arr(yy, 2)
brr(uu, 4) = arr(1, xx)
brr(uu, 5) = arr(yy, xx)
Next
End If
Next
FlatArray = brr
End Function