Страницы: 1
RSS
Разделение одной таблицы состоящей из 1000 строк и 3х столбцов на равные таблицы по 50 строк, Приходится ежедневно разносить одну длинную таблицу на несколько по 40-50 строк для вывода в чертеж
 
Приходится ежедневно вручную разносить одну длинную таблицу  на несколько по 40-50 строк для вывода в чертеж
Исходная таблица может состоять и из 3000 строк и 3-5 столбцов .Но в основном это 3 столбца
Прошу помочь макросом или формулой
 
Цитата
Polevik написал: по 40-50 строк...
Таблицы должны быть +/- равномерной длины по строкам?
Согласие есть продукт при полном непротивлении сторон
 
Не хватает информации, по каким параметрам должна происходить эта "разноска".
 
Polevik, ну макрос то простой, вот для начала:
код
 
д.массив
Изменено: ПавелW - 10.05.2026 16:31:54
 
вариант для более ранних версий Excel (формула в последнем сегменте отличается - для конкретного случая нужно посчитать размер оставшегося диапазона, например в данном примере по 50, а остаток 45)
формула массива в А1-D50 на новом листе, далее выделяем столбцы 1-5 и копируем правее (5-й столбец разделительный) в 6-10, 11-15 и т.д.
(<.. =ИНДЕКС(Лист1!$A$1:$D$1000;1+((СТОЛБЕЦ(A1)-1)/5)*50;1):ИНДЕКС(Лист1!$A$1:$D$1000;1+((СТОЛБЕЦ(A1)-1)/5)*50+50;4) ..>)

(из-за обьемов выверка работы формулы выполнена лишь частично)
Изменено: ВовавВова - 11.05.2026 11:34:22
познакомился с Excel
 
вариант макросом с разнесением по листам:
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР.
 
Еще один вариант макросом
Код
Sub enstaralfgg()
Dim Rg1 As Range, kRw$, kSh%, i&
Const Ima As String = "Раздел"
kRw = 50
Set Rg1 = ThisWorkbook.Worksheets(1).Cells(1).CurrentRegion

kRw = InputBox(vbNullString, "Введите количество строк на листе", kRw)
If StrPtr(kRw) = 0 Then Exit Sub
If kRw = vbNullString Then Exit Sub
kSh = Rg1.Rows.Count \ kRw + 1

If MsgBox("Создать " & kSh & " новых листов с данными" & _
vbNewLine & "Продолжить?", 52, "ВНИМАНИЕ!") = 7 Then Exit Sub
Set Rg1 = Rg1.Resize(kRw, Rg1.Columns.Count)

    Application.ScreenUpdating = False
For i = 1 To kSh
    Sheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Name = Ima & i
    Rg1.Copy Cells(1)
    Set Rg1 = Rg1.Offset(kRw, 0)
Next
    Application.ScreenUpdating = True
End Sub
 
Цитата
написал:
Еще один вариант макросом
Круто, и лаконично (8
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР.
 
Разбиваем таблицу 'на месте'. Таблицы начинаются с желтой строки и отделены друг от друга пустой строкой. Количество строк задается в коде. Что-бы увидеть результат прокрутите лист вниз
Код
Sub tblSplit()
Const iStp& = 45  'количество строк в таблицах
Dim lRow&
Dim rngInsert As Range
Application.ScreenUpdating = False
With ActiveSheet
  lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
  For I = iStp To lRow Step iStp
    If Not rngInsert Is Nothing Then
      Set rngInsert = Union(rngInsert, Rows(I))
    Else
      Set rngInsert = Rows(I)
    End If
  Next
  rngInsert.Insert Shift:=xlDown
  Intersect(.Rows(1), .UsedRange).Interior.ColorIndex = 6
  Intersect(rngInsert, .UsedRange).Interior.ColorIndex = 6
End With
Application.ScreenUpdating = True
End Sub
Согласие есть продукт при полном непротивлении сторон
 
вариант простыми формулами (Лист2)
...можно вернуть только таблицу с определенным номером (Лист1)
 
Здравствуйте!
pq
Изменено: Ma_Ri - 11.05.2026 18:38:49
Ma_Ri ≠ Мария
Страницы: 1
Читают тему
Наверх