Задать вопрос
@Darkzenon

Как структурировать таблицу excel?

Добрый день.
есть таблица полученная с форм сотрудников (1000 шт.)
сотрудники идут по строкам. проблема в том, что в каждой форме сотрудника порядок столбцов и их количество разнится.
и вторая проблема, что есть несколько одинаковых полей. вида "дата проверки."
так же косяк что в названиях полей формы есть очепятки. аттестат, атестат атесттат аттесттат.
схематично данные выглядят так.
А Б С
А Б В
Б А А
А Б С Д Г
Г Д А А

Цель сделать таблицу и разнести одинаковые поля таблицы сотрудника в одну колонку. По столбцам уникального содержания типа "ФИО" это не проблема, косяк появляется когда разношу данные по столбам которых может быть много. столбец появляется только один и в нем только одни данные.
Есть у кого идеи как можно решить задачку,

для поиска и разнесения уникальных столбцов сделал такой код на vba.
Сами данные в csv но это сильно не поможет.

spoiler
Dim dicTemp1 As Dictionary
Set dicTemp1 = CreateObject("Scripting.Dictionary")

Dim headDic As Dictionary
Set headDic = CreateObject("Scripting.Dictionary")
  
newrow = 2

For i = 2 To 60 Step 2
    dicTemp1.RemoveAll
    
    For x = 4 To 79
            
            If dicTemp1.Exists(Cells(i, x).value) Then ' если значение есть в списке заголовков СТРОКИ
                dicTemp1.Item(Cells(i, x).value) = dicTemp1.Item(Cells(i, x).value) + 1
                DoubleFlag = 1
            Else
                dicTemp1.Add Cells(i, x).value, 1
                DoubleFlag = 0
            End If

            If DoubleFlag = 0 Then
                If headDic.Exists(Cells(i, x).value) Then ' если значение есть в списке заголовков ТАБЛИЦЫ
                    Worksheets("Лист2").Cells(newrow, headDic.Item(Cells(i, x).value)) = Cells(i + 1, x).value
                Else
                    headDic.Add Cells(i, x).value, headDic.Count + 1
                    Worksheets("Лист2").Cells(1, headDic.Count) = Cells(i, x).value
                    Worksheets("Лист2").Cells(newrow, headDic.Count) = Cells(i + 1, x).value
                End If
            Else
                    lastCol = Worksheets("Лист2").Cells(1, Worksheets("Лист2").Columns.Count).End(xlToLeft).Column
                    Worksheets("Лист2").Cells(1, lastCol) = Cells(i, x).value
                    Worksheets("Лист2").Cells(newrow, lastCol) = Cells(i + 1, x).value
               End If
    Next
    newrow = newrow + 1
Next

  • Вопрос задан
  • 332 просмотра
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
По сути это полуручная работа.
Нужно все таблицы привести к единому виду, а потом загрузить.
Либо сделать скрипт для загрузки 1 файла, что удалось перенести переносим скриптом, остальное руками.
Нужно было думать до того как раздавали форму заполнять.
Как вариант - подготовить универсальную форму и, включив административный ресурс, спустить ее с требованием все привести к общему виду. Форму лучше защитить паролем, оставив для редактирования только нужные ячейки, где можно добавить выбор из возможных вариантов и прочую проверку ввода.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы