Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2015, 09:05   #1
evdss
Пользователь
 
Регистрация: 12.10.2010
Сообщений: 66
По умолчанию транспортировать

Добрый день! Есть таблица в которой с помощью функции произвожу транспонирование столбца в строку, пока значение равно, например, коду 105. Помогите, пожалуйста,с макросом чтобы это выполнить автоматически
Вложения
Тип файла: rar 1.rar (41.4 Кб, 11 просмотров)

Последний раз редактировалось evdss; 09.09.2015 в 08:56.
evdss вне форума Ответить с цитированием
Старый 08.09.2015, 10:19   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

извините за занудство, Вы, скорее всего, имеете в виду
транспонирование
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.09.2015, 10:40   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

выполниет Copy2Row при активном листе с данными.
предполагается данные в колонках А и В
результаты будут выведены, начиная с колокни Д

Код:
Sub Copy2Row()
  Dim d, k, r As Long
  Columns(4).Resize(, 250).ClearContents
  Set d = DictRange(Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp))):  k = d.keys
  Application.ScreenUpdating = False
  Cells(1, 4) = "kod": Cells(1, 5) = "zn1": Cells(1, 6) = "zn2": Cells(1, 7) = "zn3..."
  Cells(2, 4).Resize(UBound(k) + 1, 1) = WorksheetFunction.Transpose(k)
  For r = 0 To UBound(k)
    d(k(r)).Offset(0, 1).Copy:  Cells(2 + r, 5).PasteSpecial Transpose:=True
  Next
  Application.ScreenUpdating = True
End Sub


Function DictRange(rg As Range)
  Dim i As Long, a As Long, s As String, ar, d
  Set d = CreateObject("Scripting.Dictionary")
  For a = 1 To rg.Areas.Count
    If rg.Areas(a).Count = 1 Then ar(1, 1) = rg.Areas(a) Else ar = rg.Areas(a)
    For i = 1 To rg.Areas(a).Count
      If d.exists(ar(i, 1)) Then
        Set d(ar(i, 1)) = Application.Union(d(ar(i, 1)), rg.Areas(a).Cells(i))
      Else
        Set d(ar(i, 1)) = rg.Areas(a).Cells(i)
      End If
    Next
  Next
  Set DictRange = d
End Function
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Транспортировать матрицу infernal110 PHP 9 07.12.2013 04:34
Транспортировать матрицу sidestep Помощь студентам 24 24.09.2011 20:33