Доброго времени суток! Появилась задача проанализировать отчет в PDF. Структура такая: на одном листе три столбца, на втором листе - один столбец (относящийся к первому). И далее также, на нечётном листе три столбца, на четном - один. С помощью ABBYY конвертирую данные в Excel. Как возможно привести данные к табличному виду? (Чтобы данные с четных и нечетных листов были рядом) К сожалению файлы Excel не имею технической возможности приложить Для структуры данных прилагаю фото PDF
Файлы не прикладываются( Структуру вроде подробно описал
Доброго времени суток! Появилась задача проанализировать отчет в PDF. Структура такая: на одном листе три столбца, на втором листе - один столбец (относящийся к первому). И далее также, на нечётном листе три столбца, на четном - один. С помощью ABBYY конвертирую данные в Excel. Как возможно привести данные к табличному виду? (Чтобы данные с четных и нечетных листов были рядом) К сожалению файлы Excel не имею технической возможности приложить Для структуры данных прилагаю фото PDF
Файлы не прикладываются( Структуру вроде подробно описалHoBU4OK
Я думал, ты остроглазый лев, а ты слепая собака :-)
Сообщение отредактировал HoBU4OK - Суббота, 09.06.2018, 11:52
Доброго времени суток! На листе Пример результат конвертации ABBYY, на листе Желаемый результат - желаемый результат. Количество строк около 400 000 (12000 листов PDF, около 40 строк на листе)
П.С. Возможно перенести тему в Вопросы Excel?, Вопросы VBA?
Доброго времени суток! На листе Пример результат конвертации ABBYY, на листе Желаемый результат - желаемый результат. Количество строк около 400 000 (12000 листов PDF, около 40 строк на листе)
П.С. Возможно перенести тему в Вопросы Excel?, Вопросы VBA?HoBU4OK
Sub toTable() Dim i&, cnt&, r&, res As Worksheet Set res = ThisWorkbook.Sheets("Результат") r = 2: i = 2
res.Cells(2, 1).CurrentRegion.ClearContents Do While (Cells(i, 1) <> "") If Cells(i, 2) <> "" Then cnt = Cells(i, 3).End(xlDown).Row - i + 1 Cells(i, 1).Resize(cnt, 3).Copy res.Cells(r, 1) Cells(i + cnt, 1).Resize(cnt).Copy res.Cells(r, 4) i = i + 2 * cnt r = r + cnt End If Loop End Sub
[/vba]
Предполагается, что кол-во строк с 4-м столбцом (на четном листе) совпадает с кол-вом строк в столбцах на нечетном листе.
HoBU4OK, можно так: [vba]
Код
Sub toTable() Dim i&, cnt&, r&, res As Worksheet Set res = ThisWorkbook.Sheets("Результат") r = 2: i = 2
res.Cells(2, 1).CurrentRegion.ClearContents Do While (Cells(i, 1) <> "") If Cells(i, 2) <> "" Then cnt = Cells(i, 3).End(xlDown).Row - i + 1 Cells(i, 1).Resize(cnt, 3).Copy res.Cells(r, 1) Cells(i + cnt, 1).Resize(cnt).Copy res.Cells(r, 4) i = i + 2 * cnt r = r + cnt End If Loop End Sub
[/vba]
Предполагается, что кол-во строк с 4-м столбцом (на четном листе) совпадает с кол-вом строк в столбцах на нечетном листе.Manyasha
Sub tt() r0_ = 2 nr_ = Cells(Rows.Count, 1).End(3).Row - r0_ + 1 With Cells(r0_, 1).Resize(nr_, 3) ar = .Value .Clear End With ReDim ar1(1 To nr_ / 2, 1 To 4) For i = 1 To nr_ If IsEmpty(ar(i, 2)) Then For j = 1 To n_ For k = 1 To 3 ar1(i - nn_ + j - 1, k) = ar(i - n_ + j - 1, k) Next k ar1(i - nn_ + j - 1, 4) = ar(i + j - 1, 1) Next j i = i + n_ - 1 n_ = 0 Else n_ = n_ + 1 nn_ = nn_ + 1 End If Next i Cells(r0_, 1).Resize(nr_ / 2, 4) = ar1 End Sub
[/vba]
У меня такой вариант [vba]
Код
Sub tt() r0_ = 2 nr_ = Cells(Rows.Count, 1).End(3).Row - r0_ + 1 With Cells(r0_, 1).Resize(nr_, 3) ar = .Value .Clear End With ReDim ar1(1 To nr_ / 2, 1 To 4) For i = 1 To nr_ If IsEmpty(ar(i, 2)) Then For j = 1 To n_ For k = 1 To 3 ar1(i - nn_ + j - 1, k) = ar(i - n_ + j - 1, k) Next k ar1(i - nn_ + j - 1, 4) = ar(i + j - 1, 1) Next j i = i + n_ - 1 n_ = 0 Else n_ = n_ + 1 nn_ = nn_ + 1 End If Next i Cells(r0_, 1).Resize(nr_ / 2, 4) = ar1 End Sub