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

Вход

Регистрация

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

 

= Мир MS Excel/Как перенести цикл значений ячеек на следующую строку? - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Как перенести цикл значений ячеек на следующую строку?
CCROWW Дата: Среда, 05.04.2023, 10:06 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

2019, 2021
Проблема следующая. Есть выгружаемый отчет, в котором может быть неограниченное количество циклично повторяющихся столбцов в рамках одной строки. При новом внесении информации в форму информация вносится также в строку ниже.
Необходимо, чтобы цикл столбцов в рамках одной строки переносился на новой странице в формате. Циклы столбцов имеют идентичное наименование только с припиской [1], [2] и т.д.
Пример в одному строку и итоговый вид на отдельном листе приложил. Помогите, пожалуйста
К сообщению приложен файл: 2023_04_04_novaia_forma.xlsx (10.0 Kb)
 
Ответить
СообщениеПроблема следующая. Есть выгружаемый отчет, в котором может быть неограниченное количество циклично повторяющихся столбцов в рамках одной строки. При новом внесении информации в форму информация вносится также в строку ниже.
Необходимо, чтобы цикл столбцов в рамках одной строки переносился на новой странице в формате. Циклы столбцов имеют идентичное наименование только с припиской [1], [2] и т.д.
Пример в одному строку и итоговый вид на отдельном листе приложил. Помогите, пожалуйста

Автор - CCROWW
Дата добавления - 05.04.2023 в 10:06
msi2102 Дата: Среда, 05.04.2023, 15:05 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 415
Репутация: 129 ±
Замечаний: 0% ±

Excel 2007
Можно таким макросом
[vba]
Код
Sub Макрос4()
    Dim n As Integer, m As Integer, i As Integer, f As Boolean, arr1, arr2, y, st As String
    Set head = CreateObject("Scripting.Dictionary")
    With Worksheets("Sheet")
        arr1 = .Range(.Cells(1, 3), .Cells(.Cells(Rows.Count, 1).End(xlUp).Row, .Cells(1, Columns.Count).End(xlToLeft).Column))
    End With
    m = 0
    For n = 1 To UBound(arr1, 2)
        st = Trim(Split(arr1(1, n), "[")(0))
        If Not head.exists(st) Then head.Add st, head.Count + 1 ' n
        If st = "Дата выхода сотрудника" Then
            For i = 2 To UBound(arr1)
                If arr1(i, n) <> "" Then m = m + 1
            Next
        End If
    Next n
    ReDim arr2(0 To m, 1 To head.Count + 1)
    i = 1
    For Each y In head
        arr2(0, i) = y: i = i + 1
    Next y
    i = 0
    For n = 2 To UBound(arr1)
        For m = 1 To UBound(arr1, 2)
            st = Trim(Split(arr1(1, m), "[")(0))
            If st = "Дата выхода сотрудника" Then
                If arr1(n, m) <> "" Then f = True: i = i + 1 Else f = False
            End If
            If f Then arr2(i, CInt(head(st))) = arr1(n, m)
        Next
    Next
    Worksheets("Лист1").Cells.Clear
    Worksheets("Лист1").Range("A1").Resize(UBound(arr2) + 1, UBound(arr2, 2)) = arr2
    Worksheets("Лист1").Activate
End Sub
[/vba]
К сообщению приложен файл: 2023_04_04_novaia_forma.xlsm (22.2 Kb)


Сообщение отредактировал msi2102 - Среда, 05.04.2023, 15:17
 
Ответить
СообщениеМожно таким макросом
[vba]
Код
Sub Макрос4()
    Dim n As Integer, m As Integer, i As Integer, f As Boolean, arr1, arr2, y, st As String
    Set head = CreateObject("Scripting.Dictionary")
    With Worksheets("Sheet")
        arr1 = .Range(.Cells(1, 3), .Cells(.Cells(Rows.Count, 1).End(xlUp).Row, .Cells(1, Columns.Count).End(xlToLeft).Column))
    End With
    m = 0
    For n = 1 To UBound(arr1, 2)
        st = Trim(Split(arr1(1, n), "[")(0))
        If Not head.exists(st) Then head.Add st, head.Count + 1 ' n
        If st = "Дата выхода сотрудника" Then
            For i = 2 To UBound(arr1)
                If arr1(i, n) <> "" Then m = m + 1
            Next
        End If
    Next n
    ReDim arr2(0 To m, 1 To head.Count + 1)
    i = 1
    For Each y In head
        arr2(0, i) = y: i = i + 1
    Next y
    i = 0
    For n = 2 To UBound(arr1)
        For m = 1 To UBound(arr1, 2)
            st = Trim(Split(arr1(1, m), "[")(0))
            If st = "Дата выхода сотрудника" Then
                If arr1(n, m) <> "" Then f = True: i = i + 1 Else f = False
            End If
            If f Then arr2(i, CInt(head(st))) = arr1(n, m)
        Next
    Next
    Worksheets("Лист1").Cells.Clear
    Worksheets("Лист1").Range("A1").Resize(UBound(arr2) + 1, UBound(arr2, 2)) = arr2
    Worksheets("Лист1").Activate
End Sub
[/vba]

Автор - msi2102
Дата добавления - 05.04.2023 в 15:05
CCROWW Дата: Среда, 05.04.2023, 17:37 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

2019, 2021
msi2102, спасибо огромное! hands
 
Ответить
Сообщениеmsi2102, спасибо огромное! hands

Автор - CCROWW
Дата добавления - 05.04.2023 в 17:37
  • Страница 1 из 1
  • 1
Поиск:

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