Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Разложение одной таблицы на несколько (по горизонтали) - Страница 2 - Мир MS Excel

  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: китин, _Boroda_, DrMini  
Разложение одной таблицы на несколько (по горизонтали)
Dalm Дата: Суббота, 04.07.2026, 22:33 | Сообщение № 21
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 209
Репутация: 4 ±
Замечаний: 0% ±

Excel 2019
.


Сообщение отредактировал Dalm - Суббота, 04.07.2026, 22:35
 
Ответить
Сообщение.

Автор - Dalm
Дата добавления - 04.07.2026 в 22:33
Dalm Дата: Суббота, 04.07.2026, 22:34 | Сообщение № 22
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 209
Репутация: 4 ±
Замечаний: 0% ±

Excel 2019
Что же делать ?
Помогите
 
Ответить
СообщениеЧто же делать ?
Помогите

Автор - Dalm
Дата добавления - 04.07.2026 в 22:34
MikeVol Дата: Воскресенье, 05.07.2026, 10:24 | Сообщение № 23
Группа: Проверенные
Ранг: Обитатель
Сообщений: 490
Репутация: 121 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
Dalm,
То есть таблица "Группа-2" не идет по порядку, а просто куда-то исчезает.

Всё правильно код отработал, ведь вы
Я удалил одну из желтых ячеек с надписью "Группа".

Вы вообще пробывали читать код, понять его логику? Что просили - то и получили как результат. Я что-то сам запутался в ваших хотелках.


Ученик.
Одесса - Украина
 
Ответить
СообщениеDalm,
То есть таблица "Группа-2" не идет по порядку, а просто куда-то исчезает.

Всё правильно код отработал, ведь вы
Я удалил одну из желтых ячеек с надписью "Группа".

Вы вообще пробывали читать код, понять его логику? Что просили - то и получили как результат. Я что-то сам запутался в ваших хотелках.

Автор - MikeVol
Дата добавления - 05.07.2026 в 10:24
MikeVol Дата: Воскресенье, 05.07.2026, 10:46 | Сообщение № 24
Группа: Проверенные
Ранг: Обитатель
Сообщений: 490
Репутация: 121 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
Не знаю, может и угадаю вашу логику хотелки, возьму за основу код от Елены и чуть его изменю: [vba]
Код
Option Explicit
Const stdata        As String = "Y17"

Public Sub SplitTable_v2()
    On Error GoTo ErrorHandler
    Dim i As Long, ir As Long, cc As Long

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.CutCopyMode = False

    With ActiveSheet

        Dim st      As Range
        Set st = .Range(stdata)

        Dim nCol    As Long
        nCol = st.CurrentRegion.Columns.Count

        Dim Offs    As Long
        Offs = nCol + 2

        Dim rTitle  As Range
        Set rTitle = st.Resize(1, nCol)

        Dim arrData
        arrData = st.CurrentRegion.Value

        Dim c0      As Long
        c0 = st.Column

        Dim r0      As Long
        r0 = st.Row

        Dim lCol    As Long
        lCol = .Cells(r0 - 1, .Columns.Count).End(xlToLeft).Column

        For cc = st.Column + Offs To lCol Step Offs
            .Range(.Cells(r0, cc), _
                    .Cells(r0 + UBound(arrData), cc + nCol - 1)).Clear
        Next cc

        c0 = st.Column

        For i = 2 To UBound(arrData)

            If arrData(i, 2) Like "Группа *" Then

                Do
                    c0 = c0 + Offs

                    If c0 > lCol Then Exit For
                Loop Until .Cells(r0 - 1, c0).Value = "Группа"

                If c0 > lCol Then Exit For
                ir = i

            ElseIf i < UBound(arrData) Then

                Do While i < UBound(arrData) And _
                        Not arrData(i, 2) Like "Группа *"
                    i = i + 1
                Loop

                rTitle.Copy .Cells(r0, c0)

                .Cells(r0 + ir - 1, st.Column).Resize(i - ir, nCol).Copy
                .Cells(r0 + 1, c0).PasteSpecial xlPasteValuesAndNumberFormats

                .Cells(r0 + ir - 1, st.Column).Resize(i - ir, nCol).Copy
                .Cells(r0 + 1, c0).PasteSpecial xlPasteFormats

                i = i - 1
            End If

        Next i

    End With

ExitHandler:
    Application.CutCopyMode = False
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    Exit Sub

ErrorHandler:
    MsgBox Err.Description, vbCritical
    Resume ExitHandler
End Sub
[/vba]Вдруг угадал. Удачи.


Ученик.
Одесса - Украина
 
Ответить
СообщениеНе знаю, может и угадаю вашу логику хотелки, возьму за основу код от Елены и чуть его изменю: [vba]
Код
Option Explicit
Const stdata        As String = "Y17"

Public Sub SplitTable_v2()
    On Error GoTo ErrorHandler
    Dim i As Long, ir As Long, cc As Long

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.CutCopyMode = False

    With ActiveSheet

        Dim st      As Range
        Set st = .Range(stdata)

        Dim nCol    As Long
        nCol = st.CurrentRegion.Columns.Count

        Dim Offs    As Long
        Offs = nCol + 2

        Dim rTitle  As Range
        Set rTitle = st.Resize(1, nCol)

        Dim arrData
        arrData = st.CurrentRegion.Value

        Dim c0      As Long
        c0 = st.Column

        Dim r0      As Long
        r0 = st.Row

        Dim lCol    As Long
        lCol = .Cells(r0 - 1, .Columns.Count).End(xlToLeft).Column

        For cc = st.Column + Offs To lCol Step Offs
            .Range(.Cells(r0, cc), _
                    .Cells(r0 + UBound(arrData), cc + nCol - 1)).Clear
        Next cc

        c0 = st.Column

        For i = 2 To UBound(arrData)

            If arrData(i, 2) Like "Группа *" Then

                Do
                    c0 = c0 + Offs

                    If c0 > lCol Then Exit For
                Loop Until .Cells(r0 - 1, c0).Value = "Группа"

                If c0 > lCol Then Exit For
                ir = i

            ElseIf i < UBound(arrData) Then

                Do While i < UBound(arrData) And _
                        Not arrData(i, 2) Like "Группа *"
                    i = i + 1
                Loop

                rTitle.Copy .Cells(r0, c0)

                .Cells(r0 + ir - 1, st.Column).Resize(i - ir, nCol).Copy
                .Cells(r0 + 1, c0).PasteSpecial xlPasteValuesAndNumberFormats

                .Cells(r0 + ir - 1, st.Column).Resize(i - ir, nCol).Copy
                .Cells(r0 + 1, c0).PasteSpecial xlPasteFormats

                i = i - 1
            End If

        Next i

    End With

ExitHandler:
    Application.CutCopyMode = False
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    Exit Sub

ErrorHandler:
    MsgBox Err.Description, vbCritical
    Resume ExitHandler
End Sub
[/vba]Вдруг угадал. Удачи.

Автор - MikeVol
Дата добавления - 05.07.2026 в 10:46
Dalm Дата: Воскресенье, 05.07.2026, 16:22 | Сообщение № 25
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 209
Репутация: 4 ±
Замечаний: 0% ±

Excel 2019
MikeVol, вот теперь нормально стало.
Спасибо.
 
Ответить
СообщениеMikeVol, вот теперь нормально стало.
Спасибо.

Автор - Dalm
Дата добавления - 05.07.2026 в 16:22
Dalm Дата: Понедельник, 06.07.2026, 02:02 | Сообщение № 26
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 209
Репутация: 4 ±
Замечаний: 0% ±

Excel 2019
MikeVol, я увеличил расстояние между желтыми ячейками - и макрос стал выдавать только первую часть большой таблицы.
Остальные части - игнорирует, хотя на листе по прежнему находятся желтые ячейки с надписью "Группа".
Как исправить макрос ?
К сообщению приложен файл: dalm_2_2.xlsm (32.3 Kb)
 
Ответить
СообщениеMikeVol, я увеличил расстояние между желтыми ячейками - и макрос стал выдавать только первую часть большой таблицы.
Остальные части - игнорирует, хотя на листе по прежнему находятся желтые ячейки с надписью "Группа".
Как исправить макрос ?

Автор - Dalm
Дата добавления - 06.07.2026 в 02:02
Dalm Дата: Понедельник, 06.07.2026, 17:42 | Сообщение № 27
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 209
Репутация: 4 ±
Замечаний: 0% ±

Excel 2019
Помогите
 
Ответить
СообщениеПомогите

Автор - Dalm
Дата добавления - 06.07.2026 в 17:42
Dalm Дата: Понедельник, 06.07.2026, 22:30 | Сообщение № 28
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 209
Репутация: 4 ±
Замечаний: 0% ±

Excel 2019
Что же делать ?
Помогите
 
Ответить
СообщениеЧто же делать ?
Помогите

Автор - Dalm
Дата добавления - 06.07.2026 в 22:30
gling Дата: Понедельник, 06.07.2026, 23:27 | Сообщение № 29
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2712
Репутация: 781 ±
Замечаний: 0% ±

2010
Здравствуйте.
Да простят меня авторы макроса, подправил чутка их произведение. Посмотрите в файле.
К сообщению приложен файл: 8695739.xlsm (31.6 Kb)


ЯД-41001506838083
 
Ответить
СообщениеЗдравствуйте.
Да простят меня авторы макроса, подправил чутка их произведение. Посмотрите в файле.

Автор - gling
Дата добавления - 06.07.2026 в 23:27
Dalm Дата: Вторник, 07.07.2026, 13:49 | Сообщение № 30
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 209
Репутация: 4 ±
Замечаний: 0% ±

Excel 2019
gling, это вроде нормально работает.
Спасибо.
 
Ответить
Сообщениеgling, это вроде нормально работает.
Спасибо.

Автор - Dalm
Дата добавления - 07.07.2026 в 13:49
cmivadwot Дата: Вторник, 07.07.2026, 18:01 | Сообщение № 31
Группа: Проверенные
Ранг: Ветеран
Сообщений: 641
Репутация: 144 ±
Замечаний: 0% ±

365
Dalm,
К сообщению приложен файл: gotovo3.xlsm (39.8 Kb)
 
Ответить
СообщениеDalm,

Автор - cmivadwot
Дата добавления - 07.07.2026 в 18:01
MikeVol Дата: Вторник, 07.07.2026, 22:45 | Сообщение № 32
Группа: Проверенные
Ранг: Обитатель
Сообщений: 490
Репутация: 121 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
Dalm, Извините, далеко от компьютера был. Вот код исправленный, будет работать независимо сколько строк находятся таблицы друг от друга.[vba]
Код
Option Explicit
Const stdata        As String = "AA15"

Public Sub SplitTable_v3()
    On Error GoTo ErrorHandler

    Dim i As Long, ir As Long, g As Long, C As Long

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.CutCopyMode = False

    With ActiveSheet

        Dim st      As Range
        Set st = .Range(stdata)

        Dim nCol    As Long
        nCol = st.CurrentRegion.Columns.Count

        Dim rTitle  As Range
        Set rTitle = st.Resize(1, nCol)

        Dim arrData
        arrData = st.CurrentRegion.Value

        Dim r0      As Long
        r0 = st.Row
        '        Debug.Print r0

        Dim SrcCol  As Long
        SrcCol = st.Column

        Dim lCol    As Long
        lCol = .Cells(r0 - 1, .Columns.Count).End(xlToLeft).Column
        '        Debug.Print lCol

        Dim GroupCols() As Long
        Dim GroupCount As Long

        For C = SrcCol + 1 To lCol

            If Trim$(.Cells(r0 - 1, C).Value) = "Группа" Then
                GroupCount = GroupCount + 1
                ReDim Preserve GroupCols(1 To GroupCount)
                GroupCols(GroupCount) = C
            End If

        Next C

        If GroupCount = 0 Then GoTo ExitHandler

        Dim LastCol As Long
        LastCol = .Cells(15, .Columns.Count).End(xlToLeft).Column
        '        Debug.Print LastCol

        Dim LastRow As Long
        LastRow = r0 + UBound(arrData)
        '        Debug.Print LastRow

        .Range(.Cells(15, "AH"), .Cells(LastRow, LastCol)).Clear

        g = 0

        For i = 2 To UBound(arrData)

            If arrData(i, 2) Like "Группа *" Then
                g = g + 1
                If g > GroupCount Then Exit For
                ir = i

            ElseIf i < UBound(arrData) Then

                Do While i < UBound(arrData)
                    If arrData(i, 2) Like "Группа *" Then Exit Do

                    i = i + 1
                Loop

                rTitle.Copy
                .Cells(r0, GroupCols(g)).PasteSpecial xlPasteAll

                .Cells(r0 + ir - 1, SrcCol).Resize(i - ir, nCol).Copy

                .Cells(r0 + 1, GroupCols(g)).PasteSpecial _
                        Paste:=xlPasteValuesAndNumberFormats

                .Cells(r0 + ir - 1, SrcCol).Resize(i - ir, nCol).Copy

                .Cells(r0 + 1, GroupCols(g)).PasteSpecial _
                        Paste:=xlPasteFormats

                i = i - 1
            End If

        Next i

    End With

ExitHandler:
    Application.CutCopyMode = False
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    Exit Sub

ErrorHandler:
    MsgBox Err.Description, vbCritical
    Resume ExitHandler
End Sub
[/vba]ПЫСЫ, файлы помогающих не смотрел. Удачи.


Ученик.
Одесса - Украина


Сообщение отредактировал MikeVol - Вторник, 07.07.2026, 22:54
 
Ответить
СообщениеDalm, Извините, далеко от компьютера был. Вот код исправленный, будет работать независимо сколько строк находятся таблицы друг от друга.[vba]
Код
Option Explicit
Const stdata        As String = "AA15"

Public Sub SplitTable_v3()
    On Error GoTo ErrorHandler

    Dim i As Long, ir As Long, g As Long, C As Long

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.CutCopyMode = False

    With ActiveSheet

        Dim st      As Range
        Set st = .Range(stdata)

        Dim nCol    As Long
        nCol = st.CurrentRegion.Columns.Count

        Dim rTitle  As Range
        Set rTitle = st.Resize(1, nCol)

        Dim arrData
        arrData = st.CurrentRegion.Value

        Dim r0      As Long
        r0 = st.Row
        '        Debug.Print r0

        Dim SrcCol  As Long
        SrcCol = st.Column

        Dim lCol    As Long
        lCol = .Cells(r0 - 1, .Columns.Count).End(xlToLeft).Column
        '        Debug.Print lCol

        Dim GroupCols() As Long
        Dim GroupCount As Long

        For C = SrcCol + 1 To lCol

            If Trim$(.Cells(r0 - 1, C).Value) = "Группа" Then
                GroupCount = GroupCount + 1
                ReDim Preserve GroupCols(1 To GroupCount)
                GroupCols(GroupCount) = C
            End If

        Next C

        If GroupCount = 0 Then GoTo ExitHandler

        Dim LastCol As Long
        LastCol = .Cells(15, .Columns.Count).End(xlToLeft).Column
        '        Debug.Print LastCol

        Dim LastRow As Long
        LastRow = r0 + UBound(arrData)
        '        Debug.Print LastRow

        .Range(.Cells(15, "AH"), .Cells(LastRow, LastCol)).Clear

        g = 0

        For i = 2 To UBound(arrData)

            If arrData(i, 2) Like "Группа *" Then
                g = g + 1
                If g > GroupCount Then Exit For
                ir = i

            ElseIf i < UBound(arrData) Then

                Do While i < UBound(arrData)
                    If arrData(i, 2) Like "Группа *" Then Exit Do

                    i = i + 1
                Loop

                rTitle.Copy
                .Cells(r0, GroupCols(g)).PasteSpecial xlPasteAll

                .Cells(r0 + ir - 1, SrcCol).Resize(i - ir, nCol).Copy

                .Cells(r0 + 1, GroupCols(g)).PasteSpecial _
                        Paste:=xlPasteValuesAndNumberFormats

                .Cells(r0 + ir - 1, SrcCol).Resize(i - ir, nCol).Copy

                .Cells(r0 + 1, GroupCols(g)).PasteSpecial _
                        Paste:=xlPasteFormats

                i = i - 1
            End If

        Next i

    End With

ExitHandler:
    Application.CutCopyMode = False
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    Exit Sub

ErrorHandler:
    MsgBox Err.Description, vbCritical
    Resume ExitHandler
End Sub
[/vba]ПЫСЫ, файлы помогающих не смотрел. Удачи.

Автор - MikeVol
Дата добавления - 07.07.2026 в 22:45
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2026 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!