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

Вход

Регистрация

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

 

= Мир MS Excel/Преобразование таблицы к плоскому виду - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Преобразование таблицы к плоскому виду (Макросы/Sub)
Преобразование таблицы к плоскому виду
baaur Дата: Понедельник, 02.02.2015, 19:35 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 70
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый вечер, знатоки Excel.
Нужна Ваша помощь, есть таблица данных намного больше чем в прилагаемом примере и постоянно меняется. На этом же сайте помогли сделать макрос для копирования данных таблицы в новый лист в один столбец. Но теперь необходимо подкорректировать, то есть данные первого столбца должны копироваться под подрядят в новом столбце левее и в последующих заголовках названия тоже должны копироваться в низ по количеству своих данных.
Заранее спасибо!
К сообщению приложен файл: 4305539.xlsm (14.7 Kb)
 
Ответить
СообщениеДобрый вечер, знатоки Excel.
Нужна Ваша помощь, есть таблица данных намного больше чем в прилагаемом примере и постоянно меняется. На этом же сайте помогли сделать макрос для копирования данных таблицы в новый лист в один столбец. Но теперь необходимо подкорректировать, то есть данные первого столбца должны копироваться под подрядят в новом столбце левее и в последующих заголовках названия тоже должны копироваться в низ по количеству своих данных.
Заранее спасибо!

Автор - baaur
Дата добавления - 02.02.2015 в 19:35
baaur Дата: Понедельник, 02.02.2015, 19:37 | Сообщение № 2
Группа: Пользователи
Ранг: Участник
Сообщений: 70
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Пытался сделать сводной таблицей, не получается.
 
Ответить
СообщениеПытался сделать сводной таблицей, не получается.

Автор - baaur
Дата добавления - 02.02.2015 в 19:37
Pelena Дата: Понедельник, 02.02.2015, 19:46 | Сообщение № 3
Группа: Админы
Ранг: Местный житель
Сообщений: 19188
Репутация: 4421 ±
Замечаний: ±

Excel 365 & Mac Excel
Вам поможет Редизайнер таблиц
http://www.planetaexcel.ru/techniques/3/55/


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеВам поможет Редизайнер таблиц
http://www.planetaexcel.ru/techniques/3/55/

Автор - Pelena
Дата добавления - 02.02.2015 в 19:46
baaur Дата: Понедельник, 02.02.2015, 20:22 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 70
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо!!!
 
Ответить
СообщениеСпасибо!!!

Автор - baaur
Дата добавления - 02.02.2015 в 20:22
krosav4ig Дата: Понедельник, 02.02.2015, 21:49 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
В excel 2010-13 можно это сделать еще и с помощью Power Query
video


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
СообщениеВ excel 2010-13 можно это сделать еще и с помощью Power Query
video

Автор - krosav4ig
Дата добавления - 02.02.2015 в 21:49
DJ_Marker_MC Дата: Вторник, 03.02.2015, 11:27 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 991
Репутация: 213 ±
Замечаний: 0% ±

Excel 2019
Давно пользуюсь редизайнером по ссылке которую выложила Pelena выше. Решил еще раз сегодня перейти и почитать для общего образования. Думал может что интересного новенького появилось...
Потом спустился там же читать комментарии и наткнулся на модернизированный код от МСН и небольшого дополнения от одного из пользователей дружественного ресурса.
В конечном итого добавил скажем так конечный штрих от себя и получил действительно улучшенное решение по сравнению с тем что предложено Николаем.
В итоге редизайнер от МСН вышел таким вот:
[vba]
Код
Sub RedesignerMCH()
      Dim inpdata As Range, realdata As Range, ns As Worksheet
      Dim i&, j&, k&, c&, r&, hc&, hr&
      Dim out(), dataArr, hcArr, hrArr
      On Error GoTo line1
      Set inpdata = Application.InputBox(prompt:="Выберите обрабатываемый диапазон:", Title:="Выбор диапазона", Type:=8)
      
      hr = InputBox("Сколько строк с подписями данных сверху")
      hc = InputBox("Сколько столбцов с подписями данных слева?")
      On Error GoTo 0

Application.ScreenUpdating = False
      If inpdata.Rows.Count <= hr Or inpdata.Columns.Count <= hc Then Exit Sub
      Set realdata = inpdata.Offset(hr, hc).Resize(inpdata.Rows.Count - hr, inpdata.Columns.Count - hc)
      dataArr = realdata.Value
      If hr Then hrArr = inpdata.Offset(0, hc).Resize(hr, inpdata.Columns.Count - hc).Value
      If hc Then hcArr = inpdata.Offset(hr, 0).Resize(inpdata.Rows.Count - hr, hc).Value
        
      ReDim out(1 To realdata.Count, 1 To hr + hc + 1)
      Set ns = Worksheets.Add
        
      For i = 1 To UBound(dataArr, 1)
          For j = 1 To UBound(dataArr, 2)
              k = k + 1
              For c = 1 To hc: out(k, c) = hcArr(i, c): Next c
              For r = 1 To hr: out(k, c + r - 1) = hrArr(r, j): Next r
              out(k, c + r - 1) = dataArr(i, j)
      Next j, i
      ns.Cells(2, 1).Resize(UBound(out, 1), UBound(out, 2)) = out
Application.ScreenUpdating = True
line1:
End Sub
[/vba]

Касаемо того, что добавил в этот код от себя, то это сущая мелочь, а именно
[vba]
Код
On Error GoTo line1
....
On Error GoTo 0
....
line1:
[/vba]
Но если не добавить эти строки, то при отмене, когда выдается запрос на выбор диапазона, будет выскакивать ошибка, что не есть красиво.

В целом очень быстро и красиво!
 
Ответить
СообщениеДавно пользуюсь редизайнером по ссылке которую выложила Pelena выше. Решил еще раз сегодня перейти и почитать для общего образования. Думал может что интересного новенького появилось...
Потом спустился там же читать комментарии и наткнулся на модернизированный код от МСН и небольшого дополнения от одного из пользователей дружественного ресурса.
В конечном итого добавил скажем так конечный штрих от себя и получил действительно улучшенное решение по сравнению с тем что предложено Николаем.
В итоге редизайнер от МСН вышел таким вот:
[vba]
Код
Sub RedesignerMCH()
      Dim inpdata As Range, realdata As Range, ns As Worksheet
      Dim i&, j&, k&, c&, r&, hc&, hr&
      Dim out(), dataArr, hcArr, hrArr
      On Error GoTo line1
      Set inpdata = Application.InputBox(prompt:="Выберите обрабатываемый диапазон:", Title:="Выбор диапазона", Type:=8)
      
      hr = InputBox("Сколько строк с подписями данных сверху")
      hc = InputBox("Сколько столбцов с подписями данных слева?")
      On Error GoTo 0

Application.ScreenUpdating = False
      If inpdata.Rows.Count <= hr Or inpdata.Columns.Count <= hc Then Exit Sub
      Set realdata = inpdata.Offset(hr, hc).Resize(inpdata.Rows.Count - hr, inpdata.Columns.Count - hc)
      dataArr = realdata.Value
      If hr Then hrArr = inpdata.Offset(0, hc).Resize(hr, inpdata.Columns.Count - hc).Value
      If hc Then hcArr = inpdata.Offset(hr, 0).Resize(inpdata.Rows.Count - hr, hc).Value
        
      ReDim out(1 To realdata.Count, 1 To hr + hc + 1)
      Set ns = Worksheets.Add
        
      For i = 1 To UBound(dataArr, 1)
          For j = 1 To UBound(dataArr, 2)
              k = k + 1
              For c = 1 To hc: out(k, c) = hcArr(i, c): Next c
              For r = 1 To hr: out(k, c + r - 1) = hrArr(r, j): Next r
              out(k, c + r - 1) = dataArr(i, j)
      Next j, i
      ns.Cells(2, 1).Resize(UBound(out, 1), UBound(out, 2)) = out
Application.ScreenUpdating = True
line1:
End Sub
[/vba]

Касаемо того, что добавил в этот код от себя, то это сущая мелочь, а именно
[vba]
Код
On Error GoTo line1
....
On Error GoTo 0
....
line1:
[/vba]
Но если не добавить эти строки, то при отмене, когда выдается запрос на выбор диапазона, будет выскакивать ошибка, что не есть красиво.

В целом очень быстро и красиво!

Автор - DJ_Marker_MC
Дата добавления - 03.02.2015 в 11:27
Pelena Дата: Вторник, 03.02.2015, 11:36 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 19188
Репутация: 4421 ±
Замечаний: ±

Excel 365 & Mac Excel
Евгений, оформляй как Готовое решение или статью. Будем давать ссылку на свой редизайнер ;)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЕвгений, оформляй как Готовое решение или статью. Будем давать ссылку на свой редизайнер ;)

Автор - Pelena
Дата добавления - 03.02.2015 в 11:36
DJ_Marker_MC Дата: Среда, 04.02.2015, 10:46 | Сообщение № 8
Группа: Друзья
Ранг: Ветеран
Сообщений: 991
Репутация: 213 ±
Замечаний: 0% ±

Excel 2019
 
Ответить
СообщениеPelena, да будет так)))
Редизайнер таблиц (преобразование в плоскую таблицу)

Автор - DJ_Marker_MC
Дата добавления - 04.02.2015 в 10:46
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Преобразование таблицы к плоскому виду (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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